diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..01c8d22eb8c --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,42 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/withastro/astro/blob/main/.devcontainer/with-mdx/devcontainer.json +{ + "name": "Astro", + + "build": { + "dockerfile": "../Dockerfile" + }, + + "portsAttributes": { + "5086": { + "label": "Application", + "onAutoForward": "openPreview" + } + }, + + "forwardPorts": [5086], + + "postAttachCommand": "yarn dev", + + "customizations": { + "codespaces": { + "openFiles": ["README.md"] + }, + "vscode": { + "extensions": [ + "ms-dotnettools.csharp", + "DavidAnson.vscode-markdownlint", + "shardulm94.trailing-spaces", + "nhoizey.gremlins", + "streetsidesoftware.code-spell-checker", + "bierner.emojisense", + "astro-build.astro-vscode", + "esbenp.prettier-vscode", + "unifiedjs.vscode-mdx", + "ms-vscode.vscode-typescript-next", + "dbaeumer.vscode-eslint" + ] + } + }, + "remoteUser": "node" +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..0dbaa9b2279 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,54 @@ +# build output +dist/ + +# generated types +.astro/ + +# dependencies +node_modules/ + +# git history +.git + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# npm +npm-debug.log +.coverage +.coverage.* +.env +.aws + +# yarn +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ + +# choco-theme +public/fonts +public/scripts +public/styles +public/images/global-shared + +# general +apple-touch-*.png +favicon.ico +.astro diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..ffe9a1f4fda --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{js,json,yml}] +charset = utf-8 +indent_style = space +indent_size = 4 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..af3ad128122 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +/.yarn/** linguist-vendored +/.yarn/releases/* binary +/.yarn/plugins/**/* binary +/.pnp.* binary linguist-generated diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..58028c27a06 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Ask A Question + url: https://github.com/chocolatey/docs/discussions + about: Please ask and answer questions here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/zFeatureRequest.md b/.github/ISSUE_TEMPLATE/zFeatureRequest.md new file mode 100644 index 00000000000..45649b0c0bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/zFeatureRequest.md @@ -0,0 +1,28 @@ +--- +name: Documentation Enhancement / Addition +about: Would you like to see new or updated documentation? +--- + + + +## What New Or Updated Would You Like To See? + + + +## Why Is It Needed? + + + +## Additional Context? + + diff --git a/.github/ISSUE_TEMPLATE/zReportIssue.md b/.github/ISSUE_TEMPLATE/zReportIssue.md new file mode 100644 index 00000000000..171b39c96fd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/zReportIssue.md @@ -0,0 +1,29 @@ +--- +name: Report Issue +about: Did you find issues in our documentation? +--- + + + +### What You Are Seeing? + + +### What is Expected? + + +### How Did You Get This To Happen? (Steps to Reproduce) + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..738e527618a --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,57 @@ + + +## Description Of Changes + + +## Motivation and Context + + +## Testing + +* [ ] I have previewed these changes using the [Docker Container](https://github.com/chocolatey/docs/tree/master/.devcontainer) or another method before submitting this pull request. + +## Change Types Made + + +* [ ] Minor documentation fix (typos etc.). +* [ ] Major documentation change (refactoring, reformatting or adding documentation to existing page). +* [ ] New documentation page added. +* [ ] The change I have made should have a video added, and I have raised an issue for this. + * Issue # + +## Change Checklist + +* [ ] Requires a change to menu structure (top or left-hand side)/ +* [ ] Menu structure has been updated + +## Related Issue + + +Fixes # + + diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 00000000000..422e212dfb7 --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,3 @@ +- name: "Video" + color: "D0E64E" + description: "The issue or PR requires a video to be recorded and included in a later PR." diff --git a/.github/workflows/label-sync.yml b/.github/workflows/label-sync.yml new file mode 100644 index 00000000000..ec0b46c1eaa --- /dev/null +++ b/.github/workflows/label-sync.yml @@ -0,0 +1,28 @@ +name: Sync labels +on: + workflow_dispatch: + schedule: + # Run at the end of the day (most likely UTC) + - cron: "0 0 * * *" + push: + branches: + - "master" + paths: + - ".github/labels.yml" + +jobs: + labels: + # We use ubuntu as the image, as it is typically faster and cheaper (on private repos). + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3.0.2 + - uses: EndBug/label-sync@v2.2.0 + with: + config-file: | + https://raw.githubusercontent.com/chocolatey/.github/master/.github/labels.yml + .github/labels.yml + request-token: ${{ secrets.SYNC_TOKEN }} # Used when getting the config files. + delete-other-labels: true + dry-run: false + token: ${{ secrets.SYNC_TOKEN }} # Used when updating the lables on the repository \ No newline at end of file diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 00000000000..bfba5ac6b88 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,32 @@ +name: Publish Documentation + +on: + push: + branches: [ master ] + workflow_dispatch: + +# Allow this job to clone the repo and create a page deployment +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository using git + uses: actions/checkout@v4 + - name: Install, build, and upload site + uses: withastro/action@v2 + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/pullrequest.yaml b/.github/workflows/pullrequest.yaml new file mode 100644 index 00000000000..af0f5daa6e9 --- /dev/null +++ b/.github/workflows/pullrequest.yaml @@ -0,0 +1,17 @@ +name: Build Pull Request + +on: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository using git + uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + - name: Build site + run: yarn build diff --git a/.gitignore b/.gitignore index 16d54bb13c8..7f9f1ae3045 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # build output dist/ + # generated types .astro/ @@ -12,6 +13,21 @@ yarn-debug.log* yarn-error.log* pnpm-debug.log* +# npm +npm-debug.log +.coverage +.coverage.* +.env +.aws + +# yarn +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions # environment variables .env @@ -22,3 +38,14 @@ pnpm-debug.log* # jetbrains setting folder .idea/ + +# choco-theme +public/fonts +public/scripts +public/styles +public/images/global-shared + +# general +apple-touch-*.png +favicon.ico +.astro diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 00000000000..d52120e02e9 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,9 @@ +{ + "MD026": false, + "MD013": false, + "MD024": false, + "MD034": false, + "MD033": { + "allowed_elements": ["details", "strong", "summary"] + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..15756114b07 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,92 @@ +{ + "cSpell.words": [ + "Admins", + "adobereader", + "Authenticode", + "baretail", + "baselined", + "behavior", + "Boxstarter", + "choco", + "chococcm", + "Chocolatey's", + "chocolateyorg", + "chocolateypackage", + "Cloudsmith", + "cmdlet", + "crapware", + "cygwin", + "digicert", + "Disqus", + "distro", + "distros", + "Emoji", + "exes", + "fullname", + "gemcutter", + "gitextensions", + "Gitter", + "HKEY", + "HKLM", + "honor", + "Internalizer", + "Intune", + "intunewin", + "Kickstarter", + "labeouf", + "LASTEXITCODE", + "malware", + "minecraft", + "MITM", + "MSIX", + "myget", + "Ninite", + "notepadplusplus", + "nuget", + "nupkg", + "packagename", + "packageparameters", + "pkgid", + "pkgname", + "programdata", + "psobject", + "qdeazure", + "rebundle", + "Roadmap", + "Saltstack", + "SCCM", + "scriptable", + "shia", + "Sonatype", + "sphynx", + "Statiq", + "sysadmins", + "TLDR", + "uninstallation", + "Uninstaller", + "Uninstalling", + "uninstalls", + "versioningupgrades", + "webpi", + "whatif", + "windirstat", + "xcopy", + "amped", + "astro", + "authenticode", + "Checksumming", + "chocolateypackage", + "datetime", + "Intune", + "MITM", + "nocheck", + "rehype", + "SCCM", + "TLDR", + "whatif" + ], + "languageToolLinter.languageTool.ignoredWordsInWorkspace": [ + "qde", + "sonatype" + ] +} \ No newline at end of file diff --git a/.yarn/releases/yarn-4.1.1.cjs b/.yarn/releases/yarn-4.1.1.cjs new file mode 100755 index 00000000000..233bb7a3b2b --- /dev/null +++ b/.yarn/releases/yarn-4.1.1.cjs @@ -0,0 +1,893 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var Z3e=Object.create;var NR=Object.defineProperty;var $3e=Object.getOwnPropertyDescriptor;var e_e=Object.getOwnPropertyNames;var t_e=Object.getPrototypeOf,r_e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)NR(t,r,{get:e[r],enumerable:!0})},n_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of e_e(e))!r_e.call(t,a)&&a!==r&&NR(t,a,{get:()=>e[a],enumerable:!(o=$3e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?Z3e(t_e(t)):{},n_e(e||!t||!t.__esModule?NR(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Vt(vi,{SAFE_TIME:()=>x7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Ou,S_IFREG:()=>qw});var Ou,wD,qw,ID,x7,k7=Et(()=>{Ou=61440,wD=16384,qw=32768,ID=40960,x7=456789e3});var ar={};Vt(ar,{EBADF:()=>Io,EBUSY:()=>i_e,EEXIST:()=>u_e,EINVAL:()=>o_e,EISDIR:()=>c_e,ENOENT:()=>a_e,ENOSYS:()=>s_e,ENOTDIR:()=>l_e,ENOTEMPTY:()=>f_e,EOPNOTSUPP:()=>p_e,EROFS:()=>A_e,ERR_DIR_CLOSED:()=>LR});function Tl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function i_e(t){return Tl("EBUSY",t)}function s_e(t,e){return Tl("ENOSYS",`${t}, ${e}`)}function o_e(t){return Tl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Tl("EBADF",`bad file descriptor, ${t}`)}function a_e(t){return Tl("ENOENT",`no such file or directory, ${t}`)}function l_e(t){return Tl("ENOTDIR",`not a directory, ${t}`)}function c_e(t){return Tl("EISDIR",`illegal operation on a directory, ${t}`)}function u_e(t){return Tl("EEXIST",`file already exists, ${t}`)}function A_e(t){return Tl("EROFS",`read-only filesystem, ${t}`)}function f_e(t){return Tl("ENOTEMPTY",`directory not empty, ${t}`)}function p_e(t){return Tl("EOPNOTSUPP",`operation not supported, ${t}`)}function LR(){return Tl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Vt(Ea,{BigIntStatsEntry:()=>ty,DEFAULT_MODE:()=>UR,DirEntry:()=>OR,StatEntry:()=>ey,areStatsEqual:()=>_R,clearStats:()=>vD,convertToBigIntStats:()=>g_e,makeDefaultStats:()=>Q7,makeEmptyStats:()=>h_e});function Q7(){return new ey}function h_e(){return vD(Q7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):MR.types.isDate(r)&&(t[e]=new Date(0))}return t}function g_e(t){let e=new ty;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):MR.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function _R(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var MR,UR,OR,ey,ty,HR=Et(()=>{MR=$e(ve("util")),UR=33188,OR=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=UR;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ty=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(UR);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function C_e(t){let e,r;if(e=t.match(y_e))t=e[1];else if(r=t.match(E_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function w_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(d_e))?t=`/${e[1]}`:(r=t.match(m_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?R7(e):qR(e)}var jw,Bt,dr,ue,V,F7,d_e,m_e,y_e,E_e,qR,R7,Ca=Et(()=>{jw=$e(ve("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),V=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();V.cwd=process.platform==="win32"?()=>qR(process.cwd()):process.cwd;process.platform==="win32"&&(V.resolve=(...t)=>t.length>0&&V.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(V.cwd(),...t));F7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>F7(ue,t,e);V.contains=(t,e)=>F7(V,t,e);d_e=/^([a-zA-Z]:.*)$/,m_e=/^\/\/(\.\/)?(.*)$/,y_e=/^\/([a-zA-Z]:.*)$/,E_e=/^\/unc\/(\.dot\/)?(.*)$/;qR=process.platform==="win32"?w_e:t=>t,R7=process.platform==="win32"?C_e:t=>t;ue.fromPortablePath=R7;ue.toPortablePath=qR});async function SD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function T7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Og,mtime:Og}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await jR(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function jR(t,e,r,o,a,n,u){let A=u.didParentExist?await N7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Og,mtime:Og}:p,I;switch(!0){case p.isDirectory():I=await B_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await S_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await P_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function N7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function B_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await jR(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async x=>{await jR(t,e,r,r.pathUtils.join(o,x),n,n.pathUtils.join(u,x),I)}))).some(x=>x)&&(h=!0);return h}async function v_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=420,v=A.mode&511,x=`${E}${v!==I?v.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${x}.dat`),R;(ce=>(ce[ce.Lock=0]="Lock",ce[ce.Rename=1]="Rename"))(R||={});let L=1,U=await N7(r,C);if(a){let ae=U&&a.dev===U.dev&&a.ino===U.ino,fe=U?.mtimeMs!==I_e;if(ae&&fe&&h.autoRepair&&(L=0,U=null),!ae)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let J=!U&&L===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(L===0&&await r.lockPromise(C,async()=>{let ae=await n.readFilePromise(u);await r.writeFilePromise(C,ae)}),L===1&&J)){let ae=await n.readFilePromise(u);await r.writeFilePromise(J,ae);try{await r.linkPromise(J,C)}catch(fe){if(fe.code==="EEXIST")te=!0,await r.unlinkPromise(J);else throw fe}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,Og,Og),v!==I&&await r.chmodPromise(C,v)),J&&!te&&await r.unlinkPromise(J)}),!1}async function D_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function S_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?v_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):D_e(t,e,r,o,a,n,u,A,p)}async function P_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Og,I_e,GR=Et(()=>{Ca();Og=new Date(456789e3*1e3),I_e=Og.getTime()});function PD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new Gw(e,a,o)}var Gw,L7=Et(()=>{BD();Gw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw LR()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function O7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var M7,ry,U7=Et(()=>{M7=ve("events");HR();ry=class extends M7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ry(r,o,a);return n.start(),n}start(){O7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){O7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ty:new ey;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;_R(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ny(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=bD.get(t);typeof p>"u"&&bD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ry.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=bD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Ug(t){let e=bD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var bD,YR=Et(()=>{U7();bD=new WeakMap});function b_e(t){let e=t.match(/\r?\n/g);if(e===null)return H7.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function _g(t,e){return e.replace(/\r?\n/g,b_e(t))}var _7,H7,gf,Mu,Hg=Et(()=>{_7=ve("crypto"),H7=ve("os");GR();Ca();gf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,_7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await T7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Mu=class extends gf{constructor(){super(V)}}});var Ss,df=Et(()=>{Hg();Ss=class extends gf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,q7=Et(()=>{df();Uu=class extends Ss{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function j7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var G7,Tn,qg=Et(()=>{G7=$e(ve("fs"));Hg();Ca();Tn=class extends Mu{constructor(r=G7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return V.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(j7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(j7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,Y7=Et(()=>{qg();df();Ca();gn=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?V.normalize(r):this.baseFs.resolve(V.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var W7,_u,K7=Et(()=>{qg();df();Ca();W7=Bt.root,_u=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(W7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(W7,this.pathUtils.relative(this.target,r))}}});var iy,V7=Et(()=>{df();iy=class extends Ss{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,Hp,J7=Et(()=>{jg=ve("fs");Hg();qg();YR();BD();Ca();wa=4278190080,Hp=class extends Mu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ny(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,WR,Yw,z7=Et(()=>{Hg();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),WR=class extends gf{constructor(){super(V)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Yw=WR;Yw.instance=new WR});var qp,X7=Et(()=>{df();Ca();qp=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var x_e,KR,k_e,mi,Z7=Et(()=>{qg();df();Ca();x_e=/^[0-9]+$/,KR=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,k_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ss{constructor({baseFs:r=new Tn}={}){super(V);this.baseFs=r}static makeVirtualPath(r,o,a){if(V.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!V.basename(o).match(k_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=V.relative(V.dirname(r),a).split("/"),A=0;for(;A{VR=$e(ve("buffer")),$7=ve("url"),eY=ve("util");df();Ca();xD=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof URL)return(0,$7.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!Q_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Bo,mf,jp,kD,QD,sy,Tc,Nc,F_e,R_e,T_e,N_e,Ww,nY=Et(()=>{rY=ve("readline"),Bo=Symbol("kBaseFs"),mf=Symbol("kFd"),jp=Symbol("kClosePromise"),kD=Symbol("kCloseResolve"),QD=Symbol("kCloseReject"),sy=Symbol("kRefs"),Tc=Symbol("kRef"),Nc=Symbol("kUnref"),Ww=class{constructor(e,r){this[F_e]=1;this[R_e]=void 0;this[T_e]=void 0;this[N_e]=void 0;this[Bo]=r,this[mf]=e}get fd(){return this[mf]}async appendFile(e,r){try{this[Tc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Tc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Tc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Tc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Tc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Tc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Tc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Tc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Tc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Tc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[mf]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[kD]=e,this[QD]=r}).finally(()=>{this[jp]=void 0,this[QD]=void 0,this[kD]=void 0});return this[jp]}[(Bo,mf,F_e=sy,R_e=jp,T_e=kD,N_e=QD,Tc)](e){if(this[mf]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[sy]++}[Nc](){if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[Bo].closePromise(e).then(this[kD],this[QD])}}}});function Kw(t,e){e=new xD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[oy.promisify.custom]<"u"&&(n[oy.promisify.custom]=u[oy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of L_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Ww?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Ww(n,e)})}t.read[oy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[oy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function FD(t,e){let r=Object.create(t);return Kw(r,e),r}var oy,L_e,iY,sY=Et(()=>{oy=ve("util");tY();nY();L_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(JR)return JR;let t=ue.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),JR={tmpdir:t,realTmpdir:e}}var lY,Lc,JR,oe,cY=Et(()=>{lY=$e(ve("os"));qg();Ca();Lc=new Set,JR=null;oe=Object.assign(new Tn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Vt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Mu,CustomDir:()=>Gw,CwdFS:()=>gn,FakeFS:()=>gf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>iy,MountFS:()=>Hp,NoFS:()=>Yw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>qp,ProxiedFS:()=>Ss,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>FD,normalizeLineEndings:()=>_g,npath:()=>ue,opendir:()=>PD,patchFs:()=>Kw,ppath:()=>V,setupCopyIndex:()=>SD,statUtils:()=>Ea,unwatchAllFiles:()=>Ug,unwatchFile:()=>Mg,watchFile:()=>ny,xfs:()=>oe});var St=Et(()=>{k7();BD();HR();GR();L7();YR();Hg();Ca();Ca();q7();Hg();Y7();K7();V7();J7();z7();qg();X7();df();Z7();sY();cY()});var hY=_((obt,pY)=>{pY.exports=fY;fY.sync=M_e;var uY=ve("fs");function O_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=U_e;var gY=ve("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function U_e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&__e(t,e)}function __e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var wY=_((cbt,CY)=>{var lbt=ve("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=hY():RD=EY();CY.exports=zR;zR.sync=H_e;function zR(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){zR(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function H_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var bY=_((ubt,PY)=>{var ay=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=ve("path"),q_e=ay?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),DY=(t,e)=>{let r=e.colon||q_e,o=t.match(/\//)||ay&&t.match(/\\/)?[""]:[...ay?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=ay?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=ay?a.split(r):[""];return ay&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},SY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=DY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(vY(t));let v=o[h],x=/^".*"$/.test(v)?v.slice(1,-1):v,C=IY.join(x,t),R=!x&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(R,h,0))}),p=(h,E,I)=>new Promise((v,x)=>{if(I===a.length)return v(A(E+1));let C=a[I];BY(h+C,{pathExt:n},(R,L)=>{if(!R&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},j_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=DY(t,e),n=[];for(let u=0;u{"use strict";var xY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};XR.exports=xY;XR.exports.default=xY});var TY=_((fbt,RY)=>{"use strict";var QY=ve("path"),G_e=bY(),Y_e=kY();function FY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=G_e.sync(t.command,{path:r[Y_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function W_e(t){return FY(t)||FY(t,!0)}RY.exports=W_e});var NY=_((pbt,$R)=>{"use strict";var ZR=/([()\][%!^"`<>&|;, *?])/g;function K_e(t){return t=t.replace(ZR,"^$1"),t}function V_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(ZR,"^$1"),e&&(t=t.replace(ZR,"^$1")),t}$R.exports.command=K_e;$R.exports.argument=V_e});var OY=_((hbt,LY)=>{"use strict";LY.exports=/^#!(.*)/});var UY=_((gbt,MY)=>{"use strict";var J_e=OY();MY.exports=(t="")=>{let e=t.match(J_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((dbt,_Y)=>{"use strict";var eT=ve("fs"),z_e=UY();function X_e(t){let r=Buffer.alloc(150),o;try{o=eT.openSync(t,"r"),eT.readSync(o,r,0,150,0),eT.closeSync(o)}catch{}return z_e(r.toString())}_Y.exports=X_e});var YY=_((mbt,GY)=>{"use strict";var Z_e=ve("path"),qY=TY(),jY=NY(),$_e=HY(),e8e=process.platform==="win32",t8e=/\.(?:com|exe)$/i,r8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function n8e(t){t.file=qY(t);let e=t.file&&$_e(t.file);return e?(t.args.unshift(t.file),t.command=e,qY(t)):t.file}function i8e(t){if(!e8e)return t;let e=n8e(t),r=!t8e.test(e);if(t.options.forceShell||r){let o=r8e.test(e);t.command=Z_e.normalize(t.command),t.command=jY.command(t.command),t.args=t.args.map(n=>jY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function s8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:i8e(o)}GY.exports=s8e});var VY=_((ybt,KY)=>{"use strict";var tT=process.platform==="win32";function rT(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function o8e(t,e){if(!tT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawn"):null}function a8e(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:o8e,verifyENOENT:WY,verifyENOENTSync:a8e,notFoundError:rT}});var sT=_((Ebt,ly)=>{"use strict";var JY=ve("child_process"),nT=YY(),iT=VY();function zY(t,e,r){let o=nT(t,e,r),a=JY.spawn(o.command,o.args,o.options);return iT.hookChildProcess(a,o),a}function l8e(t,e,r){let o=nT(t,e,r),a=JY.spawnSync(o.command,o.args,o.options);return a.error=a.error||iT.verifyENOENTSync(a.status,o),a}ly.exports=zY;ly.exports.spawn=zY;ly.exports.sync=l8e;ly.exports._parse=nT;ly.exports._enoent=iT});var ZY=_((Cbt,XY)=>{"use strict";function c8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Gg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Gg)}c8e(Gg,Error);Gg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",P=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Pe="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},bt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),br=function(N){return[{type:"text",text:N}]},Wr='""',Kn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ti='"',ps=Br('"',!1),io=function(N){return N},Pi=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},lp=function(N){return{type:"shell",shell:N,quoted:!1}},cp=function(N){return{type:"variable",...N,quoted:!1}},Os=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Ms=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Vn=Br(`\\ +`,!1),On=function(){return""},Ni="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Oe=function(N){return N},ii="\\a",Ma=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,DA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Rt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",SA=Br("\\r",!1),up=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),bA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),qi="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=ug(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,K,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},ms=function(N,K){return{type:"number",value:(N==="-"?-1:1)*parseInt(K.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Sn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(N,K){return K.reduce((re,pe)=>({left:re,...pe}),N)},ye=function(N,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Le="$((",pt=Br("$((",!1),ht="))",Tt=Br("))",!1),er=function(N){return N},$r="$(",ji=Br("$(",!1),es=function(N){return N},bi="${",qo=Br("${",!1),kA=":-",QA=Br(":-",!1),Ap=function(N,K){return{name:N,defaultValue:K}},ig=":-}",gu=Br(":-}",!1),sg=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),FA=function(N,K){return{name:N,alternativeValue:K}},mc=":+}",ca=Br(":+}",!1),og=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",ag=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},fp=function(N){return N},lg=/^[a-zA-Z0-9_]/,RA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return cg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],xi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function cg(){return t.substring(Dt,G)}function yw(){return Ic(Dt,G)}function TA(N,K){throw K=K!==void 0?K:Ic(Dt,G),pg([fg(N)],t.substring(Dt,G),K)}function pp(N,K){throw K=K!==void 0?K:Ic(Dt,G),bm(N,K)}function Br(N,K){return{type:"literal",text:N,ignoreCase:K}}function Cs(N,K,re){return{type:"class",parts:N,inverted:K,ignoreCase:re}}function ug(){return{type:"any"}}function Ag(){return{type:"end"}}function fg(N){return{type:"other",description:N}}function hp(N){var K=wl[N],re;if(K)return K;for(re=N-1;!wl[re];)re--;for(K=wl[re],K={line:K.line,column:K.column};rexi&&(xi=G,wc=[]),wc.push(N))}function bm(N,K){return new Gg(N,null,null,K)}function pg(N,K,re){return new Gg(Gg.buildMessage(N,K),N,K,re)}function hg(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,K=n(re),N=K):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,K,re,pe,ze;if(N=G,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,K=u(K,pe,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe===r&&(pe=null),pe!==r?(Dt=N,K=A(K,pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Cu(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=p(re),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,K,re;return N=G,K=Aa(),K!==r?(re=Ew(),re===r&&(re=null),re!==r?(Dt=N,K=x(K,re),N=K):(G=N,N=r)):(G=N,N=r),N}function Ew(){var N,K,re,pe,ze,mt,fr;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=km(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=C(re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function km(){var N;return t.substr(G,2)===R?(N=R,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,K,re;return N=G,K=dg(),K!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,K=te(K,re),N=K):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,K,re,pe,ze,mt,fr;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Il(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ae(re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===fe?(N=fe,G+=2):(N=r,ct===0&&Ct(ce)),N===r&&(t.charCodeAt(G)===124?(N=me,G++):(N=r,ct===0&&Ct(he))),N}function Iu(){var N,K,re,pe,ze,mt;if(N=G,K=Cg(),K!==r)if(t.charCodeAt(G)===61?(re=Be,G++):(re=r,ct===0&&Ct(we)),re!==r)if(pe=jo(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,K=g(K,pe),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,K=Cg(),K!==r)if(t.charCodeAt(G)===61?(re=Be,G++):(re=r,ct===0&&Ct(we)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=Ee(K),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function dg(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(G)===40?(re=Se,G++):(re=r,ct===0&&Ct(le)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=qa();oi!==r;)yn.push(oi),oi=qa();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Ie(ze,yn),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(G)===123?(re=Fe,G++):(re=r,ct===0&&Ct(At)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(at)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=qa();oi!==r;)yn.push(oi),oi=qa();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Re(ze,yn),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],pe=Iu();pe!==r;)re.push(pe),pe=Iu();if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r){if(ze=[],mt=gp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=gp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ke(re,ze),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=Iu(),pe!==r)for(;pe!==r;)re.push(pe),pe=Iu();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=xe(re),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function NA(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=dp(),pe!==r)for(;pe!==r;)re.push(pe),pe=dp();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=He(re),N=K):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function gp(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=qa(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=dp(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r)}return N}function qa(){var N,K,re,pe,ze;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(qe)),re===r&&(re=null),re!==r?(pe=mg(),pe!==r?(ze=dp(),ze!==r?(Dt=N,K=b(re,pe,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function mg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(P)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Pe?(N=Pe,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function dp(){var N,K,re;for(N=G,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=jo(),re!==r?(Dt=N,K=Te(re),N=K):(G=N,N=r)):(G=N,N=r),N}function jo(){var N,K,re;if(N=G,K=[],re=ws(),re!==r)for(;re!==r;)K.push(re),re=ws();else K=r;return K!==r&&(Dt=N,K=jt(K)),N=K,N}function ws(){var N,K;return N=G,K=Ii(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Qm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Fm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=G,K=Go(),K!==r&&(Dt=N,K=$t(K)),N=K))),N}function Ii(){var N,K,re,pe;return N=G,t.substr(G,2)===bt?(K=bt,G+=2):(K=r,ct===0&&Ct(an)),K!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(pe=Qr,G++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,K,re,pe;return N=G,t.charCodeAt(G)===39?(K=Qr,G++):(K=r,ct===0&&Ct(mr)),K!==r?(re=yp(),re!==r?(t.charCodeAt(G)===39?(pe=Qr,G++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Fm(){var N,K,re,pe;if(N=G,t.substr(G,2)===Wr?(K=Wr,G+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Dt=N,K=Ns()),N=K,N===r)if(N=G,t.charCodeAt(G)===34?(K=Ti,G++):(K=r,ct===0&&Ct(ps)),K!==r){for(re=[],pe=LA();pe!==r;)re.push(pe),pe=LA();re!==r?(t.charCodeAt(G)===34?(pe=Ti,G++):(pe=r,ct===0&&Ct(ps)),pe!==r?(Dt=N,K=io(re),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,K,re;if(N=G,K=[],re=mp(),re!==r)for(;re!==r;)K.push(re),re=mp();else K=r;return K!==r&&(Dt=N,K=io(K)),N=K,N}function LA(){var N,K;return N=G,K=Gr(),K!==r&&(Dt=N,K=Pi(K)),N=K,N===r&&(N=G,K=Ep(),K!==r&&(Dt=N,K=Ls(K)),N=K,N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=so(K)),N=K,N===r&&(N=G,K=yg(),K!==r&&(Dt=N,K=cc(K)),N=K))),N}function mp(){var N,K;return N=G,K=Gr(),K!==r&&(Dt=N,K=cu(K)),N=K,N===r&&(N=G,K=Ep(),K!==r&&(Dt=N,K=lp(K)),N=K,N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=cp(K)),N=K,N===r&&(N=G,K=Cw(),K!==r&&(Dt=N,K=Os(K)),N=K,N===r&&(N=G,K=pa(),K!==r&&(Dt=N,K=cc(K)),N=K)))),N}function yp(){var N,K,re;for(N=G,K=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)K.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function yg(){var N,K,re;if(N=G,K=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function fa(){var N,K,re;return N=G,t.substr(G,2)===ao?(K=ao,G+=2):(K=r,ct===0&&Ct(Vn)),K!==r&&(Dt=N,K=On()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,K=Oe(re),N=K):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,K,re;for(N=G,K=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)K.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Ao(){var N,K,re;return N=G,t.substr(G,2)===ii?(K=ii,G+=2):(K=r,ct===0&&Ct(Ma)),K!==r&&(Dt=N,K=hr()),N=K,N===r&&(N=G,t.substr(G,2)===uc?(K=uc,G+=2):(K=r,ct===0&&Ct(uu)),K!==r&&(Dt=N,K=Ac()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(DA)),re!==r?(Dt=N,K=Au(),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(K=Ce,G+=2):(K=r,ct===0&&Ct(Rt)),K!==r&&(Dt=N,K=fc()),N=K,N===r&&(N=G,t.substr(G,2)===Hi?(K=Hi,G+=2):(K=r,ct===0&&Ct(fu)),K!==r&&(Dt=N,K=Yt()),N=K,N===r&&(N=G,t.substr(G,2)===Cl?(K=Cl,G+=2):(K=r,ct===0&&Ct(SA)),K!==r&&(Dt=N,K=up()),N=K,N===r&&(N=G,t.substr(G,2)===pc?(K=pc,G+=2):(K=r,ct===0&&Ct(PA)),K!==r&&(Dt=N,K=Qn()),N=K,N===r&&(N=G,t.substr(G,2)===hi?(K=hi,G+=2):(K=r,ct===0&&Ct(hc)),K!==r&&(Dt=N,K=bA()),N=K,N===r&&(N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,K=Oe(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=OA()))))))))),N}function OA(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi,Ig;return N=G,t.charCodeAt(G)===92?(K=Ni,G++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=ja(),re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(K=Ze,G+=2):(K=r,ct===0&&Ct(lo)),K!==r?(re=G,pe=G,ze=ja(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],pe=ze):(G=pe,pe=r)):(G=pe,pe=r),pe===r&&(pe=ja()),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(K=gc,G+=2):(K=r,ct===0&&Ct(pu)),K!==r?(re=G,pe=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],pe=ze):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===qi?(K=qi,G+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=G,pe=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Ig=si(),Ig!==r?(ze=[ze,mt,fr,Cr,yn,oi,Oi,Ig],pe=ze):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r)):(G=pe,pe=r),pe!==r?re=t.substring(re,G):re=pe,re!==r?(Dt=N,K=xA(re),N=K):(G=N,N=r)):(G=N,N=r)))),N}function ja(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,K,re,pe,ze;if(N=G,K=[],re=G,t.charCodeAt(G)===92?(pe=Ni,G++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(pe=Ci,G+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=G,pe=G,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=G,t.charCodeAt(G)===92?(pe=Ni,G++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(pe=Ci,G+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=G,pe=G,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function vc(){var N,K,re,pe,ze,mt;if(N=G,t.charCodeAt(G)===45?(K=Us,G++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(G)===43?(K=la,G++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(pe=wi,G++):(pe=r,ct===0&&Ct(gs)),pe!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(qe)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(qe));else ze=r;ze!==r?(Dt=N,K=ds(K,re,ze),N=K):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(K=Us,G++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(G)===43?(K=la,G++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(G))?(pe=t.charAt(G),G++):(pe=r,ct===0&&Ct(qe));else re=r;re!==r?(Dt=N,K=ms(K,re),N=K):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,K=Dc(),K!==r&&(Dt=N,K=_s(K)),N=K,N===r&&(N=G,K=Ga(),K!==r&&(Dt=N,K=Un(K)),N=K,N===r)))if(N=G,t.charCodeAt(G)===40?(K=Se,G++):(K=r,ct===0&&Ct(le)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,K=Sn(pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,K,re,pe,ze,mt,fr,Cr;if(N=G,K=vc(),K!==r){for(re=[],pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,K,re,pe,ze,mt,fr,Cr;if(N=G,K=Bl(),K!==r){for(re=[],pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(G=pe,pe=r)):(G=pe,pe=r)}else G=pe,pe=r;else G=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,K,re,pe,ze,mt;if(N=G,t.substr(G,3)===Le?(K=Le,G+=3):(K=r,ct===0&&Ct(pt)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===ht?(mt=ht,G+=2):(mt=r,ct===0&&Ct(Tt)),mt!==r?(Dt=N,K=er(pe),N=K):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function Ep(){var N,K,re,pe;return N=G,t.substr(G,2)===$r?(K=$r,G+=2):(K=r,ct===0&&Ct(ji)),K!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(pe=ne,G++):(pe=r,ct===0&&Ct(ee)),pe!==r?(Dt=N,K=es(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,K,re,pe,ze,mt;return N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,2)===kA?(pe=kA,G+=2):(pe=r,ct===0&&Ct(QA)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=Ap(re,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,3)===ig?(pe=ig,G+=3):(pe=r,ct===0&&Ct(gu)),pe!==r?(Dt=N,K=sg(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(pe=du,G+=2):(pe=r,ct===0&&Ct(uo)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=FA(re,ze),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(pe=mc,G+=3):(pe=r,ct===0&&Ct(ca)),pe!==r?(Dt=N,K=og(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===bi?(K=bi,G+=2):(K=r,ct===0&&Ct(qo)),K!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(pe=H,G++):(pe=r,ct===0&&Ct(at)),pe!==r?(Dt=N,K=yc(re),N=K):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(K=Pm,G++):(K=r,ct===0&&Ct(ag)),K!==r?(re=Ga(),re!==r?(Dt=N,K=yc(re),N=K):(G=N,N=r)):(G=N,N=r)))))),N}function Cw(){var N,K,re;return N=G,K=Eg(),K!==r?(Dt=G,re=$n(K),re?re=void 0:re=r,re!==r?(Dt=N,K=fp(K),N=K):(G=N,N=r)):(G=N,N=r),N}function Eg(){var N,K,re,pe,ze;if(N=G,K=[],re=G,pe=G,ct++,ze=wg(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)K.push(re),re=G,pe=G,ct++,ze=wg(),ct--,ze===r?pe=void 0:(G=pe,pe=r),pe!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(G=re,re=r)):(G=re,re=r);else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Cg(){var N,K,re;if(N=G,K=[],lg.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(RA)),re!==r)for(;re!==r;)K.push(re),lg.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(RA));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function Ga(){var N,K,re;if(N=G,K=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)K.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function Rm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function wg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,K;if(N=[],Ec.test(t.charAt(G))?(K=t.charAt(G),G++):(K=r,ct===0&&Ct(Cc)),K!==r)for(;K!==r;)N.push(K),Ec.test(t.charAt(G))?(K=t.charAt(G),G++):(K=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,$Y.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function cy(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${LD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function LD(t){return`${uy(t.chain)}${t.then?` ${oT(t.then)}`:""}`}function oT(t){return`${t.type} ${LD(t.line)}`}function uy(t){return`${lT(t)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${uy(t.chain)}`}function lT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>TD(e)).join(" ")} `:""}${t.args.map(e=>cT(e)).join(" ")}`;case"subshell":return`(${cy(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"group":return`{ ${cy(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>TD(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function TD(t){return`${t.name}=${t.args[0]?Yg(t.args[0]):""}`}function cT(t){switch(t.type){case"redirection":return Jw(t);case"argument":return Yg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Jw(t){return`${t.subtype} ${t.args.map(e=>Yg(e)).join(" ")}`}function Yg(t){return t.segments.map(e=>uT(e)).join("")}function uT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,f8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${cy(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Yg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Yg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,A8e,tW,f8e,rW=Et(()=>{$Y=$e(ZY());eW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),A8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,f8e=t=>A8e.get(t)??`"$'${tW(t)}'"`});var iW=_((Tbt,nW)=>{"use strict";function p8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Wg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Wg)}p8e(Wg,Error);Wg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ife&&(fe=J,ce=[]),ce.push(qe))}function at(qe,b){return new Wg(qe,null,null,b)}function Re(qe,b,w){return new Wg(Wg.buildMessage(qe,b),qe,b,w)}function ke(){var qe,b,w,P;return qe=J,b=xe(),b!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,me===0&&H(u)),w!==r?(P=xe(),P!==r?(te=qe,b=A(b,P),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=xe(),b!==r&&(te=qe,b=p(b)),qe=b),qe}function xe(){var qe,b,w,P;return qe=J,b=He(),b!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,me===0&&H(E)),w!==r?(P=Je(),P!==r?(te=qe,b=I(b,P),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=He(),b!==r&&(te=qe,b=v(b)),qe=b),qe}function He(){var qe,b,w,P,y;return qe=J,t.charCodeAt(J)===64?(b=h,J++):(b=r,me===0&&H(E)),b!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(P=n,J++):(P=r,me===0&&H(u)),P!==r?(y=Te(),y!==r?(te=qe,b=x(),qe=b):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r)):(J=qe,qe=r),qe===r&&(qe=J,b=Te(),b!==r&&(te=qe,b=x()),qe=b),qe}function Te(){var qe,b,w;if(qe=J,b=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R)),w!==r)for(;w!==r;)b.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}function Je(){var qe,b,w;if(qe=J,b=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U)),w!==r)for(;w!==r;)b.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U));else b=r;return b!==r&&(te=qe,b=x()),qe=b,qe}if(he=a(),he!==r&&J===t.length)return he;throw he!==r&&J{sW=$e(iW())});var Vg=_((Lbt,Kg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function g8e(t){return typeof t=="object"&&t!==null}function d8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function m8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function zw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}zw.prototype=Object.create(Error.prototype);zw.prototype.constructor=zw;zw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=zw});var AW=_((Mbt,uW)=>{"use strict";var cW=Vg();function AT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}AT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),cW.repeat(" ",e)+o+A+n+` +`+cW.repeat(" ",e+this.position-a+o.length)+"^"};AT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};uW.exports=AT});var os=_((Ubt,pW)=>{"use strict";var fW=Ay(),C8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],w8e=["scalar","sequence","mapping"];function I8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function B8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(C8e.indexOf(r)===-1)throw new fW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=I8e(e.styleAliases||null),w8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=B8e});var Jg=_((_bt,gW)=>{"use strict";var hW=Vg(),_D=Ay(),v8e=os();function fT(t,e,r){var o=[];return t.include.forEach(function(a){r=fT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function D8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var S8e=os();dW.exports=new S8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((qbt,yW)=>{"use strict";var P8e=os();yW.exports=new P8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((jbt,CW)=>{"use strict";var b8e=os();CW.exports=new b8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var HD=_((Gbt,IW)=>{"use strict";var x8e=Jg();IW.exports=new x8e({explicit:[mW(),EW(),wW()]})});var vW=_((Ybt,BW)=>{"use strict";var k8e=os();function Q8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function F8e(){return null}function R8e(t){return t===null}BW.exports=new k8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:Q8e,construct:F8e,predicate:R8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var SW=_((Wbt,DW)=>{"use strict";var T8e=os();function N8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function L8e(t){return t==="true"||t==="True"||t==="TRUE"}function O8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}DW.exports=new T8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:N8e,construct:L8e,predicate:O8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var bW=_((Kbt,PW)=>{"use strict";var M8e=Vg(),U8e=os();function _8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function H8e(t){return 48<=t&&t<=55}function q8e(t){return 48<=t&&t<=57}function j8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((Vbt,kW)=>{"use strict";var xW=Vg(),W8e=os(),K8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function V8e(t){return!(t===null||!K8e.test(t)||t[t.length-1]==="_")}function J8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var z8e=/^[-+]?[0-9]+e/;function X8e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(xW.isNegativeZero(t))return"-0.0";return r=t.toString(10),z8e.test(r)?r.replace("e",".e"):r}function Z8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||xW.isNegativeZero(t))}kW.exports=new W8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:V8e,construct:J8e,predicate:Z8e,represent:X8e,defaultStyle:"lowercase"})});var pT=_((Jbt,FW)=>{"use strict";var $8e=Jg();FW.exports=new $8e({include:[HD()],implicit:[vW(),SW(),bW(),QW()]})});var hT=_((zbt,RW)=>{"use strict";var eHe=Jg();RW.exports=new eHe({include:[pT()]})});var OW=_((Xbt,LW)=>{"use strict";var tHe=os(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),NW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function rHe(t){return t===null?!1:TW.exec(t)!==null||NW.exec(t)!==null}function nHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=TW.exec(t),e===null&&(e=NW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function iHe(t){return t.toISOString()}LW.exports=new tHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:rHe,construct:nHe,instanceOf:Date,represent:iHe})});var UW=_((Zbt,MW)=>{"use strict";var sHe=os();function oHe(t){return t==="<<"||t===null}MW.exports=new sHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:oHe})});var qW=_(($bt,HW)=>{"use strict";var zg;try{_W=ve,zg=_W("buffer").Buffer}catch{}var _W,aHe=os(),gT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function lHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=gT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function cHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=gT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),zg?zg.from?zg.from(A):new zg(A):A}function uHe(t){var e="",r=0,o,a,n=t.length,u=gT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function AHe(t){return zg&&zg.isBuffer(t)}HW.exports=new aHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:lHe,construct:cHe,predicate:AHe,represent:uHe})});var GW=_((txt,jW)=>{"use strict";var fHe=os(),pHe=Object.prototype.hasOwnProperty,hHe=Object.prototype.toString;function gHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var mHe=os(),yHe=Object.prototype.toString;function EHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var wHe=os(),IHe=Object.prototype.hasOwnProperty;function BHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(IHe.call(r,e)&&r[e]!==null)return!1;return!0}function vHe(t){return t!==null?t:{}}KW.exports=new wHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:BHe,construct:vHe})});var py=_((ixt,JW)=>{"use strict";var DHe=Jg();JW.exports=new DHe({include:[hT()],implicit:[OW(),UW()],explicit:[qW(),GW(),WW(),VW()]})});var XW=_((sxt,zW)=>{"use strict";var SHe=os();function PHe(){return!0}function bHe(){}function xHe(){return""}function kHe(t){return typeof t>"u"}zW.exports=new SHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:PHe,construct:bHe,predicate:kHe,represent:xHe})});var $W=_((oxt,ZW)=>{"use strict";var QHe=os();function FHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function RHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function THe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function NHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new QHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:FHe,construct:RHe,predicate:NHe,represent:THe})});var rK=_((axt,tK)=>{"use strict";var qD;try{eK=ve,qD=eK("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var eK,LHe=os();function OHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function MHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function UHe(t){return t.toString()}function _He(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new LHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:OHe,construct:MHe,predicate:_He,represent:UHe})});var Xw=_((cxt,iK)=>{"use strict";var nK=Jg();iK.exports=nK.DEFAULT=new nK({include:[py()],explicit:[XW(),$W(),rK()]})});var BK=_((uxt,Zw)=>{"use strict";var yf=Vg(),AK=Ay(),HHe=AW(),fK=py(),qHe=Xw(),Yp=Object.prototype.hasOwnProperty,jD=1,pK=2,hK=3,GD=4,dT=1,jHe=2,sK=3,GHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,YHe=/[\x85\u2028\u2029]/,WHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Zg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function hy(t){return t===44||t===91||t===93||t===123||t===125}function KHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function VHe(t){return t===120?2:t===117?4:t===85?8:0}function JHe(t){return 48<=t&&t<=57?t-48:-1}function aK(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function zHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(Xg=0;Xg<256;Xg++)mK[Xg]=aK(Xg)?1:0,yK[Xg]=aK(Xg);var Xg;function XHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||qHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function EK(t,e){return new AK(e,new HHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Pr(t,e){throw EK(t,e)}function YD(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Pr(e,"duplication of %YAML directive"),o.length!==1&&Pr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Pr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Pr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&YD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Pr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Pr(e,"ill-formed tag handle (first argument) of the TAG directive"),Yp.call(e.tagMap,a)&&Pr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Pr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function Gp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=yf.repeat(` +`,e-1))}function ZHe(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,x;if(x=t.input.charCodeAt(t.position),Ia(x)||hy(x)||x===35||x===38||x===42||x===33||x===124||x===62||x===39||x===34||x===37||x===64||x===96||(x===63||x===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;x!==0;){if(x===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a))break}else if(x===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&WD(t)||r&&hy(x))break;if(Hu(x))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,x=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(Gp(t,n,u,!1),yT(t,t.line-p),n=u=t.position,A=!1),Zg(x)||(u=t.position+1),x=t.input.charCodeAt(++t.position)}return Gp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function $He(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Gp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(Gp(t,o,a,!0),yT(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Pr(t,"unexpected end of the stream within a single quoted scalar")}function e6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return Gp(t,r,t.position,!0),t.position++,!0;if(A===92){if(Gp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=VHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=KHe(A))>=0?n=(n<<4)+u:Pr(t,"expected hexadecimal character");t.result+=zHe(n),t.position++}else Pr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(Gp(t,r,o,!0),yT(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Pr(t,"unexpected end of the stream within a double quoted scalar")}function t6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},x,C,R,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Pr(t,"missed comma between flow collection entries"),C=x=R=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,dy(t,e,jD,!1,!0),C=t.tag,x=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),dy(t,e,jD,!1,!0),R=t.result),I?gy(t,n,v,C,x,R):h?n.push(gy(t,null,v,C,x,R)):n.push(x),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Pr(t,"unexpected end of the stream within a flow collection")}function r6e(t,e){var r,o,a=dT,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)dT===a?a=I===43?sK:jHe:Pr(t,"repeat of a chomping mode identifier");else if((E=JHe(I))>=0)E===0?Pr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Pr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Zg(I)){do I=t.input.charCodeAt(++t.position);while(Zg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(mT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Pr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(dy(t,e,GD,!0,a)&&(C?v=t.result:x=t.result),C||(gy(t,h,E,I,v,x,n,u),I=v=x=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Pr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result)?(t.result=x.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Pr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Pr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function a6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Pr(t,"directive name must not be less than one character in length");u!==0;){for(;Zg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&mT(t),Yp.call(lK,o)?lK[o](t,o,a):YD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Pr(t,"directives end mark is expected"),dy(t,t.lineIndent-1,GD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&YHe.test(t.input.slice(e,t.position))&&YD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&WD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,yf.extend({schema:fK},r))}function c6e(t,e){return IK(t,yf.extend({schema:fK},e))}Zw.exports.loadAll=wK;Zw.exports.load=IK;Zw.exports.safeLoadAll=l6e;Zw.exports.safeLoad=c6e});var WK=_((Axt,IT)=>{"use strict";var eI=Vg(),tI=Ay(),u6e=Xw(),A6e=py(),QK=Object.prototype.toString,FK=Object.prototype.hasOwnProperty,f6e=9,$w=10,p6e=13,h6e=32,g6e=33,d6e=34,RK=35,m6e=37,y6e=38,E6e=39,C6e=42,TK=44,w6e=45,NK=58,I6e=61,B6e=62,v6e=63,D6e=64,LK=91,OK=93,S6e=96,MK=123,P6e=124,UK=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var b6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function x6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!my(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:qK:r>9&&_K(t)?KD:h?GK:jK}function N6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&b6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return Q6e(t,p)}switch(T6e(e,u,t.indent,n,A)){case HK:return e;case qK:return"'"+e.replace(/'/g,"''")+"'";case jK:return"|"+PK(e,t.indent)+bK(DK(e,a));case GK:return">"+PK(e,t.indent)+bK(DK(L6e(e,n),a));case KD:return'"'+O6e(e,n)+'"';default:throw new tI("impossible error: invalid scalar style")}}()}function PK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function bK(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function L6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,xK(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+xK(p,e),a=n}return o}function xK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function O6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&my(r)?t[n]:a||vK(r)}return e}function M6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$g(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function H6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new tI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&$w===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=ET(t,e)),$g(t,e+1,E,!0,I)&&(t.dump&&$w===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function $g(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(H6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(_6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(U6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(M6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new tI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function q6e(t,e){var r=[],o=[],a,n;for(CT(t,r,o),a=0,n=o.length;a{"use strict";var VD=BK(),KK=WK();function JD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Jg();ki.exports.FAILSAFE_SCHEMA=HD();ki.exports.JSON_SCHEMA=pT();ki.exports.CORE_SCHEMA=hT();ki.exports.DEFAULT_SAFE_SCHEMA=py();ki.exports.DEFAULT_FULL_SCHEMA=Xw();ki.exports.load=VD.load;ki.exports.loadAll=VD.loadAll;ki.exports.safeLoad=VD.safeLoad;ki.exports.safeLoadAll=VD.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=Ay();ki.exports.MINIMAL_SCHEMA=HD();ki.exports.SAFE_SCHEMA=py();ki.exports.DEFAULT_SCHEMA=Xw();ki.exports.scan=JD("scan");ki.exports.parse=JD("parse");ki.exports.compose=JD("compose");ki.exports.addConstructor=JD("addConstructor")});var zK=_((pxt,JK)=>{"use strict";var G6e=VK();JK.exports=G6e});var ZK=_((hxt,XK)=>{"use strict";function Y6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ed(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ed)}Y6e(ed,Error);ed.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[pt]:Le})))},fe=function($){return $},ce=function($){return $},me=sa("correct indentation"),he=" ",Be=Qn(" ",!1),we=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},Se=function(){return nr--,!0},le=function(){return SA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Fe=/^[^\r\n\t ,\][{}:#"']/,At=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return SA().replace(/^ *| *$/g,"")},at="--",Re=Qn("--",!1),ke=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),He=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",qe=Qn("null",!1),b=function(){return null},w="true",P=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Pe=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",br=Qn("\\\\",!1),Wr=function(){return"\\"},Kn="\\/",Ns=Qn("\\/",!1),Ti=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Pi=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",lp=Qn("\\n",!1),cp=function(){return` +`},Os="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Ms="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Vn=Qn("\\u",!1),On=function($,ye,Le,pt){return String.fromCharCode(parseInt(`0x${$}${ye}${Le}${pt}`))},Ni=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ma=/^[ \t\n\r]/,hr=hi([" "," ",` +`,"\r"],!1,!1),uc=`\r +`,uu=Qn(`\r +`,!1),Ac=` +`,El=Qn(` +`,!1),DA="\r",Au=Qn("\r",!1),Ce=0,Rt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function SA(){return t.substring(Rt,Ce)}function up(){return _o(Rt,Ce)}function pc($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),gc([sa($)],t.substring(Rt,Ce),ye)}function PA($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),lo($,ye)}function Qn($,ye){return{type:"literal",text:$,ignoreCase:ye}}function hi($,ye,Le){return{type:"class",parts:$,inverted:ye,ignoreCase:Le}}function hc(){return{type:"any"}}function bA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var ye=fc[$],Le;if(ye)return ye;for(Le=$-1;!fc[Le];)Le--;for(ye=fc[Le],ye={line:ye.line,column:ye.column};Le<$;)t.charCodeAt(Le)===10?(ye.line++,ye.column=1):ye.column++,Le++;return fc[$]=ye,ye}function _o($,ye){var Le=Li($),pt=Li(ye);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:ye,line:pt.line,column:pt.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,ye){return new ed($,null,null,ye)}function gc($,ye,Le){return new ed(ed.buildMessage($,ye),$,ye,Le)}function pu(){var $;return $=xA(),$}function qi(){var $,ye,Le;for($=Ce,ye=[],Le=hu();Le!==r;)ye.push(Le),Le=hu();return ye!==r&&(Rt=$,ye=n(ye)),$=ye,$}function hu(){var $,ye,Le,pt,ht;return $=Ce,ye=hs(),ye!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(pt=Sn(),pt!==r?(ht=dc(),ht!==r?(Rt=$,ye=p(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,ye,Le;for($=Ce,ye=[],Le=Ua();Le!==r;)ye.push(Le),Le=Ua();return ye!==r&&(Rt=$,ye=h(ye)),$=ye,$}function Ua(){var $,ye,Le,pt,ht,Tt,er,$r,ji;if($=Ce,ye=Sn(),ye===r&&(ye=null),ye!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(pt=E,Ce++):(pt=r,Yt===0&&Ze(I)),pt!==r){if(ht=[],Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r),Tt!==r)for(;Tt!==r;)ht.push(Tt),Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r);else ht=r;ht!==r?(pt=[pt,ht],Le=pt):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(pt=[],ht=We(),ht!==r)for(;ht!==r;)pt.push(ht),ht=We();else pt=r;pt!==r?(Rt=$,ye=x(),$=ye):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,ye=hs(),ye!==r?(Le=oa(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=hs(),ye!==r?(Le=co(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r)if(pt=Sn(),pt!==r)if(ht=aa(),ht!==r){if(Tt=[],er=We(),er!==r)for(;er!==r;)Tt.push(er),er=We();else Tt=r;Tt!==r?(Rt=$,ye=L(Le,ht),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r){if(pt=[],ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(ji=co(),ji!==r?(Rt=ht,Tt=te(Le,ji),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r),ht!==r)for(;ht!==r;)pt.push(ht),ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(ji=co(),ji!==r?(Rt=ht,Tt=te(Le,ji),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r);else pt=r;pt!==r?(ht=Sn(),ht===r&&(ht=null),ht!==r?(t.charCodeAt(Ce)===58?(Tt=C,Ce++):(Tt=r,Yt===0&&Ze(R)),Tt!==r?(er=Sn(),er===r&&(er=null),er!==r?($r=dc(),$r!==r?(Rt=$,ye=ae(Le,pt,$r),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,ye,Le,pt,ht,Tt,er;if($=Ce,ye=Ce,Yt++,Le=Ce,pt=tt(),pt!==r?(ht=_t(),ht!==r?(t.charCodeAt(Ce)===45?(Tt=u,Ce++):(Tt=r,Yt===0&&Ze(A)),Tt!==r?(er=Sn(),er!==r?(pt=[pt,ht,Tt,er],Le=pt):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=ye,ye=void 0):ye=r,ye!==r?(Le=We(),Le!==r?(pt=Fn(),pt!==r?(ht=qi(),ht!==r?(Tt=Ci(),Tt!==r?(Rt=$,ye=fe(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=tt(),ye!==r?(Le=Fn(),Le!==r?(pt=xA(),pt!==r?(ht=Ci(),ht!==r?(Rt=$,ye=fe(pt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,ye=Us(),ye!==r){if(Le=[],pt=We(),pt!==r)for(;pt!==r;)Le.push(pt),pt=We();else Le=r;Le!==r?(Rt=$,ye=ce(ye),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,ye,Le;for(Yt++,$=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=we(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(ye=r,Yt===0&&Ze(me)),$}function _t(){var $,ye,Le;for($=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=g(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Rt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Rt=Ce,$=Se(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,ye,Le;if($=ds(),$===r){if($=Ce,ye=[],Le=Ho(),Le!==r)for(;Le!==r;)ye.push(Le),Le=Ho();else ye=r;ye!==r&&(Rt=$,ye=le()),$=ye}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,ye,Le,pt,ht,Tt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Ie)),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ne)),$}function Ho(){var $,ye,Le,pt,ht;if($=Ce,t.substr(Ce,2)===at?(ye=at,Ce+=2):(ye=r,Yt===0&&Ze(Re)),ye===r&&(ye=null),ye!==r)if(ke.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(xe)),Le!==r){for(pt=[],He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));ht!==r;)pt.push(ht),He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));pt!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,ye;return $=Ce,t.substr(Ce,4)===Je?(ye=Je,Ce+=4):(ye=r,Yt===0&&Ze(qe)),ye!==r&&(Rt=$,ye=b()),$=ye,$}function gs(){var $,ye;return $=Ce,t.substr(Ce,4)===w?(ye=w,Ce+=4):(ye=r,Yt===0&&Ze(P)),ye!==r&&(Rt=$,ye=y()),$=ye,$===r&&($=Ce,t.substr(Ce,5)===F?(ye=F,Ce+=5):(ye=r,Yt===0&&Ze(z)),ye!==r&&(Rt=$,ye=X()),$=ye),$}function ds(){var $,ye,Le,pt;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Pe)),Le!==r?(Rt=$,ye=Ne(),$=ye):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(pt=ie,Ce++):(pt=r,Yt===0&&Ze(Pe)),pt!==r?(Rt=$,ye=ot(Le),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(ye=r,Yt===0&&Ze(Z)),$}function ms(){var $,ye,Le;if($=Ce,ye=[],Le=_s(),Le!==r)for(;Le!==r;)ye.push(Le),Le=_s();else ye=r;return ye!==r&&(Rt=$,ye=dt(ye)),$=ye,$}function _s(){var $,ye,Le,pt,ht,Tt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===bt?(ye=bt,Ce+=2):(ye=r,Yt===0&&Ze(an)),ye!==r&&(Rt=$,ye=Qr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===mr?(ye=mr,Ce+=2):(ye=r,Yt===0&&Ze(br)),ye!==r&&(Rt=$,ye=Wr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Kn?(ye=Kn,Ce+=2):(ye=r,Yt===0&&Ze(Ns)),ye!==r&&(Rt=$,ye=Ti()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ps?(ye=ps,Ce+=2):(ye=r,Yt===0&&Ze(io)),ye!==r&&(Rt=$,ye=Pi()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ls?(ye=Ls,Ce+=2):(ye=r,Yt===0&&Ze(so)),ye!==r&&(Rt=$,ye=cc()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===cu?(ye=cu,Ce+=2):(ye=r,Yt===0&&Ze(lp)),ye!==r&&(Rt=$,ye=cp()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Os?(ye=Os,Ce+=2):(ye=r,Yt===0&&Ze(Dn)),ye!==r&&(Rt=$,ye=oo()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ms?(ye=Ms,Ce+=2):(ye=r,Yt===0&&Ze(ml)),ye!==r&&(Rt=$,ye=yl()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ao?(ye=ao,Ce+=2):(ye=r,Yt===0&&Ze(Vn)),ye!==r?(Le=Un(),Le!==r?(pt=Un(),pt!==r?(ht=Un(),ht!==r?(Tt=Un(),Tt!==r?(Rt=$,ye=On(Le,pt,ht,Tt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(Mn)),$}function Sn(){var $,ye;if(Yt++,$=[],tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe)),ye!==r)for(;ye!==r;)$.push(ye),tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(_i)),$}function ys(){var $,ye;if(Yt++,$=[],Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr)),ye!==r)for(;ye!==r;)$.push(ye),Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ii)),$}function We(){var $,ye,Le,pt,ht,Tt;if($=Ce,ye=tt(),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=DA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rV(t[e])):!1}function BT(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${eV(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${BT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof zD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=$K.indexOf(p),I=$K.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!rV(o[p])).map((p,h)=>{let E=o[p],I=eV(p),v=BT(E,e+1,!0),x=h>0||r?n:"",C=I.length>1024?`? ${I} +${x}:`:`${I}:`,R=v.startsWith(` +`)?v:` ${v}`;return`${x}${C}${R}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=BT(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function V6e(t){return t.endsWith(` +`)||(t+=` +`),(0,tV.parse)(t)}function z6e(t){if(J6e.test(t))return V6e(t);let e=(0,XD.safeLoad)(t,{schema:XD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Ki(t){return z6e(t)}var XD,tV,K6e,$K,zD,J6e,nV=Et(()=>{XD=$e(zK()),tV=$e(ZK()),K6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],zD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=zD;J6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var rI={};Vt(rI,{parseResolution:()=>MD,parseShell:()=>ND,parseSyml:()=>Ki,stringifyArgument:()=>cT,stringifyArgumentSegment:()=>uT,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>lT,stringifyCommandChain:()=>uy,stringifyCommandChainThen:()=>aT,stringifyCommandLine:()=>LD,stringifyCommandLineThen:()=>oT,stringifyEnvSegment:()=>TD,stringifyRedirectArgument:()=>Jw,stringifyResolution:()=>UD,stringifyShell:()=>cy,stringifyShellLine:()=>cy,stringifySyml:()=>Ba,stringifyValueArgument:()=>Yg});var Nl=Et(()=>{rW();oW();nV()});var sV=_((Ext,vT)=>{"use strict";var X6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=X6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};vT.exports=iV;vT.exports.default=iV});var oV=_((Cxt,Z6e)=>{Z6e.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var td=_(Xa=>{"use strict";var lV=oV(),qu=process.env;Object.defineProperty(Xa,"_vendors",{value:lV.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;lV.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return aV(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!qu[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in qu&&qu[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!qu[o]}):Xa.isPR=aV(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(qu.CI||qu.CONTINUOUS_INTEGRATION||qu.BUILD_NUMBER||qu.RUN_ID||Xa.name);function aV(t){return typeof t=="string"?!!qu[t]:Object.keys(t).every(function(e){return qu[e]===t[e]})}});var Hn,cn,rd,DT,ZD,cV,ST,PT,$D=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));rd=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,ZD=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cV=/^-[a-zA-Z]{2,}$/,ST=/^([^=]+)=([\s\S]*)$/,PT=process.env.DEBUG_CLI==="1"});var it,yy,eS,bT,tS=Et(()=>{$D();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},yy=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${bT(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${bT(e)}`}},eS=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${bT(e)}`}},bT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function $6e(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=$6e(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var xT,uV,AV,kT=Et(()=>{xT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)xT[xT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uV={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${xT.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},AV={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ko(t){return{...t,[nI]:!0}}function ju(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function rS(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function iI(t,e){return e.length===1?new it(`${t}${rS(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${rS(r)}`).join("")}`)}function nd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw iI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var nI,Ef=Et(()=>{tS();nI=Symbol("clipanion/isOption")});var Vo={};Vt(Vo,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Kp,applyCascade:()=>aI,as:()=>yqe,assert:()=>gqe,assertWithErrors:()=>dqe,cascade:()=>oS,fn:()=>Eqe,hasAtLeastOneKey:()=>OT,hasExactLength:()=>dV,hasForbiddenKeys:()=>Mqe,hasKeyRelationship:()=>cI,hasMaxLength:()=>wqe,hasMinLength:()=>Cqe,hasMutuallyExclusiveKeys:()=>Uqe,hasRequiredKeys:()=>Oqe,hasUniqueItems:()=>Iqe,isArray:()=>nS,isAtLeast:()=>NT,isAtMost:()=>Dqe,isBase64:()=>Rqe,isBoolean:()=>aqe,isDate:()=>cqe,isDict:()=>fqe,isEnum:()=>Ks,isHexColor:()=>Fqe,isISO8601:()=>Qqe,isInExclusiveRange:()=>Pqe,isInInclusiveRange:()=>Sqe,isInstanceOf:()=>hqe,isInteger:()=>LT,isJSON:()=>Tqe,isLiteral:()=>pV,isLowerCase:()=>bqe,isMap:()=>Aqe,isNegative:()=>Bqe,isNullable:()=>Lqe,isNumber:()=>RT,isObject:()=>hV,isOneOf:()=>TT,isOptional:()=>Nqe,isPartial:()=>pqe,isPayload:()=>lqe,isPositive:()=>vqe,isRecord:()=>sS,isSet:()=>uqe,isString:()=>Cy,isTuple:()=>iS,isUUID4:()=>kqe,isUnknown:()=>FT,isUpperCase:()=>xqe,makeTrait:()=>gV,makeValidator:()=>Hr,matchesRegExp:()=>oI,softAssert:()=>mqe});function qn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function Ey(t,e){if(t.length===0)return"nothing";if(t.length===1)return qn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>qn(n)).join(", ")}${a}${qn(o)}`}function Wp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:eqe.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function QT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function sqe(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function sI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pV(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${qn(t)} (got ${qn(e)})`):!0})}function Cy(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${qn(t)})`):!0})}function Ks(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pV([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${Ey(e,"or")} (got ${qn(a)})`):pr(n,`Expected a valid enumeration value (got ${qn(a)})`)})}function aqe(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=oqe.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${qn(t)})`)}return!0}})}function RT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${qn(t)})`)}return!0}})}function lqe(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${qn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${qn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function cqe(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fV.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${qn(t)})`)}return!0}})}function nS(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${qn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",sI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",sI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${qn(o)})`)}})}function Aqe(t,e){let r=nS(iS([t,e])),o=sS(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",sI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Wp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",sI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",sI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${qn(a)})`)}})}function iS(t,{delimiter:e}={}){let r=dV(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${qn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${qn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${qn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Wp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),`Extraneous property (got ${qn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:sqe(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function pqe(t){return hV(t,{extra:sS(FT())})}function gV(t){return()=>t}function Hr({test:t}){return gV(t)()}function gqe(t,e){if(!e(t))throw new Kp}function dqe(t,e){let r=[];if(!e(t,{errors:r}))throw new Kp({errors:r})}function mqe(t,e){}function yqe(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Eqe(t,e){let r=iS(t);return(...o)=>{if(!r(o))throw new Kp;return e(...o)}}function Cqe(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function wqe(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dV(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Iqe({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function vqe(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function NT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function Dqe(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Sqe(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Pqe(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function oI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${qn(e)})`)})}function bqe(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function xqe(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function kqe(){return Hr({test:(t,e)=>iqe.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${qn(t)})`)})}function Qqe(){return Hr({test:(t,e)=>fV.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${qn(t)})`)})}function Fqe({alpha:t=!1}){return Hr({test:(e,r)=>(t?tqe.test(e):rqe.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${qn(e)})`)})}function Rqe(){return Hr({test:(t,e)=>nqe.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${qn(t)})`)})}function Tqe(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${qn(e)})`)}return t(o,r)}})}function oS(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function aI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return oS(t,r)}function Nqe(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Lqe(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function Oqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function OT(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${Ey(Array.from(o),"or")}`)})}function Mqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function Uqe(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${Ey(p,"and")}`):!0}})}function cI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=lI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=_qe[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let x=new Set(Object.keys(I));if(!A(x,t,I)||u.has(I[t]))return!0;let C=[];for(let R of p)(A(x,R,I)&&!u.has(I[R]))!==h.expect&&C.push(R);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${QT(C.length,"property","properties")} ${Ey(C,E)}`):!0}})}var eqe,tqe,rqe,nqe,iqe,fV,oqe,hqe,TT,Kp,lI,Gu,_qe,Za=Et(()=>{eqe=/^[a-zA-Z_][a-zA-Z0-9_]*$/;tqe=/^#[0-9a-f]{6}$/i,rqe=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,nqe=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,iqe=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fV=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;oqe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);hqe=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${qn(e)})`)}),TT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Kp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};lI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));_qe={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{Ef();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Vo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw iI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=nI;nt.Default=[]});function va(t){PT&&console.log(t)}function yV(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function jqe(t,{prefix:e=""}={}){if(PT){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new yy(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Wqe(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Yqe(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Gqe(t,[...e,r]);return Kqe(e,o.map(({state:a})=>a))}function Wqe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Kqe(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===rd||v.requiredOptions.every(x=>x.some(C=>v.options.find(R=>R.name===C))));if(a.length===0)throw new yy(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:x})=>!x).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Vqe(E);if(I.length>1)throw new eS(t,I.map(v=>v.candidateUsage));return I[0]}function Vqe(t){let e=[],r=[];for(let o of t)o.selectedIndex===rd?r.push(o):e.push(o);return r.length>0&&e.push({...mV,path:EV(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function EV(t,e,...r){return e===void 0?Array.from(t):EV(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function CV(t){return t===cn.SuccessNode||t===cn.ErrorNode}function MT(t,e=0){return{to:CV(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function Jqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,MT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(MT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>MT(n,e));return r}function Ps(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function wy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function aS(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var mV,zqe,UT,el,_T,Iy,lS=Et(()=>{$D();tS();mV={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:rd,partial:!1,tokens:[]};zqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cV.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(ST);return!t.ignoreOptions&&!!n&&ZD.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&ZD.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!ZD.test(e)},UT={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(ST),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),_T=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yV(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Oc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Oc(e,$a());wy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Oc(e,$a());Ps(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ps(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",rd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,x,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,x,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ps(e,h,"isNotOptionLike",x,"pushPositional"),h=x}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Oc(e,$a());if(wy(e,h,v),this.arity.extra===el){let x=Oc(e,$a());this.arity.proxy||this.registerOptions(e,x),Ps(e,h,n,x,"pushExtraNoLimits"),Ps(e,x,n,x,"pushExtraNoLimits"),wy(e,x,v)}else for(let x=0;x0)&&this.registerOptions(e,C),Ps(e,E,n,C,"pushExtra"),wy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Yqe(o,a,{endToken:u})}}}}});function IV(){return cS.default&&"getColorDepth"in cS.default.WriteStream.prototype?cS.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function BV(t){let e=wV;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=wV=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var cS,wV,vV=Et(()=>{cS=$e(ve("tty"),1)});var By,DV=Et(()=>{Vp();By=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new By(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}}});async function bV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).runExit(o,a)}async function xV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).run(o,a)}function kV(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function PV(t){return t()}var SV,as,QV=Et(()=>{$D();lS();kT();vV();Vp();DV();SV=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Iy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case rd:{let E=By.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[x,{transformer:C}]of I.specs.entries())v[x]=C(I.builder,x,p,h);return v}catch(x){throw x[SV]=v,x}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=BV(u))!==null&&a!==void 0?a:PV,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(x=>x.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,x=>x.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} +`,v.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let x=v.reduce((C,R)=>Math.max(C,R.definition.length),0);A+=` +`;for(let{definition:C,description:R}of v)A+=` ${this.format(r).bold(C.padEnd(x))} ${Do(R,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[x,C]of E)A+=` +`,A+=Do(x,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[v,{index:x}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,R=p.get(C);typeof R>"u"&&p.set(C,R=[]);let{usage:L}=this.getUsageByIndex(x);R.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,x)=>v===null?-1:x===null?1:v.localeCompare(x,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let v of h){let x=p.get(v).slice().sort((R,L)=>R.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:R,usage:L}of x){let U=R.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(L)} +`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[SV])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?uV:AV}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:IV()}});var uI,FV=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};uI.paths=[["--clipanion=definitions"]]});var AI,RV=Et(()=>{Vp();AI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};AI.paths=[["-h"],["--help"]]});function uS(t={}){return Ko({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var HT=Et(()=>{Ef()});var fI,TV=Et(()=>{Vp();HT();fI=class extends nt{constructor(){super(...arguments),this.args=uS()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};fI.paths=[["--clipanion=tokens"]]});var pI,NV=Et(()=>{Vp();pI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};pI.paths=[["-v"],["--version"]]});var qT={};Vt(qT,{DefinitionsCommand:()=>uI,HelpCommand:()=>AI,TokensCommand:()=>fI,VersionCommand:()=>pI});var LV=Et(()=>{FV();RV();TV();NV()});function OV(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:x,value:C}of E.options)!A.has(x)||(I=x,v=v??[],v.push(C));return typeof v<"u"?nd(I??h,v,a.validator):v}})}var MV=Et(()=>{Ef()});function UV(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var _V=Et(()=>{Ef()});function HV(t,e,r){let[o,a]=ju(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var qV=Et(()=>{Ef()});function jV(t={}){return Ko({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var GV=Et(()=>{lS();Ef()});function Xqe(t,e,r){let[o,a]=ju(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,x=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,x=I.env[a.env]);for(let{name:C,value:R}of E.options)!A.has(C)||(v=C,x=R);return typeof x=="string"?nd(v??h,x,a.validator):x}})}function Zqe(t={}){let{required:e=!0}=t;return Ko({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{lS();Ef()});var ge={};Vt(ge,{Array:()=>OV,Boolean:()=>UV,Counter:()=>HV,Proxy:()=>uS,Rest:()=>jV,String:()=>YV,applyValidator:()=>nd,cleanValidationError:()=>rS,formatError:()=>iI,isOptionSymbol:()=>nI,makeCommandOption:()=>Ko,rerouteArguments:()=>ju});var KV=Et(()=>{Ef();HT();MV();_V();qV();GV();WV()});var hI={};Vt(hI,{Builtins:()=>qT,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>xV,runExit:()=>bV});var qt=Et(()=>{tS();kT();Vp();QV();LV();KV()});var VV=_((Pkt,$qe)=>{$qe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var ZV=_((bkt,Cf)=>{var JV=ve("fs"),GT=ve("path"),eje=ve("os"),tje=ve("crypto"),rje=VV(),YT=rje.version,nje=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function ije(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=nje.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function sje(t){let e=XV(t),r=bs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=zV(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return bs.parse(n)}function oje(t){console.log(`[dotenv@${YT}][INFO] ${t}`)}function aje(t){console.log(`[dotenv@${YT}][WARN] ${t}`)}function jT(t){console.log(`[dotenv@${YT}][DEBUG] ${t}`)}function zV(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function lje(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function XV(t){let e=GT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function cje(t){return t[0]==="~"?GT.join(eje.homedir(),t.slice(1)):t}function uje(t){oje("Loading env from encrypted .env.vault");let e=bs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),bs.populate(r,e,t),{parsed:e}}function Aje(t){let e=GT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=cje(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=bs.parse(JV.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),bs.populate(n,a,t),{parsed:a}}catch(a){return o&&jT(`Failed to load ${e} ${a.message}`),{error:a}}}function fje(t){let e=XV(t);return zV(t).length===0?bs.configDotenv(t):JV.existsSync(e)?bs._configVault(t):(aje(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),bs.configDotenv(t))}function pje(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=tje.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function hje(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&jT(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var bs={configDotenv:Aje,_configVault:uje,_parseVault:sje,config:fje,decrypt:pje,parse:ije,populate:hje};Cf.exports.configDotenv=bs.configDotenv;Cf.exports._configVault=bs._configVault;Cf.exports._parseVault=bs._parseVault;Cf.exports.config=bs.config;Cf.exports.decrypt=bs.decrypt;Cf.exports.parse=bs.parse;Cf.exports.populate=bs.populate;Cf.exports=bs});var eJ=_((xkt,$V)=>{"use strict";$V.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var id=_((kkt,WT)=>{"use strict";var gje=eJ(),tJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=gje(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};WT.exports=tJ;WT.exports.default=tJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function AS(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,fS=Et(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var gI=_((Fkt,rJ)=>{var dje="2.0.0",mje=Number.MAX_SAFE_INTEGER||9007199254740991,yje=16,Eje=256-6,Cje=["major","premajor","minor","preminor","patch","prepatch","prerelease"];rJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:yje,MAX_SAFE_BUILD_LENGTH:Eje,MAX_SAFE_INTEGER:mje,RELEASE_TYPES:Cje,SEMVER_SPEC_VERSION:dje,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var dI=_((Rkt,nJ)=>{var wje=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};nJ.exports=wje});var vy=_((wf,iJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:KT,MAX_SAFE_BUILD_LENGTH:Ije,MAX_LENGTH:Bje}=gI(),vje=dI();wf=iJ.exports={};var Dje=wf.re=[],Sje=wf.safeRe=[],lr=wf.src=[],cr=wf.t={},Pje=0,VT="[a-zA-Z0-9-]",bje=[["\\s",1],["\\d",Bje],[VT,Ije]],xje=t=>{for(let[e,r]of bje)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=xje(e),a=Pje++;vje(t,a,e),cr[t]=a,lr[a]=e,Dje[a]=new RegExp(e,r?"g":void 0),Sje[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${VT}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${VT}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${KT}})(?:\\.(\\d{1,${KT}}))?(?:\\.(\\d{1,${KT}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);wf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);wf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);wf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var pS=_((Tkt,sJ)=>{var kje=Object.freeze({loose:!0}),Qje=Object.freeze({}),Fje=t=>t?typeof t!="object"?kje:t:Qje;sJ.exports=Fje});var JT=_((Nkt,lJ)=>{var oJ=/^[0-9]+$/,aJ=(t,e)=>{let r=oJ.test(t),o=oJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:taJ(e,t);lJ.exports={compareIdentifiers:aJ,rcompareIdentifiers:Rje}});var So=_((Lkt,fJ)=>{var hS=dI(),{MAX_LENGTH:cJ,MAX_SAFE_INTEGER:gS}=gI(),{safeRe:uJ,t:AJ}=vy(),Tje=pS(),{compareIdentifiers:Dy}=JT(),tl=class{constructor(e,r){if(r=Tje(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>cJ)throw new TypeError(`version is longer than ${cJ} characters`);hS("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?uJ[AJ.LOOSE]:uJ[AJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>gS||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gS||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gS||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),Dy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};fJ.exports=tl});var sd=_((Okt,hJ)=>{var pJ=So(),Nje=(t,e,r=!1)=>{if(t instanceof pJ)return t;try{return new pJ(t,e)}catch(o){if(!r)return null;throw o}};hJ.exports=Nje});var dJ=_((Mkt,gJ)=>{var Lje=sd(),Oje=(t,e)=>{let r=Lje(t,e);return r?r.version:null};gJ.exports=Oje});var yJ=_((Ukt,mJ)=>{var Mje=sd(),Uje=(t,e)=>{let r=Mje(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};mJ.exports=Uje});var wJ=_((_kt,CJ)=>{var EJ=So(),_je=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new EJ(t instanceof EJ?t.version:t,r).inc(e,o,a).version}catch{return null}};CJ.exports=_je});var vJ=_((Hkt,BJ)=>{var IJ=sd(),Hje=(t,e)=>{let r=IJ(t,null,!0),o=IJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};BJ.exports=Hje});var SJ=_((qkt,DJ)=>{var qje=So(),jje=(t,e)=>new qje(t,e).major;DJ.exports=jje});var bJ=_((jkt,PJ)=>{var Gje=So(),Yje=(t,e)=>new Gje(t,e).minor;PJ.exports=Yje});var kJ=_((Gkt,xJ)=>{var Wje=So(),Kje=(t,e)=>new Wje(t,e).patch;xJ.exports=Kje});var FJ=_((Ykt,QJ)=>{var Vje=sd(),Jje=(t,e)=>{let r=Vje(t,e);return r&&r.prerelease.length?r.prerelease:null};QJ.exports=Jje});var Ll=_((Wkt,TJ)=>{var RJ=So(),zje=(t,e,r)=>new RJ(t,r).compare(new RJ(e,r));TJ.exports=zje});var LJ=_((Kkt,NJ)=>{var Xje=Ll(),Zje=(t,e,r)=>Xje(e,t,r);NJ.exports=Zje});var MJ=_((Vkt,OJ)=>{var $je=Ll(),eGe=(t,e)=>$je(t,e,!0);OJ.exports=eGe});var dS=_((Jkt,_J)=>{var UJ=So(),tGe=(t,e,r)=>{let o=new UJ(t,r),a=new UJ(e,r);return o.compare(a)||o.compareBuild(a)};_J.exports=tGe});var qJ=_((zkt,HJ)=>{var rGe=dS(),nGe=(t,e)=>t.sort((r,o)=>rGe(r,o,e));HJ.exports=nGe});var GJ=_((Xkt,jJ)=>{var iGe=dS(),sGe=(t,e)=>t.sort((r,o)=>iGe(o,r,e));jJ.exports=sGe});var mI=_((Zkt,YJ)=>{var oGe=Ll(),aGe=(t,e,r)=>oGe(t,e,r)>0;YJ.exports=aGe});var mS=_(($kt,WJ)=>{var lGe=Ll(),cGe=(t,e,r)=>lGe(t,e,r)<0;WJ.exports=cGe});var zT=_((eQt,KJ)=>{var uGe=Ll(),AGe=(t,e,r)=>uGe(t,e,r)===0;KJ.exports=AGe});var XT=_((tQt,VJ)=>{var fGe=Ll(),pGe=(t,e,r)=>fGe(t,e,r)!==0;VJ.exports=pGe});var yS=_((rQt,JJ)=>{var hGe=Ll(),gGe=(t,e,r)=>hGe(t,e,r)>=0;JJ.exports=gGe});var ES=_((nQt,zJ)=>{var dGe=Ll(),mGe=(t,e,r)=>dGe(t,e,r)<=0;zJ.exports=mGe});var ZT=_((iQt,XJ)=>{var yGe=zT(),EGe=XT(),CGe=mI(),wGe=yS(),IGe=mS(),BGe=ES(),vGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return yGe(t,r,o);case"!=":return EGe(t,r,o);case">":return CGe(t,r,o);case">=":return wGe(t,r,o);case"<":return IGe(t,r,o);case"<=":return BGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};XJ.exports=vGe});var $J=_((sQt,ZJ)=>{var DGe=So(),SGe=sd(),{safeRe:CS,t:wS}=vy(),PGe=(t,e)=>{if(t instanceof DGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(CS[wS.COERCE]);else{let o;for(;(o=CS[wS.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),CS[wS.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;CS[wS.COERCERTL].lastIndex=-1}return r===null?null:SGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ZJ.exports=PGe});var tz=_((oQt,ez)=>{"use strict";ez.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var IS=_((aQt,rz)=>{"use strict";rz.exports=Cn;Cn.Node=od;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var QGe=IS(),ad=Symbol("max"),Bf=Symbol("length"),Sy=Symbol("lengthCalculator"),EI=Symbol("allowStale"),ld=Symbol("maxAge"),If=Symbol("dispose"),nz=Symbol("noDisposeOnSet"),xs=Symbol("lruList"),Mc=Symbol("cache"),sz=Symbol("updateAgeOnGet"),$T=()=>1,tN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[ad]=e.max||1/0,o=e.length||$T;if(this[Sy]=typeof o!="function"?$T:o,this[EI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ld]=e.maxAge||0,this[If]=e.dispose,this[nz]=e.noDisposeOnSet||!1,this[sz]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[ad]=e||1/0,yI(this)}get max(){return this[ad]}set allowStale(e){this[EI]=!!e}get allowStale(){return this[EI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ld]=e,yI(this)}get maxAge(){return this[ld]}set lengthCalculator(e){typeof e!="function"&&(e=$T),e!==this[Sy]&&(this[Sy]=e,this[Bf]=0,this[xs].forEach(r=>{r.length=this[Sy](r.value,r.key),this[Bf]+=r.length})),yI(this)}get lengthCalculator(){return this[Sy]}get length(){return this[Bf]}get itemCount(){return this[xs].length}rforEach(e,r){r=r||this;for(let o=this[xs].tail;o!==null;){let a=o.prev;iz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[xs].head;o!==null;){let a=o.next;iz(this,e,o,r),o=a}}keys(){return this[xs].toArray().map(e=>e.key)}values(){return this[xs].toArray().map(e=>e.value)}reset(){this[If]&&this[xs]&&this[xs].length&&this[xs].forEach(e=>this[If](e.key,e.value)),this[Mc]=new Map,this[xs]=new QGe,this[Bf]=0}dump(){return this[xs].map(e=>BS(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[xs]}set(e,r,o){if(o=o||this[ld],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Sy](r,e);if(this[Mc].has(e)){if(n>this[ad])return Py(this,this[Mc].get(e)),!1;let p=this[Mc].get(e).value;return this[If]&&(this[nz]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[Bf]+=n-p.length,p.length=n,this.get(e),yI(this),!0}let u=new rN(e,r,n,a,o);return u.length>this[ad]?(this[If]&&this[If](e,r),!1):(this[Bf]+=u.length,this[xs].unshift(u),this[Mc].set(e,this[xs].head),yI(this),!0)}has(e){if(!this[Mc].has(e))return!1;let r=this[Mc].get(e).value;return!BS(this,r)}get(e){return eN(this,e,!0)}peek(e){return eN(this,e,!1)}pop(){let e=this[xs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Mc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Mc].forEach((e,r)=>eN(this,r,!1))}},eN=(t,e,r)=>{let o=t[Mc].get(e);if(o){let a=o.value;if(BS(t,a)){if(Py(t,o),!t[EI])return}else r&&(t[sz]&&(o.value.now=Date.now()),t[xs].unshiftNode(o));return a.value}},BS=(t,e)=>{if(!e||!e.maxAge&&!t[ld])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ld]&&r>t[ld]},yI=t=>{if(t[Bf]>t[ad])for(let e=t[xs].tail;t[Bf]>t[ad]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[Bf]-=r.length,t[Mc].delete(r.key),t[xs].removeNode(e)}},rN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},iz=(t,e,r,o)=>{let a=r.value;BS(t,a)&&(Py(t,r),t[EI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};oz.exports=tN});var Ol=_((cQt,Az)=>{var cd=class{constructor(e,r){if(r=RGe(r),e instanceof cd)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new cd(e.raw,r);if(e instanceof nN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!cz(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&_Ge(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&MGe)|(this.options.loose&&UGe))+":"+e,a=lz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,zGe(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],NGe),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],LGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],OGe),ci("caret trim",e);let A=e.split(" ").map(I=>HGe(I,this.options)).join(" ").split(/\s+/).map(I=>JGe(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new nN(I,this.options));for(let I of h){if(cz(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return lz.set(o,E),E}intersects(e,r){if(!(e instanceof cd))throw new TypeError("a Range is required");return this.set.some(o=>uz(o,r)&&e.set.some(a=>uz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new TGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",_Ge=t=>t.value==="",uz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},HGe=(t,e)=>(ci("comp",t,e),t=GGe(t,e),ci("caret",t),t=qGe(t,e),ci("tildes",t),t=WGe(t,e),ci("xrange",t),t=VGe(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",qGe=(t,e)=>t.trim().split(/\s+/).map(r=>jGe(r,e)).join(" "),jGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},GGe=(t,e)=>t.trim().split(/\s+/).map(r=>YGe(r,e)).join(" "),YGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},WGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>KGe(r,e)).join(" ")),KGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},VGe=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),JGe=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),zGe=t=>(e,r,o,a,n,u,A,p,h,E,I,v,x)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),XGe=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var CI=_((uQt,mz)=>{var wI=Symbol("SemVer ANY"),by=class{static get ANY(){return wI}constructor(e,r){if(r=fz(r),e instanceof by){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),sN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===wI?this.value="":this.value=this.operator+this.semver.version,sN("comp",this)}parse(e){let r=this.options.loose?pz[hz.COMPARATORLOOSE]:pz[hz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new gz(o[2],this.options.loose):this.semver=wI}toString(){return this.value}test(e){if(sN("Comparator.test",e,this.options.loose),this.semver===wI||e===wI)return!0;if(typeof e=="string")try{e=new gz(e,this.options)}catch{return!1}return iN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof by))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new dz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new dz(this.value,r).test(e.semver):(r=fz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||iN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||iN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};mz.exports=by;var fz=pS(),{safeRe:pz,t:hz}=vy(),iN=ZT(),sN=dI(),gz=So(),dz=Ol()});var II=_((AQt,yz)=>{var ZGe=Ol(),$Ge=(t,e,r)=>{try{e=new ZGe(e,r)}catch{return!1}return e.test(t)};yz.exports=$Ge});var Cz=_((fQt,Ez)=>{var e5e=Ol(),t5e=(t,e)=>new e5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));Ez.exports=t5e});var Iz=_((pQt,wz)=>{var r5e=So(),n5e=Ol(),i5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new n5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new r5e(o,r))}),o};wz.exports=i5e});var vz=_((hQt,Bz)=>{var s5e=So(),o5e=Ol(),a5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new o5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new s5e(o,r))}),o};Bz.exports=a5e});var Pz=_((gQt,Sz)=>{var oN=So(),l5e=Ol(),Dz=mI(),c5e=(t,e)=>{t=new l5e(t,e);let r=new oN("0.0.0");if(t.test(r)||(r=new oN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new oN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Dz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Dz(r,n))&&(r=n)}return r&&t.test(r)?r:null};Sz.exports=c5e});var xz=_((dQt,bz)=>{var u5e=Ol(),A5e=(t,e)=>{try{return new u5e(t,e).range||"*"}catch{return null}};bz.exports=A5e});var vS=_((mQt,Rz)=>{var f5e=So(),Fz=CI(),{ANY:p5e}=Fz,h5e=Ol(),g5e=II(),kz=mI(),Qz=mS(),d5e=ES(),m5e=yS(),y5e=(t,e,r,o)=>{t=new f5e(t,o),e=new h5e(e,o);let a,n,u,A,p;switch(r){case">":a=kz,n=d5e,u=Qz,A=">",p=">=";break;case"<":a=Qz,n=m5e,u=kz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(g5e(t,e,o))return!1;for(let h=0;h{x.semver===p5e&&(x=new Fz(">=0.0.0")),I=I||x,v=v||x,a(x.semver,I.semver,o)?I=x:u(x.semver,v.semver,o)&&(v=x)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Rz.exports=y5e});var Nz=_((yQt,Tz)=>{var E5e=vS(),C5e=(t,e,r)=>E5e(t,e,">",r);Tz.exports=C5e});var Oz=_((EQt,Lz)=>{var w5e=vS(),I5e=(t,e,r)=>w5e(t,e,"<",r);Lz.exports=I5e});var _z=_((CQt,Uz)=>{var Mz=Ol(),B5e=(t,e,r)=>(t=new Mz(t,r),e=new Mz(e,r),t.intersects(e,r));Uz.exports=B5e});var qz=_((wQt,Hz)=>{var v5e=II(),D5e=Ll();Hz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>D5e(E,I,r));for(let E of u)v5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var jz=Ol(),lN=CI(),{ANY:aN}=lN,BI=II(),cN=Ll(),S5e=(t,e,r={})=>{if(t===e)return!0;t=new jz(t,r),e=new jz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=b5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},P5e=[new lN(">=0.0.0-0")],Gz=[new lN(">=0.0.0")],b5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===aN){if(e.length===1&&e[0].semver===aN)return!0;r.includePrerelease?t=P5e:t=Gz}if(e.length===1&&e[0].semver===aN){if(r.includePrerelease)return!0;e=Gz}let o=new Set,a,n;for(let x of t)x.operator===">"||x.operator===">="?a=Yz(a,x,r):x.operator==="<"||x.operator==="<="?n=Wz(n,x,r):o.add(x.semver);if(o.size>1)return null;let u;if(a&&n){if(u=cN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let x of o){if(a&&!BI(x,String(a),r)||n&&!BI(x,String(n),r))return null;for(let C of e)if(!BI(x,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let x of e){if(E=E||x.operator===">"||x.operator===">=",h=h||x.operator==="<"||x.operator==="<=",a){if(v&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===v.major&&x.semver.minor===v.minor&&x.semver.patch===v.patch&&(v=!1),x.operator===">"||x.operator===">="){if(A=Yz(a,x,r),A===x&&A!==a)return!1}else if(a.operator===">="&&!BI(a.semver,String(x),r))return!1}if(n){if(I&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===I.major&&x.semver.minor===I.minor&&x.semver.patch===I.patch&&(I=!1),x.operator==="<"||x.operator==="<="){if(p=Wz(n,x,r),p===x&&p!==n)return!1}else if(n.operator==="<="&&!BI(n.semver,String(x),r))return!1}if(!x.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Yz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Wz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Kz.exports=S5e});var zn=_((BQt,Xz)=>{var uN=vy(),Jz=gI(),x5e=So(),zz=JT(),k5e=sd(),Q5e=dJ(),F5e=yJ(),R5e=wJ(),T5e=vJ(),N5e=SJ(),L5e=bJ(),O5e=kJ(),M5e=FJ(),U5e=Ll(),_5e=LJ(),H5e=MJ(),q5e=dS(),j5e=qJ(),G5e=GJ(),Y5e=mI(),W5e=mS(),K5e=zT(),V5e=XT(),J5e=yS(),z5e=ES(),X5e=ZT(),Z5e=$J(),$5e=CI(),e9e=Ol(),t9e=II(),r9e=Cz(),n9e=Iz(),i9e=vz(),s9e=Pz(),o9e=xz(),a9e=vS(),l9e=Nz(),c9e=Oz(),u9e=_z(),A9e=qz(),f9e=Vz();Xz.exports={parse:k5e,valid:Q5e,clean:F5e,inc:R5e,diff:T5e,major:N5e,minor:L5e,patch:O5e,prerelease:M5e,compare:U5e,rcompare:_5e,compareLoose:H5e,compareBuild:q5e,sort:j5e,rsort:G5e,gt:Y5e,lt:W5e,eq:K5e,neq:V5e,gte:J5e,lte:z5e,cmp:X5e,coerce:Z5e,Comparator:$5e,Range:e9e,satisfies:t9e,toComparators:r9e,maxSatisfying:n9e,minSatisfying:i9e,minVersion:s9e,validRange:o9e,outside:a9e,gtr:l9e,ltr:c9e,intersects:u9e,simplifyRange:A9e,subset:f9e,SemVer:x5e,re:uN.re,src:uN.src,tokens:uN.t,SEMVER_SPEC_VERSION:Jz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Jz.RELEASE_TYPES,compareIdentifiers:zz.compareIdentifiers,rcompareIdentifiers:zz.rcompareIdentifiers}});var $z=_((vQt,Zz)=>{"use strict";function p9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ud(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ud)}p9e(ud,Error);ud.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Pe|Ne[3];case"&":return Pe&Ne[3];case"^":return Pe^Ne[3]}},Z)},v="!",x=Re("!",!1),C=function(Z){return!Z},R="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},ae=/^[^ \t\n\r()!|&\^]/,fe=ke([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),ce=function(Z){return e.queryPattern.test(Z)},me=function(Z){return e.checkFn(Z)},he=Te("whitespace"),Be=/^[ \t\n\r]/,we=ke([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,Se=[{line:1,column:1}],le=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Fe(){return t.substring(Ee,g)}function At(){return qe(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),P([Te(Z)],t.substring(Ee,g),ie)}function at(Z,ie){throw ie=ie!==void 0?ie:qe(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function ke(Z,ie,Pe){return{type:"class",parts:Z,inverted:ie,ignoreCase:Pe}}function xe(){return{type:"any"}}function He(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=Se[Z],Pe;if(ie)return ie;for(Pe=Z-1;!Se[Pe];)Pe--;for(ie=Se[Pe],ie={line:ie.line,column:ie.column};Pele&&(le=g,ne=[]),ne.push(Z))}function w(Z,ie){return new ud(Z,null,null,ie)}function P(Z,ie,Pe){return new ud(ud.buildMessage(Z,ie),Z,ie,Pe)}function y(){var Z,ie,Pe,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Pe=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Pe.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Pe!==r?(Ee=Z,ie=I(ie,Pe),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Pe,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&b(x)),ie!==r?(Pe=F(),Pe!==r?(Ee=Z,ie=C(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=R,g++):(ie=r,ee===0&&b(L)),ie!==r?(Pe=X(),Pe!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&b(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Pe,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Pe=g,Ne=[],ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe)),ot!==r)for(;ot!==r;)Ne.push(ot),ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe));else Ne=r;Ne!==r?Pe=t.substring(Pe,g):Pe=Ne,Pe!==r?(Ee=g,Ne=ce(Pe),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=me(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));ie!==r;)Z.push(ie),Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));return ee--,Z===r&&(ie=r,ee===0&&b(he)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:g9e}=$z();DS.makeParser=(t=/[a-z]+/)=>(e,r)=>g9e(e,{queryPattern:t,checkFn:r});DS.parse=DS.makeParser()});var rX=_((SQt,tX)=>{"use strict";tX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var AN=_((PQt,iX)=>{var vI=rX(),nX={};for(let t of Object.keys(vI))nX[vI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};iX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function d9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=nX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(vI)){let n=vI[a],u=d9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var oX=_((bQt,sX)=>{var SS=AN();function m9e(){let t={},e=Object.keys(SS);for(let r=e.length,o=0;o{var fN=AN(),w9e=oX(),xy={},I9e=Object.keys(fN);function B9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function v9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:fN[t].channels}),Object.defineProperty(xy[t],"labels",{value:fN[t].labels});let e=w9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=v9e(a),xy[t][o].raw=B9e(a)})});aX.exports=xy});var DI=_((kQt,pX)=>{"use strict";var cX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,uX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},PS=t=>t,fX=(t,e,r)=>[t,e,r],ky=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},pN,Qy=(t,e,r,o)=>{pN===void 0&&(pN=lX());let a=o?10:0,n={};for(let[u,A]of Object.entries(pN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function D9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",ky(e.color,"ansi",()=>Qy(cX,"ansi16",PS,!1)),ky(e.color,"ansi256",()=>Qy(uX,"ansi256",PS,!1)),ky(e.color,"ansi16m",()=>Qy(AX,"rgb",fX,!1)),ky(e.bgColor,"ansi",()=>Qy(cX,"ansi16",PS,!0)),ky(e.bgColor,"ansi256",()=>Qy(uX,"ansi256",PS,!0)),ky(e.bgColor,"ansi16m",()=>Qy(AX,"rgb",fX,!0)),e}Object.defineProperty(pX,"exports",{enumerable:!0,get:D9e})});var gX=_((QQt,hX)=>{"use strict";hX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var S9e=ve("os"),dX=ve("tty"),Ml=gX(),{env:ls}=process,Jp;Ml("no-color")||Ml("no-colors")||Ml("color=false")||Ml("color=never")?Jp=0:(Ml("color")||Ml("colors")||Ml("color=true")||Ml("color=always"))&&(Jp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Jp=1:ls.FORCE_COLOR==="false"?Jp=0:Jp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function hN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function gN(t,e){if(Jp===0)return 0;if(Ml("color=16m")||Ml("color=full")||Ml("color=truecolor"))return 3;if(Ml("color=256"))return 2;if(t&&!e&&Jp===void 0)return 0;let r=Jp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=S9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function P9e(t){let e=gN(t,t&&t.isTTY);return hN(e)}mX.exports={supportsColor:P9e,stdout:hN(gN(!0,dX.isatty(1))),stderr:hN(gN(!0,dX.isatty(2)))}});var EX=_((RQt,yX)=>{"use strict";var b9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},x9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};yX.exports={stringReplaceAll:b9e,stringEncaseCRLFWithFirstIndex:x9e}});var vX=_((TQt,BX)=>{"use strict";var k9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Q9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,F9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,R9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function IX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):R9e.get(t)||t}function T9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(Q9e))r.push(a[2].replace(F9e,(A,p,h)=>p?IX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function N9e(t){CX.lastIndex=0;let e=[],r;for(;(r=CX.exec(t))!==null;){let o=r[1];if(r[2]){let a=T9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function wX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}BX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(k9e,(n,u,A,p,h,E)=>{if(u)a.push(IX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:wX(t,r)(I)),r.push({inverse:A,styles:N9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(wX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var IN=_((NQt,bX)=>{"use strict";var SI=DI(),{stdout:yN,stderr:EN}=dN(),{stringReplaceAll:L9e,stringEncaseCRLFWithFirstIndex:O9e}=EX(),DX=["ansi","ansi","ansi256","ansi16m"],Fy=Object.create(null),M9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=yN?yN.level:0;t.level=e.level===void 0?r:e.level},CN=class{constructor(e){return SX(e)}},SX=t=>{let e={};return M9e(e,t),e.template=(...r)=>H9e(e.template,...r),Object.setPrototypeOf(e,bS.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=CN,e.template};function bS(t){return SX(t)}for(let[t,e]of Object.entries(SI))Fy[t]={get(){let r=xS(this,wN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Fy.visible={get(){let t=xS(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var PX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of PX)Fy[t]={get(){let{level:e}=this;return function(...r){let o=wN(SI.color[DX[e]][t](...r),SI.color.close,this._styler);return xS(this,o,this._isEmpty)}}};for(let t of PX){let e="bg"+t[0].toUpperCase()+t.slice(1);Fy[e]={get(){let{level:r}=this;return function(...o){let a=wN(SI.bgColor[DX[r]][t](...o),SI.bgColor.close,this._styler);return xS(this,a,this._isEmpty)}}}}var U9e=Object.defineProperties(()=>{},{...Fy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),wN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},xS=(t,e,r)=>{let o=(...a)=>_9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=U9e,o._generator=t,o._styler=e,o._isEmpty=r,o},_9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=L9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=O9e(e,a,o,n)),o+e+a},mN,H9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var xX=kS();kX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&xX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&xX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var FX=_((MQt,QX)=>{"use strict";QX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var HX=_((UQt,_X)=>{"use strict";var RX=FX(),Ad=(t,e,r)=>{if(RX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(RX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(Ad.cache.hasOwnProperty(p))return Ad.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let R=t+"|"+e;return o.capture?`(${R})`:o.wrap===!1?R:`(?:${R})`}let I=UX(t)||UX(e),v={min:t,max:e,a:h,b:E},x=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let R=E<0?Math.abs(E):1;C=TX(R,Math.abs(h),v,o),h=v.a=0}return E>=0&&(x=TX(h,E,v,o)),v.negatives=C,v.positives=x,v.result=q9e(C,x,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&x.length+C.length>1&&(v.result=`(?:${v.result})`),Ad.cache[p]=v,v.result};function q9e(t,e,r){let o=BN(t,e,"-",!1,r)||[],a=BN(e,t,"",!1,r)||[],n=BN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function j9e(t,e){let r=1,o=1,a=LX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=LX(t,r);for(a=OX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+MX(A.count),u=h+1;continue}r.isPadded&&(I=V9e(h,r,o)),E.string=I+E.pattern+MX(E.count),n.push(E),u=h+1,A=E}return n}function BN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!NX(e,"string",A)&&n.push(r+A),o&&NX(e,"string",A)&&n.push(r+A)}return n}function Y9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function NX(t,e,r){return t.some(o=>o[e]===r)}function LX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function OX(t,e){return t-t%Math.pow(10,e)}function MX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function K9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function UX(t){return/^-?(0+)\d/.test(t)}function V9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}Ad.cache={};Ad.clearCache=()=>Ad.cache={};_X.exports=Ad});var SN=_((_Qt,JX)=>{"use strict";var J9e=ve("util"),GX=HX(),qX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),z9e=t=>e=>t===!0?Number(e):String(e),vN=t=>typeof t=="number"||typeof t=="string"&&t!=="",bI=t=>Number.isInteger(+t),DN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},X9e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Z9e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},jX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},YX=(t,e,r,o)=>{if(r)return GX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},WX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return GX(t,e,r)},KX=(...t)=>new RangeError("Invalid range arguments: "+J9e.inspect(...t)),VX=(t,e,r)=>{if(r.strictRanges===!0)throw KX([t,e]);return[]},e7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},t7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw KX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=DN(A)||DN(p)||DN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&X9e(t,e,o)===!1,x=o.transform||z9e(v);if(o.toRegex&&r===1)return YX(jX(t,I),jX(e,I),!0,o);let C={negatives:[],positives:[]},R=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?R(a):L.push(Z9e(x(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?$9e(C,o):WX(L,null,{wrap:!1,...o}):L},r7e=(t,e,r=1,o={})=>{if(!bI(t)&&t.length>1||!bI(e)&&e.length>1)return VX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return YX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?WX(E,null,{wrap:!1,options:o}):E},RS=(t,e,r,o={})=>{if(e==null&&vN(t))return[t];if(!vN(t)||!vN(e))return VX(t,e,o);if(typeof r=="function")return RS(t,e,1,{transform:r});if(qX(r))return RS(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,bI(r)?bI(t)&&bI(e)?t7e(t,e,r,a):r7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!qX(r)?e7e(r,a):RS(t,e,1,r)};JX.exports=RS});var ZX=_((HQt,XX)=>{"use strict";var n7e=SN(),zX=kS(),i7e=(t,e={})=>{let r=(o,a={})=>{let n=zX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=zX.reduce(o.nodes),I=n7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};XX.exports=i7e});var tZ=_((qQt,eZ)=>{"use strict";var s7e=SN(),$X=QS(),Ry=kS(),fd=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ry.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(fd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?fd(a,n,r):a+n);return Ry.flatten(o)},o7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(fd(A.pop(),$X(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(fd(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Ry.reduce(a.nodes);if(Ry.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=s7e(...I,e);v.length===0&&(v=$X(a,e)),A.push(fd(A.pop(),v)),a.nodes=[];return}let p=Ry.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";rZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var lZ=_((GQt,aZ)=>{"use strict";var a7e=QS(),{MAX_LENGTH:iZ,CHAR_BACKSLASH:PN,CHAR_BACKTICK:l7e,CHAR_COMMA:c7e,CHAR_DOT:u7e,CHAR_LEFT_PARENTHESES:A7e,CHAR_RIGHT_PARENTHESES:f7e,CHAR_LEFT_CURLY_BRACE:p7e,CHAR_RIGHT_CURLY_BRACE:h7e,CHAR_LEFT_SQUARE_BRACKET:sZ,CHAR_RIGHT_SQUARE_BRACKET:oZ,CHAR_DOUBLE_QUOTE:g7e,CHAR_SINGLE_QUOTE:d7e,CHAR_NO_BREAK_SPACE:m7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:y7e}=nZ(),E7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(iZ,r.maxLength):iZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,x={},C=()=>t[E++],R=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(R({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:a7e(u)}]}R({type:"comma",value:v}),u.commas++;continue}if(v===u7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){R({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}R({type:"dot",value:v});continue}R({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return R({type:"eos"}),a};aZ.exports=E7e});var AZ=_((YQt,uZ)=>{"use strict";var cZ=QS(),C7e=ZX(),w7e=tZ(),I7e=lZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>I7e(t,e);rl.stringify=(t,e={})=>cZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),C7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=w7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);uZ.exports=rl});var xI=_((WQt,dZ)=>{"use strict";var B7e=ve("path"),Ku="\\\\/",fZ=`[^${Ku}]`,vf="\\.",v7e="\\+",D7e="\\?",TS="\\/",S7e="(?=.)",pZ="[^/]",bN=`(?:${TS}|$)`,hZ=`(?:^|${TS})`,xN=`${vf}{1,2}${bN}`,P7e=`(?!${vf})`,b7e=`(?!${hZ}${xN})`,x7e=`(?!${vf}{0,1}${bN})`,k7e=`(?!${xN})`,Q7e=`[^.${TS}]`,F7e=`${pZ}*?`,gZ={DOT_LITERAL:vf,PLUS_LITERAL:v7e,QMARK_LITERAL:D7e,SLASH_LITERAL:TS,ONE_CHAR:S7e,QMARK:pZ,END_ANCHOR:bN,DOTS_SLASH:xN,NO_DOT:P7e,NO_DOTS:b7e,NO_DOT_SLASH:x7e,NO_DOTS_SLASH:k7e,QMARK_NO_DOT:Q7e,STAR:F7e,START_ANCHOR:hZ},R7e={...gZ,SLASH_LITERAL:`[${Ku}]`,QMARK:fZ,STAR:`${fZ}*?`,DOTS_SLASH:`${vf}{1,2}(?:[${Ku}]|$)`,NO_DOT:`(?!${vf})`,NO_DOTS:`(?!(?:^|[${Ku}])${vf}{1,2}(?:[${Ku}]|$))`,NO_DOT_SLASH:`(?!${vf}{0,1}(?:[${Ku}]|$))`,NO_DOTS_SLASH:`(?!${vf}{1,2}(?:[${Ku}]|$))`,QMARK_NO_DOT:`[^.${Ku}]`,START_ANCHOR:`(?:^|[${Ku}])`,END_ANCHOR:`(?:[${Ku}]|$)`},T7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};dZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:T7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:B7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?R7e:gZ}}});var kI=_(Sa=>{"use strict";var N7e=ve("path"),L7e=process.platform==="win32",{REGEX_BACKSLASH:O7e,REGEX_REMOVE_BACKSLASH:M7e,REGEX_SPECIAL_CHARS:U7e,REGEX_SPECIAL_CHARS_GLOBAL:_7e}=xI();Sa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Sa.hasRegexChars=t=>U7e.test(t);Sa.isRegexChar=t=>t.length===1&&Sa.hasRegexChars(t);Sa.escapeRegex=t=>t.replace(_7e,"\\$1");Sa.toPosixSlashes=t=>t.replace(O7e,"/");Sa.removeBackslashes=t=>t.replace(M7e,e=>e==="\\"?"":e);Sa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Sa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:L7e===!0||N7e.sep==="\\";Sa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Sa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Sa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Sa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var vZ=_((VQt,BZ)=>{"use strict";var mZ=kI(),{CHAR_ASTERISK:kN,CHAR_AT:H7e,CHAR_BACKWARD_SLASH:QI,CHAR_COMMA:q7e,CHAR_DOT:QN,CHAR_EXCLAMATION_MARK:FN,CHAR_FORWARD_SLASH:IZ,CHAR_LEFT_CURLY_BRACE:RN,CHAR_LEFT_PARENTHESES:TN,CHAR_LEFT_SQUARE_BRACKET:j7e,CHAR_PLUS:G7e,CHAR_QUESTION_MARK:yZ,CHAR_RIGHT_CURLY_BRACE:Y7e,CHAR_RIGHT_PARENTHESES:EZ,CHAR_RIGHT_SQUARE_BRACKET:W7e}=xI(),CZ=t=>t===IZ||t===QI,wZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},K7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,x=!1,C=!1,R=!1,L=!1,U=!1,J=!1,te=!1,ae=!1,fe=!1,ce=0,me,he,Be={value:"",depth:0,isGlob:!1},we=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(me=he,p.charCodeAt(++h));for(;h0&&(le=p.slice(0,E),p=p.slice(E),I-=E),Se&&C===!0&&I>0?(Se=p.slice(0,I),ne=p.slice(I)):C===!0?(Se="",ne=p):Se=p,Se&&Se!==""&&Se!=="/"&&Se!==p&&CZ(Se.charCodeAt(Se.length-1))&&(Se=Se.slice(0,-1)),r.unescape===!0&&(ne&&(ne=mZ.removeBackslashes(ne)),Se&&J===!0&&(Se=mZ.removeBackslashes(Se)));let ee={prefix:le,input:t,start:E,base:Se,glob:ne,isBrace:v,isBracket:x,isGlob:C,isExtglob:R,isGlobstar:L,negated:te,negatedExtglob:ae};if(r.tokens===!0&&(ee.maxDepth=0,CZ(he)||u.push(Be),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let Fe=0;Fe{"use strict";var NS=xI(),nl=kI(),{MAX_LENGTH:LS,POSIX_REGEX_SOURCE:V7e,REGEX_NON_SPECIAL_CHARS:J7e,REGEX_SPECIAL_CHARS_BACKREF:z7e,REPLACEMENTS:DZ}=NS,X7e=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,NN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=DZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NS.globChars(p),E=NS.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:x,ONE_CHAR:C,DOTS_SLASH:R,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:ae,STAR:fe,START_ANCHOR:ce}=h,me=b=>`(${A}(?:(?!${ce}${b.dot?R:I}).)*?)`,he=r.dot?"":L,Be=r.dot?te:ae,we=r.bash===!0?me(r):fe;r.capture&&(we=`(${we})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],Se=[],le=[],ne=n,ee,Ie=()=>g.index===a-1,Fe=g.peek=(b=1)=>t[g.index+b],At=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),at=(b="",w=0)=>{g.consumed+=b,g.index+=w},Re=b=>{g.output+=b.output!=null?b.output:b.value,at(b.value)},ke=()=>{let b=1;for(;Fe()==="!"&&(Fe(2)!=="("||Fe(3)==="?");)At(),g.start++,b++;return b%2===0?!1:(g.negated=!0,g.start++,!0)},xe=b=>{g[b]++,le.push(b)},He=b=>{g[b]--,le.pop()},Te=b=>{if(ne.type==="globstar"){let w=g.braces>0&&(b.type==="comma"||b.type==="brace"),P=b.extglob===!0||Ee.length&&(b.type==="pipe"||b.type==="paren");b.type!=="slash"&&b.type!=="paren"&&!w&&!P&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=we,g.output+=ne.output)}if(Ee.length&&b.type!=="paren"&&(Ee[Ee.length-1].inner+=b.value),(b.value||b.output)&&Re(b),ne&&ne.type==="text"&&b.type==="text"){ne.value+=b.value,ne.output=(ne.output||"")+b.value;return}b.prev=ne,u.push(b),ne=b},Je=(b,w)=>{let P={...E[w],conditions:1,inner:""};P.prev=ne,P.parens=g.parens,P.output=g.output;let y=(r.capture?"(":"")+P.open;xe("parens"),Te({type:b,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:At(),output:y}),Ee.push(P)},qe=b=>{let w=b.close+(r.capture?")":""),P;if(b.type==="negate"){let y=we;if(b.inner&&b.inner.length>1&&b.inner.includes("/")&&(y=me(r)),(y!==we||Ie()||/^\)+$/.test(H()))&&(w=b.close=`)$))${y}`),b.inner.includes("*")&&(P=H())&&/^\.[^\\/.]+$/.test(P)){let F=NN(P,{...e,fastpaths:!1}).output;w=b.close=`)${F})${y})`}b.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),He("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let b=!1,w=t.replace(z7e,(P,y,F,z,X,Z)=>z==="\\"?(b=!0,P):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?Be+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?we:""):we:y?P:`\\${P}`);return b===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,P=>P.length%2===0?"\\\\":P?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=At(),ee==="\0")continue;if(ee==="\\"){let P=Fe();if(P==="/"&&r.bash!==!0||P==="."||P===";")continue;if(!P){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=At():ee+=At(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let P=ne.value.slice(1);if(P.includes("[")&&(ne.posix=!0,P.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=V7e[z];if(X){ne.value=F+X,g.backtrack=!0,At(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&Fe()!==":"||ee==="-"&&Fe()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){xe("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let P=Ee[Ee.length-1];if(P&&g.parens===P.parens+1){qe(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),He("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else xe("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}He("brackets");let P=ne.value.slice(1);if(ne.posix!==!0&&P[0]==="^"&&!P.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(P))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let P={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};Se.push(P),Te(P);continue}if(ee==="}"){let P=Se[Se.length-1];if(r.nobrace===!0||!P){Te({type:"text",value:ee,output:ee});continue}let y=")";if(P.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=X7e(z,r),g.backtrack=!0}if(P.comma!==!0&&P.dots!==!0){let F=g.output.slice(0,P.outputIndex),z=g.tokens.slice(P.tokensIndex);P.value=P.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),He("braces"),Se.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let P=ee,y=Se[Se.length-1];y&&le[le.length-1]==="braces"&&(y.comma=!0,P="|"),Te({type:"comma",value:ee,output:P});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:x});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let P=Se[Se.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,P.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=Fe(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:ae});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&Fe()==="("&&(Fe(2)!=="?"||!/[!=<:]/.test(Fe(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){ke();continue}}if(ee==="+"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let P=J7e.exec(H());P&&(ee+=P[0],g.index+=P[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=we,g.backtrack=!0,g.globstar=!0,at(ee);continue}let b=H();if(r.noextglob!==!0&&/^\([^?]/.test(b)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){at(ee);continue}let P=ne.prev,y=P.prev,F=P.type==="slash"||P.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||b[0]&&b[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(P.type==="comma"||P.type==="brace"),Z=Ee.length&&(P.type==="pipe"||P.type==="paren");if(!F&&P.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;b.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;b=b.slice(3),at("/**",3)}if(P.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=me(r),g.output=ne.output,g.globstar=!0,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=me(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=P.output+ne.output,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&b[0]==="/"){let ie=b[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=`${me(r)}${x}|${x}${ie})`,ne.value+=ee,g.output+=P.output+ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}if(P.type==="bos"&&b[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${x}|${me(r)}${x})`,g.output=ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=me(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,at(ee);continue}let w={type:"star",value:ee,output:we};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=he+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=he,ne.output+=he),Fe()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),He("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),He("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),He("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${x}?`}),g.backtrack===!0){g.output="";for(let b of g.tokens)g.output+=b.output!=null?b.output:b.value,b.suffix&&(g.output+=b.suffix)}return g};NN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=DZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:x,START_ANCHOR:C}=NS.globChars(n),R=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":x;r.capture&&(te=`(${te})`);let ae=he=>he.noglobstar===!0?te:`(${U}(?:(?!${C}${he.dot?h:u}).)*?)`,fe=he=>{switch(he){case"*":return`${R}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${R}${te}${u}${p}${te}`;case"*/*":return`${R}${te}${A}${p}${L}${te}`;case"**":return R+ae(r);case"**/*":return`(?:${R}${ae(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${R}${ae(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${R}${ae(r)}${A})?${u}${p}${te}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(he);if(!Be)return;let we=fe(Be[1]);return we?we+u+Be[2]:void 0}}},ce=nl.removePrefix(t,J),me=fe(ce);return me&&r.strictSlashes!==!0&&(me+=`${A}?`),me};SZ.exports=NN});var xZ=_((zQt,bZ)=>{"use strict";var Z7e=ve("path"),$7e=vZ(),LN=PZ(),ON=kI(),eYe=xI(),tYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Mi(v,e,r));return v=>{for(let x of E){let C=x(v);if(C)return C}return!1}}let o=tYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=ON.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:x,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),R={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:x,isMatch:v};return typeof a.onResult=="function"&&a.onResult(R),v===!1?(R.isMatch=!1,I?R:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(R),R.isMatch=!1,I?R:!1):(typeof a.onMatch=="function"&&a.onMatch(R),I?R:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?ON.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=ON.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test(Z7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):LN(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>$7e(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=LN.fastpaths(t,e)),a.output||(a=LN(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=eYe;bZ.exports=Mi});var QZ=_((XQt,kZ)=>{"use strict";kZ.exports=xZ()});var Zo=_((ZQt,NZ)=>{"use strict";var RZ=ve("util"),TZ=AZ(),Vu=QZ(),MN=kI(),FZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(FZ(t)||FZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!MN.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=MN.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?MN.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of TZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:TZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};NZ.exports=yi});var OZ=_(($Qt,LZ)=>{"use strict";LZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var OS=_((eFt,MZ)=>{"use strict";var rYe=OZ();MZ.exports=t=>typeof t=="string"?t.replace(rYe(),""):t});var _Z=_((tFt,UZ)=>{function nYe(){this.__data__=[],this.size=0}UZ.exports=nYe});var Ny=_((rFt,HZ)=>{function iYe(t,e){return t===e||t!==t&&e!==e}HZ.exports=iYe});var FI=_((nFt,qZ)=>{var sYe=Ny();function oYe(t,e){for(var r=t.length;r--;)if(sYe(t[r][0],e))return r;return-1}qZ.exports=oYe});var GZ=_((iFt,jZ)=>{var aYe=FI(),lYe=Array.prototype,cYe=lYe.splice;function uYe(t){var e=this.__data__,r=aYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():cYe.call(e,r,1),--this.size,!0}jZ.exports=uYe});var WZ=_((sFt,YZ)=>{var AYe=FI();function fYe(t){var e=this.__data__,r=AYe(e,t);return r<0?void 0:e[r][1]}YZ.exports=fYe});var VZ=_((oFt,KZ)=>{var pYe=FI();function hYe(t){return pYe(this.__data__,t)>-1}KZ.exports=hYe});var zZ=_((aFt,JZ)=>{var gYe=FI();function dYe(t,e){var r=this.__data__,o=gYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}JZ.exports=dYe});var RI=_((lFt,XZ)=>{var mYe=_Z(),yYe=GZ(),EYe=WZ(),CYe=VZ(),wYe=zZ();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var IYe=RI();function BYe(){this.__data__=new IYe,this.size=0}ZZ.exports=BYe});var t$=_((uFt,e$)=>{function vYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}e$.exports=vYe});var n$=_((AFt,r$)=>{function DYe(t){return this.__data__.get(t)}r$.exports=DYe});var s$=_((fFt,i$)=>{function SYe(t){return this.__data__.has(t)}i$.exports=SYe});var UN=_((pFt,o$)=>{var PYe=typeof global=="object"&&global&&global.Object===Object&&global;o$.exports=PYe});var _l=_((hFt,a$)=>{var bYe=UN(),xYe=typeof self=="object"&&self&&self.Object===Object&&self,kYe=bYe||xYe||Function("return this")();a$.exports=kYe});var pd=_((gFt,l$)=>{var QYe=_l(),FYe=QYe.Symbol;l$.exports=FYe});var f$=_((dFt,A$)=>{var c$=pd(),u$=Object.prototype,RYe=u$.hasOwnProperty,TYe=u$.toString,TI=c$?c$.toStringTag:void 0;function NYe(t){var e=RYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=TYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}A$.exports=NYe});var h$=_((mFt,p$)=>{var LYe=Object.prototype,OYe=LYe.toString;function MYe(t){return OYe.call(t)}p$.exports=MYe});var hd=_((yFt,m$)=>{var g$=pd(),UYe=f$(),_Ye=h$(),HYe="[object Null]",qYe="[object Undefined]",d$=g$?g$.toStringTag:void 0;function jYe(t){return t==null?t===void 0?qYe:HYe:d$&&d$ in Object(t)?UYe(t):_Ye(t)}m$.exports=jYe});var il=_((EFt,y$)=>{function GYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}y$.exports=GYe});var MS=_((CFt,E$)=>{var YYe=hd(),WYe=il(),KYe="[object AsyncFunction]",VYe="[object Function]",JYe="[object GeneratorFunction]",zYe="[object Proxy]";function XYe(t){if(!WYe(t))return!1;var e=YYe(t);return e==VYe||e==JYe||e==KYe||e==zYe}E$.exports=XYe});var w$=_((wFt,C$)=>{var ZYe=_l(),$Ye=ZYe["__core-js_shared__"];C$.exports=$Ye});var v$=_((IFt,B$)=>{var _N=w$(),I$=function(){var t=/[^.]+$/.exec(_N&&_N.keys&&_N.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function eWe(t){return!!I$&&I$ in t}B$.exports=eWe});var HN=_((BFt,D$)=>{var tWe=Function.prototype,rWe=tWe.toString;function nWe(t){if(t!=null){try{return rWe.call(t)}catch{}try{return t+""}catch{}}return""}D$.exports=nWe});var P$=_((vFt,S$)=>{var iWe=MS(),sWe=v$(),oWe=il(),aWe=HN(),lWe=/[\\^$.*+?()[\]{}|]/g,cWe=/^\[object .+?Constructor\]$/,uWe=Function.prototype,AWe=Object.prototype,fWe=uWe.toString,pWe=AWe.hasOwnProperty,hWe=RegExp("^"+fWe.call(pWe).replace(lWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gWe(t){if(!oWe(t)||sWe(t))return!1;var e=iWe(t)?hWe:cWe;return e.test(aWe(t))}S$.exports=gWe});var x$=_((DFt,b$)=>{function dWe(t,e){return t?.[e]}b$.exports=dWe});var zp=_((SFt,k$)=>{var mWe=P$(),yWe=x$();function EWe(t,e){var r=yWe(t,e);return mWe(r)?r:void 0}k$.exports=EWe});var US=_((PFt,Q$)=>{var CWe=zp(),wWe=_l(),IWe=CWe(wWe,"Map");Q$.exports=IWe});var NI=_((bFt,F$)=>{var BWe=zp(),vWe=BWe(Object,"create");F$.exports=vWe});var N$=_((xFt,T$)=>{var R$=NI();function DWe(){this.__data__=R$?R$(null):{},this.size=0}T$.exports=DWe});var O$=_((kFt,L$)=>{function SWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}L$.exports=SWe});var U$=_((QFt,M$)=>{var PWe=NI(),bWe="__lodash_hash_undefined__",xWe=Object.prototype,kWe=xWe.hasOwnProperty;function QWe(t){var e=this.__data__;if(PWe){var r=e[t];return r===bWe?void 0:r}return kWe.call(e,t)?e[t]:void 0}M$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=NI(),RWe=Object.prototype,TWe=RWe.hasOwnProperty;function NWe(t){var e=this.__data__;return FWe?e[t]!==void 0:TWe.call(e,t)}_$.exports=NWe});var j$=_((RFt,q$)=>{var LWe=NI(),OWe="__lodash_hash_undefined__";function MWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=LWe&&e===void 0?OWe:e,this}q$.exports=MWe});var Y$=_((TFt,G$)=>{var UWe=N$(),_We=O$(),HWe=U$(),qWe=H$(),jWe=j$();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var W$=Y$(),GWe=RI(),YWe=US();function WWe(){this.size=0,this.__data__={hash:new W$,map:new(YWe||GWe),string:new W$}}K$.exports=WWe});var z$=_((LFt,J$)=>{function KWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}J$.exports=KWe});var LI=_((OFt,X$)=>{var VWe=z$();function JWe(t,e){var r=t.__data__;return VWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}X$.exports=JWe});var $$=_((MFt,Z$)=>{var zWe=LI();function XWe(t){var e=zWe(this,t).delete(t);return this.size-=e?1:0,e}Z$.exports=XWe});var tee=_((UFt,eee)=>{var ZWe=LI();function $We(t){return ZWe(this,t).get(t)}eee.exports=$We});var nee=_((_Ft,ree)=>{var eKe=LI();function tKe(t){return eKe(this,t).has(t)}ree.exports=tKe});var see=_((HFt,iee)=>{var rKe=LI();function nKe(t,e){var r=rKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}iee.exports=nKe});var _S=_((qFt,oee)=>{var iKe=V$(),sKe=$$(),oKe=tee(),aKe=nee(),lKe=see();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var cKe=RI(),uKe=US(),AKe=_S(),fKe=200;function pKe(t,e){var r=this.__data__;if(r instanceof cKe){var o=r.__data__;if(!uKe||o.length{var hKe=RI(),gKe=$Z(),dKe=t$(),mKe=n$(),yKe=s$(),EKe=lee();function Uy(t){var e=this.__data__=new hKe(t);this.size=e.size}Uy.prototype.clear=gKe;Uy.prototype.delete=dKe;Uy.prototype.get=mKe;Uy.prototype.has=yKe;Uy.prototype.set=EKe;cee.exports=Uy});var Aee=_((YFt,uee)=>{var CKe="__lodash_hash_undefined__";function wKe(t){return this.__data__.set(t,CKe),this}uee.exports=wKe});var pee=_((WFt,fee)=>{function IKe(t){return this.__data__.has(t)}fee.exports=IKe});var gee=_((KFt,hee)=>{var BKe=_S(),vKe=Aee(),DKe=pee();function qS(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new BKe;++e{function SKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function PKe(t,e){return t.has(e)}yee.exports=PKe});var qN=_((zFt,Cee)=>{var bKe=gee(),xKe=mee(),kKe=Eee(),QKe=1,FKe=2;function RKe(t,e,r,o,a,n){var u=r&QKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,x=r&FKe?new bKe:void 0;for(n.set(t,e),n.set(e,t);++I{var TKe=_l(),NKe=TKe.Uint8Array;wee.exports=NKe});var Bee=_((ZFt,Iee)=>{function LKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Iee.exports=LKe});var Dee=_(($Ft,vee)=>{function OKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}vee.exports=OKe});var kee=_((eRt,xee)=>{var See=pd(),Pee=jN(),MKe=Ny(),UKe=qN(),_Ke=Bee(),HKe=Dee(),qKe=1,jKe=2,GKe="[object Boolean]",YKe="[object Date]",WKe="[object Error]",KKe="[object Map]",VKe="[object Number]",JKe="[object RegExp]",zKe="[object Set]",XKe="[object String]",ZKe="[object Symbol]",$Ke="[object ArrayBuffer]",eVe="[object DataView]",bee=See?See.prototype:void 0,GN=bee?bee.valueOf:void 0;function tVe(t,e,r,o,a,n,u){switch(r){case eVe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case $Ke:return!(t.byteLength!=e.byteLength||!n(new Pee(t),new Pee(e)));case GKe:case YKe:case VKe:return MKe(+t,+e);case WKe:return t.name==e.name&&t.message==e.message;case JKe:case XKe:return t==e+"";case KKe:var A=_Ke;case zKe:var p=o&qKe;if(A||(A=HKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=jKe,u.set(t,e);var E=UKe(A(t),A(e),o,a,n,u);return u.delete(t),E;case ZKe:if(GN)return GN.call(t)==GN.call(e)}return!1}xee.exports=tVe});var jS=_((tRt,Qee)=>{function rVe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var nVe=Array.isArray;Fee.exports=nVe});var YN=_((nRt,Ree)=>{var iVe=jS(),sVe=Hl();function oVe(t,e,r){var o=e(t);return sVe(t)?o:iVe(o,r(t))}Ree.exports=oVe});var Nee=_((iRt,Tee)=>{function aVe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function lVe(){return[]}Lee.exports=lVe});var GS=_((oRt,Mee)=>{var cVe=Nee(),uVe=WN(),AVe=Object.prototype,fVe=AVe.propertyIsEnumerable,Oee=Object.getOwnPropertySymbols,pVe=Oee?function(t){return t==null?[]:(t=Object(t),cVe(Oee(t),function(e){return fVe.call(t,e)}))}:uVe;Mee.exports=pVe});var _ee=_((aRt,Uee)=>{function hVe(t,e){for(var r=-1,o=Array(t);++r{function gVe(t){return t!=null&&typeof t=="object"}Hee.exports=gVe});var jee=_((cRt,qee)=>{var dVe=hd(),mVe=Ju(),yVe="[object Arguments]";function EVe(t){return mVe(t)&&dVe(t)==yVe}qee.exports=EVe});var OI=_((uRt,Wee)=>{var Gee=jee(),CVe=Ju(),Yee=Object.prototype,wVe=Yee.hasOwnProperty,IVe=Yee.propertyIsEnumerable,BVe=Gee(function(){return arguments}())?Gee:function(t){return CVe(t)&&wVe.call(t,"callee")&&!IVe.call(t,"callee")};Wee.exports=BVe});var Vee=_((ARt,Kee)=>{function vVe(){return!1}Kee.exports=vVe});var UI=_((MI,_y)=>{var DVe=_l(),SVe=Vee(),Xee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Jee=Xee&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,PVe=Jee&&Jee.exports===Xee,zee=PVe?DVe.Buffer:void 0,bVe=zee?zee.isBuffer:void 0,xVe=bVe||SVe;_y.exports=xVe});var _I=_((fRt,Zee)=>{var kVe=9007199254740991,QVe=/^(?:0|[1-9]\d*)$/;function FVe(t,e){var r=typeof t;return e=e??kVe,!!e&&(r=="number"||r!="symbol"&&QVe.test(t))&&t>-1&&t%1==0&&t{var RVe=9007199254740991;function TVe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=RVe}$ee.exports=TVe});var tte=_((hRt,ete)=>{var NVe=hd(),LVe=YS(),OVe=Ju(),MVe="[object Arguments]",UVe="[object Array]",_Ve="[object Boolean]",HVe="[object Date]",qVe="[object Error]",jVe="[object Function]",GVe="[object Map]",YVe="[object Number]",WVe="[object Object]",KVe="[object RegExp]",VVe="[object Set]",JVe="[object String]",zVe="[object WeakMap]",XVe="[object ArrayBuffer]",ZVe="[object DataView]",$Ve="[object Float32Array]",eJe="[object Float64Array]",tJe="[object Int8Array]",rJe="[object Int16Array]",nJe="[object Int32Array]",iJe="[object Uint8Array]",sJe="[object Uint8ClampedArray]",oJe="[object Uint16Array]",aJe="[object Uint32Array]",ui={};ui[$Ve]=ui[eJe]=ui[tJe]=ui[rJe]=ui[nJe]=ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=!0;ui[MVe]=ui[UVe]=ui[XVe]=ui[_Ve]=ui[ZVe]=ui[HVe]=ui[qVe]=ui[jVe]=ui[GVe]=ui[YVe]=ui[WVe]=ui[KVe]=ui[VVe]=ui[JVe]=ui[zVe]=!1;function lJe(t){return OVe(t)&&LVe(t.length)&&!!ui[NVe(t)]}ete.exports=lJe});var WS=_((gRt,rte)=>{function cJe(t){return function(e){return t(e)}}rte.exports=cJe});var KS=_((HI,Hy)=>{var uJe=UN(),nte=typeof HI=="object"&&HI&&!HI.nodeType&&HI,qI=nte&&typeof Hy=="object"&&Hy&&!Hy.nodeType&&Hy,AJe=qI&&qI.exports===nte,KN=AJe&&uJe.process,fJe=function(){try{var t=qI&&qI.require&&qI.require("util").types;return t||KN&&KN.binding&&KN.binding("util")}catch{}}();Hy.exports=fJe});var VS=_((dRt,ote)=>{var pJe=tte(),hJe=WS(),ite=KS(),ste=ite&&ite.isTypedArray,gJe=ste?hJe(ste):pJe;ote.exports=gJe});var VN=_((mRt,ate)=>{var dJe=_ee(),mJe=OI(),yJe=Hl(),EJe=UI(),CJe=_I(),wJe=VS(),IJe=Object.prototype,BJe=IJe.hasOwnProperty;function vJe(t,e){var r=yJe(t),o=!r&&mJe(t),a=!r&&!o&&EJe(t),n=!r&&!o&&!a&&wJe(t),u=r||o||a||n,A=u?dJe(t.length,String):[],p=A.length;for(var h in t)(e||BJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||CJe(h,p)))&&A.push(h);return A}ate.exports=vJe});var JS=_((yRt,lte)=>{var DJe=Object.prototype;function SJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||DJe;return t===r}lte.exports=SJe});var JN=_((ERt,cte)=>{function PJe(t,e){return function(r){return t(e(r))}}cte.exports=PJe});var Ate=_((CRt,ute)=>{var bJe=JN(),xJe=bJe(Object.keys,Object);ute.exports=xJe});var pte=_((wRt,fte)=>{var kJe=JS(),QJe=Ate(),FJe=Object.prototype,RJe=FJe.hasOwnProperty;function TJe(t){if(!kJe(t))return QJe(t);var e=[];for(var r in Object(t))RJe.call(t,r)&&r!="constructor"&&e.push(r);return e}fte.exports=TJe});var jI=_((IRt,hte)=>{var NJe=MS(),LJe=YS();function OJe(t){return t!=null&&LJe(t.length)&&!NJe(t)}hte.exports=OJe});var zS=_((BRt,gte)=>{var MJe=VN(),UJe=pte(),_Je=jI();function HJe(t){return _Je(t)?MJe(t):UJe(t)}gte.exports=HJe});var zN=_((vRt,dte)=>{var qJe=YN(),jJe=GS(),GJe=zS();function YJe(t){return qJe(t,GJe,jJe)}dte.exports=YJe});var Ete=_((DRt,yte)=>{var mte=zN(),WJe=1,KJe=Object.prototype,VJe=KJe.hasOwnProperty;function JJe(t,e,r,o,a,n){var u=r&WJe,A=mte(t),p=A.length,h=mte(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:VJe.call(e,v)))return!1}var x=n.get(t),C=n.get(e);if(x&&C)return x==e&&C==t;var R=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var zJe=zp(),XJe=_l(),ZJe=zJe(XJe,"DataView");Cte.exports=ZJe});var Bte=_((PRt,Ite)=>{var $Je=zp(),eze=_l(),tze=$Je(eze,"Promise");Ite.exports=tze});var Dte=_((bRt,vte)=>{var rze=zp(),nze=_l(),ize=rze(nze,"Set");vte.exports=ize});var Pte=_((xRt,Ste)=>{var sze=zp(),oze=_l(),aze=sze(oze,"WeakMap");Ste.exports=aze});var GI=_((kRt,Tte)=>{var XN=wte(),ZN=US(),$N=Bte(),eL=Dte(),tL=Pte(),Rte=hd(),qy=HN(),bte="[object Map]",lze="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Fte="[object DataView]",cze=qy(XN),uze=qy(ZN),Aze=qy($N),fze=qy(eL),pze=qy(tL),gd=Rte;(XN&&gd(new XN(new ArrayBuffer(1)))!=Fte||ZN&&gd(new ZN)!=bte||$N&&gd($N.resolve())!=xte||eL&&gd(new eL)!=kte||tL&&gd(new tL)!=Qte)&&(gd=function(t){var e=Rte(t),r=e==lze?t.constructor:void 0,o=r?qy(r):"";if(o)switch(o){case cze:return Fte;case uze:return bte;case Aze:return xte;case fze:return kte;case pze:return Qte}return e});Tte.exports=gd});var qte=_((QRt,Hte)=>{var rL=HS(),hze=qN(),gze=kee(),dze=Ete(),Nte=GI(),Lte=Hl(),Ote=UI(),mze=VS(),yze=1,Mte="[object Arguments]",Ute="[object Array]",XS="[object Object]",Eze=Object.prototype,_te=Eze.hasOwnProperty;function Cze(t,e,r,o,a,n){var u=Lte(t),A=Lte(e),p=u?Ute:Nte(t),h=A?Ute:Nte(e);p=p==Mte?XS:p,h=h==Mte?XS:h;var E=p==XS,I=h==XS,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new rL),u||mze(t)?hze(t,e,r,o,a,n):gze(t,e,p,r,o,a,n);if(!(r&yze)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var R=x?t.value():t,L=C?e.value():e;return n||(n=new rL),a(R,L,r,o,n)}}return v?(n||(n=new rL),dze(t,e,r,o,a,n)):!1}Hte.exports=Cze});var Wte=_((FRt,Yte)=>{var wze=qte(),jte=Ju();function Gte(t,e,r,o,a){return t===e?!0:t==null||e==null||!jte(t)&&!jte(e)?t!==t&&e!==e:wze(t,e,r,o,Gte,a)}Yte.exports=Gte});var Vte=_((RRt,Kte)=>{var Ize=Wte();function Bze(t,e){return Ize(t,e)}Kte.exports=Bze});var nL=_((TRt,Jte)=>{var vze=zp(),Dze=function(){try{var t=vze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Jte.exports=Dze});var ZS=_((NRt,Xte)=>{var zte=nL();function Sze(t,e,r){e=="__proto__"&&zte?zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=Sze});var iL=_((LRt,Zte)=>{var Pze=ZS(),bze=Ny();function xze(t,e,r){(r!==void 0&&!bze(t[e],r)||r===void 0&&!(e in t))&&Pze(t,e,r)}Zte.exports=xze});var ere=_((ORt,$te)=>{function kze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=kze});var rre=_((MRt,tre)=>{var Qze=ere(),Fze=Qze();tre.exports=Fze});var sL=_((YI,jy)=>{var Rze=_l(),ore=typeof YI=="object"&&YI&&!YI.nodeType&&YI,nre=ore&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Tze=nre&&nre.exports===ore,ire=Tze?Rze.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function Nze(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}jy.exports=Nze});var $S=_((URt,lre)=>{var are=jN();function Lze(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=Lze});var oL=_((_Rt,cre)=>{var Oze=$S();function Mze(t,e){var r=e?Oze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=Mze});var eP=_((HRt,ure)=>{function Uze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var _ze=il(),Are=Object.create,Hze=function(){function t(){}return function(e){if(!_ze(e))return{};if(Are)return Are(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();fre.exports=Hze});var tP=_((jRt,hre)=>{var qze=JN(),jze=qze(Object.getPrototypeOf,Object);hre.exports=jze});var aL=_((GRt,gre)=>{var Gze=pre(),Yze=tP(),Wze=JS();function Kze(t){return typeof t.constructor=="function"&&!Wze(t)?Gze(Yze(t)):{}}gre.exports=Kze});var mre=_((YRt,dre)=>{var Vze=jI(),Jze=Ju();function zze(t){return Jze(t)&&Vze(t)}dre.exports=zze});var lL=_((WRt,Ere)=>{var Xze=hd(),Zze=tP(),$ze=Ju(),eXe="[object Object]",tXe=Function.prototype,rXe=Object.prototype,yre=tXe.toString,nXe=rXe.hasOwnProperty,iXe=yre.call(Object);function sXe(t){if(!$ze(t)||Xze(t)!=eXe)return!1;var e=Zze(t);if(e===null)return!0;var r=nXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&yre.call(r)==iXe}Ere.exports=sXe});var cL=_((KRt,Cre)=>{function oXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Cre.exports=oXe});var rP=_((VRt,wre)=>{var aXe=ZS(),lXe=Ny(),cXe=Object.prototype,uXe=cXe.hasOwnProperty;function AXe(t,e,r){var o=t[e];(!(uXe.call(t,e)&&lXe(o,r))||r===void 0&&!(e in t))&&aXe(t,e,r)}wre.exports=AXe});var dd=_((JRt,Ire)=>{var fXe=rP(),pXe=ZS();function hXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function gXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Bre.exports=gXe});var Sre=_((XRt,Dre)=>{var dXe=il(),mXe=JS(),yXe=vre(),EXe=Object.prototype,CXe=EXe.hasOwnProperty;function wXe(t){if(!dXe(t))return yXe(t);var e=mXe(t),r=[];for(var o in t)o=="constructor"&&(e||!CXe.call(t,o))||r.push(o);return r}Dre.exports=wXe});var Gy=_((ZRt,Pre)=>{var IXe=VN(),BXe=Sre(),vXe=jI();function DXe(t){return vXe(t)?IXe(t,!0):BXe(t)}Pre.exports=DXe});var xre=_(($Rt,bre)=>{var SXe=dd(),PXe=Gy();function bXe(t){return SXe(t,PXe(t))}bre.exports=bXe});var Nre=_((eTt,Tre)=>{var kre=iL(),xXe=sL(),kXe=oL(),QXe=eP(),FXe=aL(),Qre=OI(),Fre=Hl(),RXe=mre(),TXe=UI(),NXe=MS(),LXe=il(),OXe=lL(),MXe=VS(),Rre=cL(),UXe=xre();function _Xe(t,e,r,o,a,n,u){var A=Rre(t,r),p=Rre(e,r),h=u.get(p);if(h){kre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Fre(p),x=!v&&TXe(p),C=!v&&!x&&MXe(p);E=p,v||x||C?Fre(A)?E=A:RXe(A)?E=QXe(A):x?(I=!1,E=xXe(p,!0)):C?(I=!1,E=kXe(p,!0)):E=[]:OXe(p)||Qre(p)?(E=A,Qre(A)?E=UXe(A):(!LXe(A)||NXe(A))&&(E=FXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),kre(t,r,E)}Tre.exports=_Xe});var Mre=_((tTt,Ore)=>{var HXe=HS(),qXe=iL(),jXe=rre(),GXe=Nre(),YXe=il(),WXe=Gy(),KXe=cL();function Lre(t,e,r,o,a){t!==e&&jXe(e,function(n,u){if(a||(a=new HXe),YXe(n))GXe(t,e,u,r,Lre,o,a);else{var A=o?o(KXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),qXe(t,u,A)}},WXe)}Ore.exports=Lre});var uL=_((rTt,Ure)=>{function VXe(t){return t}Ure.exports=VXe});var Hre=_((nTt,_re)=>{function JXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}_re.exports=JXe});var AL=_((iTt,jre)=>{var zXe=Hre(),qre=Math.max;function XXe(t,e,r){return e=qre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=qre(o.length-e,0),u=Array(n);++a{function ZXe(t){return function(){return t}}Gre.exports=ZXe});var Vre=_((oTt,Kre)=>{var $Xe=Yre(),Wre=nL(),eZe=uL(),tZe=Wre?function(t,e){return Wre(t,"toString",{configurable:!0,enumerable:!1,value:$Xe(e),writable:!0})}:eZe;Kre.exports=tZe});var zre=_((aTt,Jre)=>{var rZe=800,nZe=16,iZe=Date.now;function sZe(t){var e=0,r=0;return function(){var o=iZe(),a=nZe-(o-r);if(r=o,a>0){if(++e>=rZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Jre.exports=sZe});var fL=_((lTt,Xre)=>{var oZe=Vre(),aZe=zre(),lZe=aZe(oZe);Xre.exports=lZe});var $re=_((cTt,Zre)=>{var cZe=uL(),uZe=AL(),AZe=fL();function fZe(t,e){return AZe(uZe(t,e,cZe),t+"")}Zre.exports=fZe});var tne=_((uTt,ene)=>{var pZe=Ny(),hZe=jI(),gZe=_I(),dZe=il();function mZe(t,e,r){if(!dZe(r))return!1;var o=typeof e;return(o=="number"?hZe(r)&&gZe(e,r.length):o=="string"&&e in r)?pZe(r[e],t):!1}ene.exports=mZe});var nne=_((ATt,rne)=>{var yZe=$re(),EZe=tne();function CZe(t){return yZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&EZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var wZe=Mre(),IZe=nne(),BZe=IZe(function(t,e,r,o){wZe(t,e,r,o)});ine.exports=BZe});var _e={};Vt(_e,{AsyncActions:()=>gL,BufferStream:()=>hL,CachingStrategy:()=>mne,DefaultStream:()=>dL,allSettledSafe:()=>Uc,assertNever:()=>yL,bufferStream:()=>Vy,buildIgnorePattern:()=>kZe,convertMapsToIndexableObjects:()=>iP,dynamicRequire:()=>Df,escapeRegExp:()=>DZe,getArrayWithDefault:()=>Yy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Wy,getSetWithDefault:()=>md,groupBy:()=>wL,isIndexableObject:()=>pL,isPathLike:()=>QZe,isTaggedYarnVersion:()=>vZe,makeDeferred:()=>hne,mapAndFilter:()=>sl,mapAndFind:()=>KI,mergeIntoTarget:()=>Ene,overrideType:()=>SZe,parseBoolean:()=>VI,parseInt:()=>Jy,parseOptionalBoolean:()=>yne,plural:()=>nP,prettifyAsyncErrors:()=>Ky,prettifySyncErrors:()=>EL,releaseAfterUseAsync:()=>bZe,replaceEnvVariables:()=>sP,sortMap:()=>ks,toMerged:()=>FZe,tryParseOptionalBoolean:()=>CL,validateEnum:()=>PZe});function vZe(t){return!!(Ane.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nP(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function DZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function SZe(t){}function yL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function PZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==fne&&r.push(a)}return r}function KI(t,e){for(let r of t){let o=e(r);if(o!==pne)return o}}function pL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iP(t){if(t instanceof Map&&(t=Object.fromEntries(t)),pL(t))for(let e of Object.keys(t)){let r=t[e];pL(r)&&(t[e]=iP(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function md(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Wy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function bZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Ky(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function EL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function hne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function gne(t){return WI(ue.fromPortablePath(t))}function dne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=WI.cache[physicalPath];delete WI.cache[physicalPath];let result;try{result=gne(physicalPath);let freshCacheEntry=WI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{WI.cache[physicalPath]=currentCacheEntry}return result}function xZe(t){let e=one.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=dne(t);return one.set(t,{mtime:r.mtimeMs,instance:o}),o}function Df(t,{cachingStrategy:e=2}={}){switch(e){case 0:return dne(t);case 1:return xZe(t);case 2:return gne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function kZe(t){return t.length===0?null:t.map(e=>`(${cne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sP(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function yne(t){return typeof t>"u"?t:VI(t)}function CL(t){try{return yne(t)}catch{return null}}function QZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Ene(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,lne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,ane.default)(h,p))||u.push(p);return u}});return n}function FZe(...t){return Ene({},...t)}function wL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Jy(t){return typeof t=="string"?Number.parseInt(t,10):t}var ane,lne,cne,une,Ane,mL,fne,pne,hL,gL,dL,WI,one,mne,ql=Et(()=>{St();qt();ane=$e(Vte()),lne=$e(sne()),cne=$e(Zo()),une=$e(id()),Ane=$e(zn()),mL=ve("stream");fne=Symbol();sl.skip=fne;pne=Symbol();KI.skip=pne;hL=class extends mL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};gL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,une.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=hne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},dL=class extends mL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},WI=eval("require");one=new Map;mne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(mne||{})});var zy,IL,BL,Cne=Et(()=>{zy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(zy||{}),IL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(IL||{}),BL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(BL||{})});var de={};Vt(de,{LogLevel:()=>uP,Style:()=>aP,Type:()=>yt,addLogFilterSupport:()=>XI,applyColor:()=>Vs,applyHyperlink:()=>Zy,applyStyle:()=>yd,json:()=>Ed,jsonOrPretty:()=>NZe,mark:()=>bL,pretty:()=>Mt,prettyField:()=>zu,prettyList:()=>PL,prettyTruncatedLocatorList:()=>cP,stripAnsi:()=>Xy.default,supportsColor:()=>lP,supportsHyperlinks:()=>SL,tuple:()=>_c});function wne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function yd(t,e,r){return t.get("enableColors")&&r&2&&(e=zI.default.bold(e)),e}function Vs(t,e,r){if(!t.get("enableColors"))return e;let o=RZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:DL.level>=3?o[0]:o[1],n=typeof a=="number"?vL.ansi256(a):a.startsWith("#")?vL.hex(a):vL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Zy(t,e,r){return t.get("enableHyperlinks")?TZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Mt(t,e,r){if(e===null)return Vs(t,"null",yt.NULL);if(Object.hasOwn(oP,r))return oP[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Vs(t,e,r)}function PL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Mt(t,a,r)).join(o)}function Ed(t,e){if(t===null)return null;if(Object.hasOwn(oP,e))return oP[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function NZe(t,e,[r,o]){return t?Ed(r,o):Mt(e,r,o)}function bL(t){return{Check:Vs(t,"\u2713","green"),Cross:Vs(t,"\u2718","red"),Question:Vs(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Mt(t,e,yt.CODE)}: ${Mt(t,r,o)}`}function cP(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${qr(t,h)}, `,I=xL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Mt(t,p,yt.NUMBER))].join("")}function XI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let x=I.get("code");typeof x<"u"&&o.set(x,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let R=I.get("pattern");typeof R<"u"&&n.push([Ine.default.matcher(R,{contains:!0}),v])}n.reverse();let u=(I,v,x)=>{if(I===null||I===0)return x;let C=a.size>0||n.length>0?(0,Xy.default)(v):v;if(a.size>0){let R=a.get(C);if(typeof R<"u")return R??x}if(n.length>0){for(let[R,L]of n)if(R(C))return L??x}if(o.size>0){let R=o.get(Wu(I));if(typeof R<"u")return R??x}return x},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,x,C){switch(u(v,x,C)){case"info":A.call(I,v,x);break;case"warning":p.call(I,v??0,x);break;case"error":h.call(I,v??0,x);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var zI,JI,Ine,Xy,Bne,yt,aP,DL,lP,SL,vL,RZe,Po,oP,TZe,uP,jl=Et(()=>{St();zI=$e(IN()),JI=$e(td());qt();Ine=$e(Zo()),Xy=$e(OS()),Bne=ve("util");fS();bo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aP=(e=>(e[e.BOLD=2]="BOLD",e))(aP||{}),DL=JI.default.GITHUB_ACTIONS?{level:2}:zI.default.supportsColor?{level:zI.default.supportsColor.level}:{level:0},lP=DL.level!==0,SL=lP&&!JI.default.GITHUB_ACTIONS&&!JI.default.CIRCLE&&!JI.default.GITLAB,vL=new zI.default.Instance(DL),RZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),Po=t=>t;oP={[yt.ID]:Po({pretty:(t,e)=>typeof e=="number"?Vs(t,`${e}`,yt.NUMBER):Vs(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:Po({pretty:(t,e)=>(0,Bne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:Po({pretty:(t,e)=>Vs(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:Po({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:Po({pretty:(t,e)=>qr(t,e),json:t=>ba(t)}),[yt.DESCRIPTOR]:Po({pretty:(t,e)=>jn(t,e),json:t=>Pa(t)}),[yt.RESOLUTION]:Po({pretty:(t,{descriptor:e,locator:r})=>ZI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Pa(t),locator:e!==null?ba(e):null})}),[yt.DEPENDENT]:Po({pretty:(t,{locator:e,descriptor:r})=>kL(t,e,r),json:({locator:t,descriptor:e})=>({locator:ba(t),descriptor:Pa(e)})}),[yt.PACKAGE_EXTENSION]:Po({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Vs(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:Po({pretty:(t,e)=>(t.get(e),Zy(t,Vs(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:Po({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:Po({pretty:(t,e)=>Vs(t,wne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:Po({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Vs(t,`${r} ${wne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:Po({pretty:(t,e)=>Vs(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:Po({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:Po({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Mt(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>yd(t,a,2)),e),json:t=>t})};TZe=!!process.env.KONSOLE_VERSION;uP=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uP||{})});var vne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.splitWhen=$y.flatten=void 0;function LZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}$y.flatten=LZe;function OZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}$y.splitWhen=OZe});var Dne=_(AP=>{"use strict";Object.defineProperty(AP,"__esModule",{value:!0});AP.isEnoentCodeError=void 0;function MZe(t){return t.code==="ENOENT"}AP.isEnoentCodeError=MZe});var Sne=_(fP=>{"use strict";Object.defineProperty(fP,"__esModule",{value:!0});fP.createDirentFromStats=void 0;var QL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function UZe(t,e){return new QL(t,e)}fP.createDirentFromStats=UZe});var Pne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var _Ze=ve("path"),HZe=2,qZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function jZe(t){return t.replace(/\\/g,"/")}Xu.unixify=jZe;function GZe(t,e){return _Ze.resolve(t,e)}Xu.makeAbsolute=GZe;function YZe(t){return t.replace(qZe,"\\$2")}Xu.escape=YZe;function WZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(HZe)}return t}Xu.removeLeadingDotSegment=WZe});var xne=_((PTt,bne)=>{bne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Fne=_((bTt,Qne)=>{var KZe=xne(),kne={"{":"}","(":")","[":"]"},VZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=kne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},JZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var zZe=Fne(),XZe=ve("path").posix.dirname,ZZe=ve("os").platform()==="win32",FL="/",$Ze=/\\/g,e$e=/[\{\[].*[\}\]]$/,t$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,r$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Rne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&ZZe&&e.indexOf(FL)<0&&(e=e.replace($Ze,FL)),e$e.test(e)&&(e+=FL),e+="a";do e=XZe(e);while(zZe(e)||t$e.test(e));return e.replace(r$e,"$1")}});var qne=_(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.matchAny=jr.convertPatternsToRe=jr.makeRe=jr.getPatternParts=jr.expandBraceExpansion=jr.expandPatternsWithBraceExpansion=jr.isAffectDepthOfReadingPattern=jr.endsWithSlashGlobStar=jr.hasGlobStar=jr.getBaseDirectory=jr.isPatternRelatedToParentDirectory=jr.getPatternsOutsideCurrentDirectory=jr.getPatternsInsideCurrentDirectory=jr.getPositivePatterns=jr.getNegativePatterns=jr.isPositivePattern=jr.isNegativePattern=jr.convertToNegativePattern=jr.convertToPositivePattern=jr.isDynamicPattern=jr.isStaticPattern=void 0;var n$e=ve("path"),i$e=Tne(),RL=Zo(),Nne="**",s$e="\\",o$e=/[*?]|^!/,a$e=/\[[^[]*]/,l$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,c$e=/[!*+?@]\([^(]*\)/,u$e=/,|\.\./;function Lne(t,e={}){return!One(t,e)}jr.isStaticPattern=Lne;function One(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(s$e)||o$e.test(t)||a$e.test(t)||l$e.test(t)||e.extglob!==!1&&c$e.test(t)||e.braceExpansion!==!1&&A$e(t))}jr.isDynamicPattern=One;function A$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return u$e.test(o)}function f$e(t){return pP(t)?t.slice(1):t}jr.convertToPositivePattern=f$e;function p$e(t){return"!"+t}jr.convertToNegativePattern=p$e;function pP(t){return t.startsWith("!")&&t[1]!=="("}jr.isNegativePattern=pP;function Mne(t){return!pP(t)}jr.isPositivePattern=Mne;function h$e(t){return t.filter(pP)}jr.getNegativePatterns=h$e;function g$e(t){return t.filter(Mne)}jr.getPositivePatterns=g$e;function d$e(t){return t.filter(e=>!TL(e))}jr.getPatternsInsideCurrentDirectory=d$e;function m$e(t){return t.filter(TL)}jr.getPatternsOutsideCurrentDirectory=m$e;function TL(t){return t.startsWith("..")||t.startsWith("./..")}jr.isPatternRelatedToParentDirectory=TL;function y$e(t){return i$e(t,{flipBackslashes:!1})}jr.getBaseDirectory=y$e;function E$e(t){return t.includes(Nne)}jr.hasGlobStar=E$e;function Une(t){return t.endsWith("/"+Nne)}jr.endsWithSlashGlobStar=Une;function C$e(t){let e=n$e.basename(t);return Une(t)||Lne(e)}jr.isAffectDepthOfReadingPattern=C$e;function w$e(t){return t.reduce((e,r)=>e.concat(_ne(r)),[])}jr.expandPatternsWithBraceExpansion=w$e;function _ne(t){return RL.braces(t,{expand:!0,nodupes:!0})}jr.expandBraceExpansion=_ne;function I$e(t,e){let{parts:r}=RL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}jr.getPatternParts=I$e;function Hne(t,e){return RL.makeRe(t,e)}jr.makeRe=Hne;function B$e(t,e){return t.map(r=>Hne(r,e))}jr.convertPatternsToRe=B$e;function v$e(t,e){return e.some(r=>r.test(t))}jr.matchAny=v$e});var Wne=_((QTt,Yne)=>{"use strict";var D$e=ve("stream"),jne=D$e.PassThrough,S$e=Array.prototype.slice;Yne.exports=P$e;function P$e(){let t=[],e=S$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=jne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function x(C){function R(){C.removeListener("merge2UnpipeEnd",R),C.removeListener("end",R),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",R),C.on("end",R),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hP,"__esModule",{value:!0});hP.merge=void 0;var b$e=Wne();function x$e(t){let e=b$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Kne(t)),e.once("end",()=>Kne(t)),e}hP.merge=x$e;function Kne(t){t.forEach(e=>e.emit("close"))}});var Jne=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.isEmpty=eE.isString=void 0;function k$e(t){return typeof t=="string"}eE.isString=k$e;function Q$e(t){return t===""}eE.isEmpty=Q$e});var Sf=_(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.string=xo.stream=xo.pattern=xo.path=xo.fs=xo.errno=xo.array=void 0;var F$e=vne();xo.array=F$e;var R$e=Dne();xo.errno=R$e;var T$e=Sne();xo.fs=T$e;var N$e=Pne();xo.path=N$e;var L$e=qne();xo.pattern=L$e;var O$e=Vne();xo.stream=O$e;var M$e=Jne();xo.string=M$e});var Zne=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Sf();function U$e(t,e){let r=zne(t),o=Xne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=NL(a,o,!1),A=NL(n,o,!0);return u.concat(A)}ko.generate=U$e;function NL(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=LL(a),A=LL(n);return o.push(...OL(u,e,r)),"."in A?o.push(ML(".",n,e,r)):o.push(...OL(A,e,r)),o}ko.convertPatternsToTasks=NL;function zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=zne;function Xne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=Xne;function LL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=LL;function OL(t,e,r){return Object.keys(t).map(o=>ML(o,t[o],e,r))}ko.convertPatternGroupsToTasks=OL;function ML(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=ML});var eie=_(tE=>{"use strict";Object.defineProperty(tE,"__esModule",{value:!0});tE.removeDuplicateSlashes=tE.transform=void 0;var _$e=/(?!^)\/{2,}/g;function H$e(t){return t.map(e=>$ne(e))}tE.transform=H$e;function $ne(t){return t.replace(_$e,"/")}tE.removeDuplicateSlashes=$ne});var rie=_(gP=>{"use strict";Object.defineProperty(gP,"__esModule",{value:!0});gP.read=void 0;function q$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){tie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){UL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){tie(r,n);return}UL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),UL(r,u)})})}gP.read=q$e;function tie(t,e){t(e)}function UL(t,e){t(null,e)}});var nie=_(dP=>{"use strict";Object.defineProperty(dP,"__esModule",{value:!0});dP.read=void 0;function j$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dP.read=j$e});var iie=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.createFileSystemAdapter=Xp.FILE_SYSTEM_ADAPTER=void 0;var mP=ve("fs");Xp.FILE_SYSTEM_ADAPTER={lstat:mP.lstat,stat:mP.stat,lstatSync:mP.lstatSync,statSync:mP.statSync};function G$e(t){return t===void 0?Xp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Xp.FILE_SYSTEM_ADAPTER),t)}Xp.createFileSystemAdapter=G$e});var sie=_(HL=>{"use strict";Object.defineProperty(HL,"__esModule",{value:!0});var Y$e=iie(),_L=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Y$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};HL.default=_L});var Cd=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.statSync=Zp.stat=Zp.Settings=void 0;var oie=rie(),W$e=nie(),qL=sie();Zp.Settings=qL.default;function K$e(t,e,r){if(typeof e=="function"){oie.read(t,jL(),e);return}oie.read(t,jL(e),r)}Zp.stat=K$e;function V$e(t,e){let r=jL(e);return W$e.read(t,r)}Zp.statSync=V$e;function jL(t={}){return t instanceof qL.default?t:new qL.default(t)}});var lie=_((qTt,aie)=>{aie.exports=J$e;function J$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var YL=_(EP=>{"use strict";Object.defineProperty(EP,"__esModule",{value:!0});EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yP=process.versions.node.split(".");if(yP[0]===void 0||yP[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var cie=Number.parseInt(yP[0],10),z$e=Number.parseInt(yP[1],10),uie=10,X$e=10,Z$e=cie>uie,$$e=cie===uie&&z$e>=X$e;EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=Z$e||$$e});var Aie=_(CP=>{"use strict";Object.defineProperty(CP,"__esModule",{value:!0});CP.createDirentFromStats=void 0;var WL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function eet(t,e){return new WL(t,e)}CP.createDirentFromStats=eet});var KL=_(wP=>{"use strict";Object.defineProperty(wP,"__esModule",{value:!0});wP.fs=void 0;var tet=Aie();wP.fs=tet});var VL=_(IP=>{"use strict";Object.defineProperty(IP,"__esModule",{value:!0});IP.joinPathSegments=void 0;function ret(t,e,r){return t.endsWith(r)?t+e:t+r+e}IP.joinPathSegments=ret});var mie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var net=Cd(),fie=lie(),iet=YL(),pie=KL(),hie=VL();function set(t,e,r){if(!e.stats&&iet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){gie(t,e,r);return}die(t,e,r)}$p.read=set;function gie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:hie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){JL(r,n);return}let u=n.map(A=>oet(A,e));fie(u,(A,p)=>{if(A!==null){BP(r,A);return}JL(r,p)})})}$p.readdirWithFileTypes=gie;function oet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=pie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function die(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(u=>{let A=hie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{net.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:pie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});fie(n,(u,A)=>{if(u!==null){BP(r,u);return}JL(r,A)})})}$p.readdir=die;function BP(t,e){t(e)}function JL(t,e){t(null,e)}});var Iie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.readdir=eh.readdirWithFileTypes=eh.read=void 0;var aet=Cd(),cet=YL(),yie=KL(),Eie=VL();function uet(t,e){return!e.stats&&cet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Cie(t,e):wie(t,e)}eh.read=uet;function Cie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Eie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=yie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}eh.readdirWithFileTypes=Cie;function wie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Eie.joinPathSegments(t,o,e.pathSegmentSeparator),n=aet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:yie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}eh.readdir=wie});var Bie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.createFileSystemAdapter=th.FILE_SYSTEM_ADAPTER=void 0;var rE=ve("fs");th.FILE_SYSTEM_ADAPTER={lstat:rE.lstat,stat:rE.stat,lstatSync:rE.lstatSync,statSync:rE.statSync,readdir:rE.readdir,readdirSync:rE.readdirSync};function Aet(t){return t===void 0?th.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},th.FILE_SYSTEM_ADAPTER),t)}th.createFileSystemAdapter=Aet});var vie=_(XL=>{"use strict";Object.defineProperty(XL,"__esModule",{value:!0});var fet=ve("path"),pet=Cd(),het=Bie(),zL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=het.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fet.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new pet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XL.default=zL});var vP=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.Settings=rh.scandirSync=rh.scandir=void 0;var Die=mie(),get=Iie(),ZL=vie();rh.Settings=ZL.default;function det(t,e,r){if(typeof e=="function"){Die.read(t,$L(),e);return}Die.read(t,$L(e),r)}rh.scandir=det;function met(t,e){let r=$L(e);return get.read(t,r)}rh.scandirSync=met;function $L(t={}){return t instanceof ZL.default?t:new ZL.default(t)}});var Pie=_((ZTt,Sie)=>{"use strict";function yet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Sie.exports=yet});var xie=_(($Tt,eO)=>{"use strict";var Eet=Pie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=Eet(Cet),a=null,n=null,u=0,A=null,p={push:R,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:x,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:ae};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var fe=a,ce=0;fe;)fe=fe.next,ce++;return ce}function v(){for(var fe=a,ce=[];fe;)ce.push(fe.value),fe=fe.next;return ce}function x(){if(!!p.paused){p.paused=!1;for(var fe=0;fe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function Iet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=Iet;function Bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=Bet;function vet(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=vet;function Det(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Det});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var Pet=DP(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=Pet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var bet=ve("events"),xet=vP(),ket=xie(),SP=DP(),Qet=nO(),iO=class extends Qet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=xet.scandir,this._emitter=new bet.EventEmitter,this._queue=ket(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!SP.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=SP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SP.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&SP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var kie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Fet=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Fet.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Ret(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Tet(e,this._storage)}),this._reader.read()}};lO.default=aO;function Ret(t,e){t(e)}function Tet(t,e){t(null,e)}});var Qie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Net=ve("stream"),Let=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Let.default(this._root,this._settings),this._stream=new Net.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};uO.default=cO});var Fie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var Oet=vP(),PP=DP(),Met=nO(),AO=class extends Met.default{constructor(){super(...arguments),this._scandir=Oet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!PP.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=PP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PP.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&PP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Rie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var Uet=Fie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Uet.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Tie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var _et=ve("path"),Het=vP(),gO=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,_et.sep),this.fsScandirSettings=new Het.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};dO.default=gO});var xP=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Nie=kie(),qet=Qie(),jet=Rie(),mO=Tie();$u.Settings=mO.default;function Get(t,e,r){if(typeof e=="function"){new Nie.default(t,bP()).read(e);return}new Nie.default(t,bP(e)).read(r)}$u.walk=Get;function Yet(t,e){let r=bP(e);return new jet.default(t,r).read()}$u.walkSync=Yet;function Wet(t,e){let r=bP(e);return new qet.default(t,r).read()}$u.walkStream=Wet;function bP(t={}){return t instanceof mO.default?t:new mO.default(t)}});var kP=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var Ket=ve("path"),Vet=Cd(),Lie=Sf(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Vet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Ket.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Lie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Lie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Jet=ve("stream"),zet=Cd(),Xet=xP(),Zet=kP(),CO=class extends Zet.default{constructor(){super(...arguments),this._walkStream=Xet.walkStream,this._stat=zet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Jet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Oie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var $et=xP(),ett=kP(),ttt=IO(),BO=class extends ett.default{constructor(){super(...arguments),this._walkAsync=$et.walk,this._readerStream=new ttt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Mie=_(SO=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var nE=Sf(),DO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=nE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return nE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>nE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:nE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return nE.array.splitWhen(e,r=>r.dynamic&&nE.pattern.hasGlobStar(r.pattern))}};SO.default=DO});var Uie=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});var rtt=Mie(),PO=class extends rtt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};bO.default=PO});var _ie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var QP=Sf(),ntt=Uie(),xO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ntt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QP.pattern.isAffectDepthOfReadingPattern);return QP.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QP.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QP.pattern.matchAny(e,r)}};kO.default=xO});var Hie=_(FO=>{"use strict";Object.defineProperty(FO,"__esModule",{value:!0});var wd=Sf(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=wd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=wd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=wd.path.makeAbsolute(this._settings.cwd,e);return wd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=wd.path.removeLeadingDotSegment(e),n=wd.pattern.matchAny(a,r);return!n&&o?wd.pattern.matchAny(a+"/",r):n}};FO.default=QO});var qie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var itt=Sf(),RO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return itt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=RO});var Gie=_(LO=>{"use strict";Object.defineProperty(LO,"__esModule",{value:!0});var jie=Sf(),NO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=jie.path.makeAbsolute(this._settings.cwd,r),r=jie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};LO.default=NO});var FP=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var stt=ve("path"),ott=_ie(),att=Hie(),ltt=qie(),ctt=Gie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new ltt.default(this._settings),this.entryFilter=new att.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new ott.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new ctt.default(this._settings)}_getRootDirectory(e){return stt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};MO.default=OO});var Yie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var utt=Oie(),Att=FP(),UO=class extends Att.default{constructor(){super(...arguments),this._reader=new utt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Wie=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var ftt=ve("stream"),ptt=IO(),htt=FP(),HO=class extends htt.default{constructor(){super(...arguments),this._reader=new ptt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new ftt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};qO.default=HO});var Kie=_(GO=>{"use strict";Object.defineProperty(GO,"__esModule",{value:!0});var gtt=Cd(),dtt=xP(),mtt=kP(),jO=class extends mtt.default{constructor(){super(...arguments),this._walkSync=dtt.walkSync,this._statSync=gtt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};GO.default=jO});var Vie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var ytt=Kie(),Ett=FP(),YO=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Jie=_(sE=>{"use strict";Object.defineProperty(sE,"__esModule",{value:!0});sE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var iE=ve("fs"),Ctt=ve("os"),wtt=Math.max(Ctt.cpus().length,1);sE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:iE.lstat,lstatSync:iE.lstatSync,stat:iE.stat,statSync:iE.statSync,readdir:iE.readdir,readdirSync:iE.readdirSync};var KO=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,wtt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},sE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};sE.default=KO});var RP=_((vNt,Zie)=>{"use strict";var zie=Zne(),Xie=eie(),Itt=Yie(),Btt=Wie(),vtt=Vie(),VO=Jie(),Id=Sf();async function JO(t,e){oE(t);let r=zO(t,Itt.default,e),o=await Promise.all(r);return Id.array.flatten(o)}(function(t){function e(u,A){oE(u);let p=zO(u,vtt.default,A);return Id.array.flatten(p)}t.sync=e;function r(u,A){oE(u);let p=zO(u,Btt.default,A);return Id.stream.merge(p)}t.stream=r;function o(u,A){oE(u);let p=Xie.transform([].concat(u)),h=new VO.default(A);return zie.generate(p,h)}t.generateTasks=o;function a(u,A){oE(u);let p=new VO.default(A);return Id.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return oE(u),Id.path.escape(u)}t.escapePath=n})(JO||(JO={}));function zO(t,e,r){let o=Xie.transform([].concat(t)),a=new VO.default(r),n=zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function oE(t){if(![].concat(t).every(o=>Id.string.isString(o)&&!Id.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Zie.exports=JO});var wn={};Vt(wn,{checksumFile:()=>NP,checksumPattern:()=>LP,makeHash:()=>zs});function zs(...t){let e=(0,TP.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function NP(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,TP.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function LP(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,TP.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var TP,XO,nh=Et(()=>{St();TP=ve("crypto"),XO=$e(RP())});var W={};Vt(W,{areDescriptorsEqual:()=>nse,areIdentsEqual:()=>n1,areLocatorsEqual:()=>i1,areVirtualPackagesEquivalent:()=>Rtt,bindDescriptor:()=>Qtt,bindLocator:()=>Ftt,convertDescriptorToLocator:()=>OP,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>btt,convertToIdent:()=>Ptt,convertToManifestRange:()=>jtt,copyPackage:()=>e1,devirtualizeDescriptor:()=>t1,devirtualizeLocator:()=>r1,ensureDevirtualizedDescriptor:()=>xtt,ensureDevirtualizedLocator:()=>ktt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>qP,isVirtualDescriptor:()=>bf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>_P,parseDescriptor:()=>ih,parseFileStyleRange:()=>Htt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Bd,prettyDependent:()=>kL,prettyDescriptor:()=>jn,prettyIdent:()=>cs,prettyLocator:()=>qr,prettyLocatorNoColors:()=>xL,prettyRange:()=>cE,prettyReference:()=>o1,prettyResolution:()=>ZI,prettyWorkspace:()=>a1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>lE,sortDescriptors:()=>uE,stringifyDescriptor:()=>Pa,stringifyIdent:()=>fn,stringifyLocator:()=>ba,tryParseDescriptor:()=>s1,tryParseIdent:()=>ise,tryParseLocator:()=>UP,tryParseRange:()=>_tt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ptt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OP(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function btt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function e1(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Qs(t,`virtual:${e}#${t.reference}`))}function bf(t){return t.range.startsWith($I)}function Hc(t){return t.reference.startsWith($I)}function t1(t){if(!bf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(MP,""))}function r1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(MP,""))}function xtt(t){return bf(t)?In(t,t.range.replace(MP,"")):t}function ktt(t){return Hc(t)?Qs(t,t.reference.replace(MP,"")):t}function Qtt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${aE.default.stringify(e)}`)}function Ftt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${aE.default.stringify(e)}`)}function n1(t,e){return t.identHash===e.identHash}function nse(t,e){return t.descriptorHash===e.descriptorHash}function i1(t,e){return t.locatorHash===e.locatorHash}function Rtt(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!n1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!nse(r,o))return!1}return!0}function Js(t){let e=ise(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ise(t){let e=t.match(Ttt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function ih(t,e=!1){let r=s1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function s1(t,e=!1){let r=e?t.match(Ntt):t.match(Ltt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=UP(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function UP(t,e=!1){let r=e?t.match(Ott):t.match(Mtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Bd(t,e){let r=t.match(Utt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?aE.default.parse(n):n,A=typeof r[4]<"u"?aE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function _tt(t,e){try{return Bd(t,e)}catch{return null}}function Htt(t,{protocol:e}){let{selector:r,params:o}=Bd(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function $ie(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function qtt(t){return t===null?!1:Object.entries(t).length>0}function _P({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${$ie(e)}#`),a+=$ie(r),qtt(o)&&(a+=`::${aE.default.stringify(o)}`),a}function jtt(t){let{params:e,protocol:r,source:o,selector:a}=Bd(t);for(let n in e)n.startsWith("__")&&delete e[n];return _P({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Pa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ba(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function lE(t){let{protocol:e,selector:r}=Bd(t.reference),o=e!==null?e.replace(Gtt,""):"exotic",a=ese.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Mt(t,`@${e.scope}/`,yt.SCOPE)}${Mt(t,e.name,yt.NAME)}`:`${Mt(t,e.name,yt.NAME)}`}function HP(t){if(t.startsWith($I)){let e=HP(t.substring(t.indexOf("#")+1)),r=t.substring($I.length,$I.length+Dtt);return`${e} [${r}]`}else return t.replace(Ytt,"?[...]")}function cE(t,e){return`${Mt(t,HP(e),yt.RANGE)}`}function jn(t,e){return`${cs(t,e)}${Mt(t,"@",yt.RANGE)}${cE(t,e.range)}`}function o1(t,e){return`${Mt(t,HP(e),yt.REFERENCE)}`}function qr(t,e){return`${cs(t,e)}${Mt(t,"@",yt.REFERENCE)}${o1(t,e.reference)}`}function xL(t){return`${fn(t)}@${HP(t.reference)}`}function uE(t){return ks(t,[e=>fn(e),e=>e.range])}function a1(t,e){return cs(t,e.anchoredLocator)}function ZI(t,e,r){let o=bf(e)?t1(e):e;return r===null?`${jn(t,o)} \u2192 ${bL(t).Cross}`:o.identHash===r.identHash?`${jn(t,o)} \u2192 ${o1(t,r.reference)}`:`${jn(t,o)} \u2192 ${qr(t,r)}`}function kL(t,e,r){return r===null?`${qr(t,e)}`:`${qr(t,e)} (via ${cE(t,r.range)})`}function nM(t){return`node_modules/${fn(t)}`}function qP(t,e){return t.conditions?Stt(t.conditions,r=>{let[,o,a]=r.match(rse),n=e[o];return n?n.includes(a):!0}):!0}var aE,ese,tse,$I,Dtt,rse,Stt,MP,Ttt,Ntt,Ltt,Ott,Mtt,Utt,Gtt,Ytt,bo=Et(()=>{aE=$e(ve("querystring")),ese=$e(zn()),tse=$e(eX());jl();nh();ql();bo();$I="virtual:",Dtt=5,rse=/(os|cpu|libc)=([a-z0-9_-]+)/,Stt=(0,tse.makeParser)(rse);MP=/^[^#]*#/;Ttt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ntt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Ltt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Ott=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Utt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Gtt=/:$/;Ytt=/\?.*/});var sse,ose=Et(()=>{bo();sse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=a1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var l1,Xn,vd=Et(()=>{l1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(l1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(l1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(l1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=l1;Xn.protocol="workspace:"});var kr={};Vt(kr,{SemVer:()=>Ase.SemVer,clean:()=>Ktt,getComparator:()=>cse,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>kf,simplifyRanges:()=>sM,stringifyComparator:()=>use,validRange:()=>xa});function kf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=ase.get(o);if(typeof a>"u")try{a=new sh.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ase.set(o,a||null)}else if(a===null)return!1;let n;try{n=new sh.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function xa(t){if(t.indexOf(":")!==-1)return null;let e=lse.get(t);if(typeof e<"u")return e;try{e=new sh.default.Range(t)}catch{e=null}return lse.set(t,e),e}function Ktt(t){let e=Wtt.exec(t);return e?e[1]:null}function cse(t){if(t.semver===sh.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?sh.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?sh.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=sh.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function use(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function sM(t){let e=t.map(o=>xa(o).set.map(a=>a.map(n=>cse(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>use(o)).join(" || ")}var sh,Ase,ase,lse,Wtt,Qf=Et(()=>{sh=$e(zn()),Ase=$e(zn()),ase=new Map;lse=new Map;Wtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function fse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function pse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function jP(t,{yamlCompatibilityMode:e}){return e?CL(t):typeof t>"u"||typeof t=="boolean"?t:null}function hse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?hse(t,e[0]):`(${e.map(r=>hse(t,r)).join(" | ")})`}var gse,AE,Ot,fE=Et(()=>{St();Nl();gse=$e(zn());vd();ql();Qf();bo();AE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Tn}={}){let o=V.join(e,"package.json");try{return await AE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await AE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new AE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new AE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(pse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=fse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(pse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=fse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!xa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=ih(n),p=this.ensureDependencyMeta(A),h=jP(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=jP(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=jP(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=ih(n),p=this.ensurePeerDependencyMeta(A),h=jP(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:MD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!gse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...uE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...uE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...uE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...uE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Pa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[UD(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=AE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var mse=_((UNt,dse)=>{var Vtt=_l(),Jtt=function(){return Vtt.Date.now()};dse.exports=Jtt});var Ese=_((_Nt,yse)=>{var ztt=/\s/;function Xtt(t){for(var e=t.length;e--&&ztt.test(t.charAt(e)););return e}yse.exports=Xtt});var wse=_((HNt,Cse)=>{var Ztt=Ese(),$tt=/^\s+/;function ert(t){return t&&t.slice(0,Ztt(t)+1).replace($tt,"")}Cse.exports=ert});var pE=_((qNt,Ise)=>{var trt=hd(),rrt=Ju(),nrt="[object Symbol]";function irt(t){return typeof t=="symbol"||rrt(t)&&trt(t)==nrt}Ise.exports=irt});var Sse=_((jNt,Dse)=>{var srt=wse(),Bse=il(),ort=pE(),vse=0/0,art=/^[-+]0x[0-9a-f]+$/i,lrt=/^0b[01]+$/i,crt=/^0o[0-7]+$/i,urt=parseInt;function Art(t){if(typeof t=="number")return t;if(ort(t))return vse;if(Bse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=srt(t);var r=lrt.test(t);return r||crt.test(t)?urt(t.slice(2),r?2:8):art.test(t)?vse:+t}Dse.exports=Art});var xse=_((GNt,bse)=>{var frt=il(),aM=mse(),Pse=Sse(),prt="Expected a function",hrt=Math.max,grt=Math.min;function drt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(prt);e=Pse(e)||0,frt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?hrt(Pse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function x(ce){var me=o,he=a;return o=a=void 0,h=ce,u=t.apply(he,me),u}function C(ce){return h=ce,A=setTimeout(U,e),E?x(ce):u}function R(ce){var me=ce-p,he=ce-h,Be=e-me;return I?grt(Be,n-he):Be}function L(ce){var me=ce-p,he=ce-h;return p===void 0||me>=e||me<0||I&&he>=n}function U(){var ce=aM();if(L(ce))return J(ce);A=setTimeout(U,R(ce))}function J(ce){return A=void 0,v&&o?x(ce):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function ae(){return A===void 0?u:J(aM())}function fe(){var ce=aM(),me=L(ce);if(o=arguments,a=this,p=ce,me){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),x(p)}return A===void 0&&(A=setTimeout(U,e)),u}return fe.cancel=te,fe.flush=ae,fe}bse.exports=drt});var lM=_((YNt,kse)=>{var mrt=xse(),yrt=il(),Ert="Expected a function";function Crt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(Ert);return yrt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),mrt(t,e,{leading:o,maxWait:e,trailing:a})}kse.exports=Crt});function Irt(t){return typeof t.reportCode<"u"}var Qse,Fse,Rse,wrt,zt,Xs,Yl=Et(()=>{Qse=$e(lM()),Fse=ve("stream"),Rse=ve("string_decoder"),wrt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Qse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/wrt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Irt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Fse.PassThrough,o=new Rse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var hE,cM=Et(()=>{Yl();bo();hE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${qr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Dd,uM=Et(()=>{bo();Dd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${jn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${qr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var gE,AM=Et(()=>{St();bo();gE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return lE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:V});return{...r,packageFs:p}}}});var dE,c1,Tse=Et(()=>{dE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(dE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(dE.protocol)}supportsDescriptor(e,r){return dE.isVirtualDescriptor(e)}supportsLocator(e,r){return dE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},c1=dE;c1.protocol="virtual:"});var mE,fM=Et(()=>{St();vd();mE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function u1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Nse(t){return typeof t>"u"?3:u1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function vrt(t){return u1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function Drt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!vrt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Lse(t,e){let r=u1(t)&&gM(t,e)?t[e]:void 0;return Drt(r)}function yE(t,e){return[t,e,Ose]}function dM(t){return Array.isArray(t)?t[2]===Ose:!1}function pM(t,e){if(u1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return yE(e,r)}return Array.isArray(t)?yE(e,t.map(r=>pM(r,e))):yE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:x,value:C}=Lse(v,r),R=Nse(C);if(R!==3){if(n??=R,R!==n||x==="hardReset"){p=A;break}if(R===2)return yE(I,C);if(u.unshift([I,C]),x==="reset"){p=E;break}x==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return yE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>pM(v,E)))));case 0:{let E=Object.assign({},...u.map(([,R])=>R)),I=Object.keys(E),v={},x=t.map(([R,L])=>[R,Lse(L,r).value]),C=Brt(x,([R,L])=>{let U=Nse(L);return U!==0&&U!==3});if(C!==-1){let R=x.slice(C+1);for(let L of I)v[L]=hM(R,e,L,0,R.length)}else for(let R of I)v[R]=hM(x,e,R,p,x.length);return yE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Mse(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function A1(t){return dM(t)?t[1]:t}function GP(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>GP(r));if(u1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=GP(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var Brt,Ose,Use=Et(()=>{Brt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Ose=Symbol()});var YP={};Vt(YP,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>EE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,yM.homedir)(),"AppData","Local"));return V.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return V.resolve(t,"yarn/berry")}return V.resolve(EE(),".yarn/berry")}function EE(){return ue.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=V.relative(e,t);return r&&!r.startsWith("..")&&!V.isAbsolute(r)}var yM,WP=Et(()=>{St();yM=ve("os")});var jse=_(CE=>{"use strict";var iLt=ve("net"),Prt=ve("tls"),wM=ve("http"),_se=ve("https"),brt=ve("events"),sLt=ve("assert"),xrt=ve("util");CE.httpOverHttp=krt;CE.httpsOverHttp=Qrt;CE.httpOverHttps=Frt;CE.httpsOverHttps=Rrt;function krt(t){var e=new Ff(t);return e.request=wM.request,e}function Qrt(t){var e=new Ff(t);return e.request=wM.request,e.createSocket=Hse,e.defaultPort=443,e}function Frt(t){var e=new Ff(t);return e.request=_se.request,e}function Rrt(t){var e=new Ff(t);return e.request=_se.request,e.createSocket=Hse,e.defaultPort=443,e}function Ff(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=qse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Ff.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),oh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,x){process.nextTick(function(){h(I,v,x)})}function h(I,v,x){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){oh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(x.length>0){oh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return oh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),oh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Ff.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function Hse(t,e){var r=this;Ff.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Prt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function qse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{Gse.exports=jse()});var Tf=_((Rf,KP)=>{"use strict";Object.defineProperty(Rf,"__esModule",{value:!0});var Wse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Trt(t){return Wse.includes(t)}var Nrt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Wse];function Lrt(t){return Nrt.includes(t)}var Ort=["null","undefined","string","number","bigint","boolean","symbol"];function Mrt(t){return Ort.includes(t)}function wE(t){return e=>typeof e===t}var{toString:Kse}=Object.prototype,f1=t=>{let e=Kse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&be.domElement(t))return"HTMLElement";if(Lrt(e))return e},ei=t=>e=>f1(e)===t;function be(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(be.observable(t))return"Observable";if(be.array(t))return"Array";if(be.buffer(t))return"Buffer";let e=f1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}be.undefined=wE("undefined");be.string=wE("string");var Urt=wE("number");be.number=t=>Urt(t)&&!be.nan(t);be.bigint=wE("bigint");be.function_=wE("function");be.null_=t=>t===null;be.class_=t=>be.function_(t)&&t.toString().startsWith("class ");be.boolean=t=>t===!0||t===!1;be.symbol=wE("symbol");be.numericString=t=>be.string(t)&&!be.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));be.array=(t,e)=>Array.isArray(t)?be.function_(e)?t.every(e):!0:!1;be.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};be.nullOrUndefined=t=>be.null_(t)||be.undefined(t);be.object=t=>!be.null_(t)&&(typeof t=="object"||be.function_(t));be.iterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};be.asyncIterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};be.generator=t=>be.iterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.asyncGenerator=t=>be.asyncIterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.nativePromise=t=>ei("Promise")(t);var _rt=t=>{var e,r;return be.function_((e=t)===null||e===void 0?void 0:e.then)&&be.function_((r=t)===null||r===void 0?void 0:r.catch)};be.promise=t=>be.nativePromise(t)||_rt(t);be.generatorFunction=ei("GeneratorFunction");be.asyncGeneratorFunction=t=>f1(t)==="AsyncGeneratorFunction";be.asyncFunction=t=>f1(t)==="AsyncFunction";be.boundFunction=t=>be.function_(t)&&!t.hasOwnProperty("prototype");be.regExp=ei("RegExp");be.date=ei("Date");be.error=ei("Error");be.map=t=>ei("Map")(t);be.set=t=>ei("Set")(t);be.weakMap=t=>ei("WeakMap")(t);be.weakSet=t=>ei("WeakSet")(t);be.int8Array=ei("Int8Array");be.uint8Array=ei("Uint8Array");be.uint8ClampedArray=ei("Uint8ClampedArray");be.int16Array=ei("Int16Array");be.uint16Array=ei("Uint16Array");be.int32Array=ei("Int32Array");be.uint32Array=ei("Uint32Array");be.float32Array=ei("Float32Array");be.float64Array=ei("Float64Array");be.bigInt64Array=ei("BigInt64Array");be.bigUint64Array=ei("BigUint64Array");be.arrayBuffer=ei("ArrayBuffer");be.sharedArrayBuffer=ei("SharedArrayBuffer");be.dataView=ei("DataView");be.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;be.urlInstance=t=>ei("URL")(t);be.urlString=t=>{if(!be.string(t))return!1;try{return new URL(t),!0}catch{return!1}};be.truthy=t=>Boolean(t);be.falsy=t=>!t;be.nan=t=>Number.isNaN(t);be.primitive=t=>be.null_(t)||Mrt(typeof t);be.integer=t=>Number.isInteger(t);be.safeInteger=t=>Number.isSafeInteger(t);be.plainObject=t=>{if(Kse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};be.typedArray=t=>Trt(f1(t));var Hrt=t=>be.safeInteger(t)&&t>=0;be.arrayLike=t=>!be.nullOrUndefined(t)&&!be.function_(t)&&Hrt(t.length);be.inRange=(t,e)=>{if(be.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(be.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var qrt=1,jrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];be.domElement=t=>be.object(t)&&t.nodeType===qrt&&be.string(t.nodeName)&&!be.plainObject(t)&&jrt.every(e=>e in t);be.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};be.nodeStream=t=>be.object(t)&&be.function_(t.pipe)&&!be.observable(t);be.infinite=t=>t===1/0||t===-1/0;var Vse=t=>e=>be.integer(e)&&Math.abs(e%2)===t;be.evenInteger=Vse(0);be.oddInteger=Vse(1);be.emptyArray=t=>be.array(t)&&t.length===0;be.nonEmptyArray=t=>be.array(t)&&t.length>0;be.emptyString=t=>be.string(t)&&t.length===0;be.nonEmptyString=t=>be.string(t)&&t.length>0;var Grt=t=>be.string(t)&&!/\S/.test(t);be.emptyStringOrWhitespace=t=>be.emptyString(t)||Grt(t);be.emptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length===0;be.nonEmptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length>0;be.emptySet=t=>be.set(t)&&t.size===0;be.nonEmptySet=t=>be.set(t)&&t.size>0;be.emptyMap=t=>be.map(t)&&t.size===0;be.nonEmptyMap=t=>be.map(t)&&t.size>0;be.propertyKey=t=>be.any([be.string,be.number,be.symbol],t);be.formData=t=>ei("FormData")(t);be.urlSearchParams=t=>ei("URLSearchParams")(t);var Jse=(t,e,r)=>{if(!be.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};be.any=(t,...e)=>(be.array(t)?t:[t]).some(o=>Jse(Array.prototype.some,o,e));be.all=(t,...e)=>Jse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${be(u)}\``))].join(", ")}`:`received value of type \`${be(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Rf.assert={undefined:t=>Ht(be.undefined(t),"undefined",t),string:t=>Ht(be.string(t),"string",t),number:t=>Ht(be.number(t),"number",t),bigint:t=>Ht(be.bigint(t),"bigint",t),function_:t=>Ht(be.function_(t),"Function",t),null_:t=>Ht(be.null_(t),"null",t),class_:t=>Ht(be.class_(t),"Class",t),boolean:t=>Ht(be.boolean(t),"boolean",t),symbol:t=>Ht(be.symbol(t),"symbol",t),numericString:t=>Ht(be.numericString(t),"string with a number",t),array:(t,e)=>{Ht(be.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(be.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(be.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(be.object(t),"Object",t),iterable:t=>Ht(be.iterable(t),"Iterable",t),asyncIterable:t=>Ht(be.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(be.generator(t),"Generator",t),asyncGenerator:t=>Ht(be.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(be.nativePromise(t),"native Promise",t),promise:t=>Ht(be.promise(t),"Promise",t),generatorFunction:t=>Ht(be.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(be.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(be.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(be.boundFunction(t),"Function",t),regExp:t=>Ht(be.regExp(t),"RegExp",t),date:t=>Ht(be.date(t),"Date",t),error:t=>Ht(be.error(t),"Error",t),map:t=>Ht(be.map(t),"Map",t),set:t=>Ht(be.set(t),"Set",t),weakMap:t=>Ht(be.weakMap(t),"WeakMap",t),weakSet:t=>Ht(be.weakSet(t),"WeakSet",t),int8Array:t=>Ht(be.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(be.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(be.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(be.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(be.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(be.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(be.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(be.float32Array(t),"Float32Array",t),float64Array:t=>Ht(be.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(be.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(be.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(be.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(be.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(be.dataView(t),"DataView",t),urlInstance:t=>Ht(be.urlInstance(t),"URL",t),urlString:t=>Ht(be.urlString(t),"string with a URL",t),truthy:t=>Ht(be.truthy(t),"truthy",t),falsy:t=>Ht(be.falsy(t),"falsy",t),nan:t=>Ht(be.nan(t),"NaN",t),primitive:t=>Ht(be.primitive(t),"primitive",t),integer:t=>Ht(be.integer(t),"integer",t),safeInteger:t=>Ht(be.safeInteger(t),"integer",t),plainObject:t=>Ht(be.plainObject(t),"plain object",t),typedArray:t=>Ht(be.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(be.arrayLike(t),"array-like",t),domElement:t=>Ht(be.domElement(t),"HTMLElement",t),observable:t=>Ht(be.observable(t),"Observable",t),nodeStream:t=>Ht(be.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(be.infinite(t),"infinite number",t),emptyArray:t=>Ht(be.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(be.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(be.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(be.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(be.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(be.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(be.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(be.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(be.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(be.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(be.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(be.propertyKey(t),"PropertyKey",t),formData:t=>Ht(be.formData(t),"FormData",t),urlSearchParams:t=>Ht(be.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(be.evenInteger(t),"even integer",t),oddInteger:t=>Ht(be.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(be.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(be.inRange(t,e),"in range",t),any:(t,...e)=>Ht(be.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(be.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(be,{class:{value:be.class_},function:{value:be.function_},null:{value:be.null_}});Object.defineProperties(Rf.assert,{class:{value:Rf.assert.class_},function:{value:Rf.assert.function_},null:{value:Rf.assert.null_}});Rf.default=be;KP.exports=be;KP.exports.default=be;KP.exports.assert=Rf.assert});var zse=_((lLt,BM)=>{"use strict";var VP=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},IE=class{static fn(e){return(...r)=>new IE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new VP(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(IE.prototype,Promise.prototype);BM.exports=IE;BM.exports.CancelError=VP});var Xse=_((DM,SM)=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});var Yrt=ve("tls"),vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof Yrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};DM.default=vM;SM.exports=vM;SM.exports.default=vM});var Zse=_((bM,xM)=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var Wrt=Xse(),Krt=Number(process.versions.node.split(".")[0]),PM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Krt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Wrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};bM.default=PM;xM.exports=PM;xM.exports.default=PM});var soe=_((cLt,FM)=>{"use strict";var{V4MAPPED:Vrt,ADDRCONFIG:Jrt,ALL:ioe,promises:{Resolver:$se},lookup:zrt}=ve("dns"),{promisify:kM}=ve("util"),Xrt=ve("os"),BE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),eoe=Symbol("expires"),Zrt=typeof ioe=="number",toe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},$rt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},roe=()=>{let t=!1,e=!1;for(let r of Object.values(Xrt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},ent=t=>Symbol.iterator in t,noe={ttl:!0},tnt={all:!0},JP=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new $se,lookup:u=zrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof $se?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=roe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Vrt&&(Zrt&&r.hints&ioe||a.length===0)?$rt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Jrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,noe),this._resolve6(e,noe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[eoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}ent(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,tnt);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[eoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[BE](r,o))}uninstall(e){if(toe(e),e[BE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[BE],delete e[BE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=roe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};FM.exports=JP;FM.exports.default=JP});var loe=_((uLt,RM)=>{"use strict";var rnt=typeof URL>"u"?ve("url").URL:URL,nnt="text/plain",int="us-ascii",ooe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),snt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(x=>x.trim());return I==="charset"&&(v=v.toLowerCase(),v===int)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==nnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},aoe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return snt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new rnt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];ooe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])ooe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};RM.exports=aoe;RM.exports.default=aoe});var Aoe=_((ALt,uoe)=>{uoe.exports=coe;function coe(t,e){if(t&&e)return coe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var foe=Aoe();TM.exports=foe(zP);TM.exports.strict=foe(poe);zP.proto=zP(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return zP(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return poe(this)},configurable:!0})});function zP(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function poe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var LM=_((pLt,goe)=>{var ont=NM(),ant=function(){},lnt=function(t){return t.setHeader&&typeof t.abort=="function"},cnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},hoe=function(t,e,r){if(typeof e=="function")return hoe(t,null,e);e||(e={}),r=ont(r||ant);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},x=function(){t.req.on("finish",p)};return lnt(t)?(t.on("complete",p),t.on("abort",v),t.req?x():t.on("request",x)):u&&!o&&(t.on("end",A),t.on("close",A)),cnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",x),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};goe.exports=hoe});var yoe=_((hLt,moe)=>{var unt=NM(),Ant=LM(),OM=ve("fs"),p1=function(){},fnt=/^v?\.0/.test(process.version),XP=function(t){return typeof t=="function"},pnt=function(t){return!fnt||!OM?!1:(t instanceof(OM.ReadStream||p1)||t instanceof(OM.WriteStream||p1))&&XP(t.close)},hnt=function(t){return t.setHeader&&XP(t.abort)},gnt=function(t,e,r,o){o=unt(o);var a=!1;t.on("close",function(){a=!0}),Ant(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,pnt(t))return t.close(p1);if(hnt(t))return t.abort();if(XP(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},doe=function(t){t()},dnt=function(t,e){return t.pipe(e)},mnt=function(){var t=Array.prototype.slice.call(arguments),e=XP(t[t.length-1]||p1)&&t.pop()||p1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return gnt(a,u,A,function(p){r||(r=p),p&&o.forEach(doe),!u&&(o.forEach(doe),e(r))})});return t.reduce(dnt)};moe.exports=mnt});var Coe=_((gLt,Eoe)=>{"use strict";var{PassThrough:ynt}=ve("stream");Eoe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new ynt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var woe=_((dLt,vE)=>{"use strict";var Ent=yoe(),Cnt=Coe(),ZP=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function $P(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=Ent(t,Cnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new ZP)})}),o.getBufferedValue()}vE.exports=$P;vE.exports.default=$P;vE.exports.buffer=(t,e)=>$P(t,{...e,encoding:"buffer"});vE.exports.array=(t,e)=>$P(t,{...e,array:!0});vE.exports.MaxBufferError=ZP});var Boe=_((yLt,Ioe)=>{"use strict";var wnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Int=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Bnt=new Set([500,502,503,504]),vnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Dnt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Sd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Snt(t){return t?Bnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Pnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Ioe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Pnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Int.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||wnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)vnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Sd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Sd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Sd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Sd(this._rescc["stale-if-error"]),o=e+Sd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Sd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Sd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Snt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!Dnt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var eb=_((ELt,voe)=>{"use strict";voe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Soe=_((CLt,Doe)=>{"use strict";var bnt=ve("stream").Readable,xnt=eb(),UM=class extends bnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=xnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Doe.exports=UM});var boe=_((wLt,Poe)=>{"use strict";var knt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Poe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(knt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var koe=_((ILt,xoe)=>{"use strict";var Qnt=ve("stream").PassThrough,Fnt=boe(),Rnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Qnt;return Fnt(t,e),t.pipe(e)};xoe.exports=Rnt});var Qoe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Toe=_((vLt,Roe)=>{"use strict";var Tnt=ve("events"),Foe=Qoe(),Nnt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},HM=class extends Tnt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Foe.stringify,deserialize:Foe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=Nnt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Roe.exports=HM});var Ooe=_((SLt,Loe)=>{"use strict";var Lnt=ve("events"),tb=ve("url"),Ont=loe(),Mnt=woe(),qM=Boe(),Noe=Soe(),Unt=eb(),_nt=koe(),Hnt=Toe(),qc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Hnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=jM(tb.parse(r)),r={};else if(r instanceof tb.URL)a=jM(tb.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),x=v.length>0?`?${v.join("?")}`:"";a=jM({...r,pathname:I,search:x})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...qnt(a)},r.headers=Unt(r.headers);let n=new Lnt,u=Ont(tb.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,x,C=new Promise(L=>{x=()=>{v||(v=!0,L())}}),R=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=qM.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Noe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new qM(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=_nt(L),(async()=>{try{let J=Mnt.buffer(L);if(await Promise.race([C,new Promise(ce=>L.once("end",ce))]),v)return;let te=await J,ae={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},fe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(fe=fe?Math.min(fe,I.maxTtl):I.maxTtl),await this.cache.set(A,ae,fe)}catch(J){n.emit("error",new qc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new qc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,R);L.once("error",x),L.once("abort",x),n.emit("request",L)}catch(L){n.emit("error",new qc.RequestError(L))}};return(async()=>{let I=async x=>{await Promise.resolve();let C=x.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(x);let R=qM.fromObject(C.cachePolicy);if(R.satisfiesWithoutRevalidation(x)&&!x.forceRefresh){let L=R.responseHeaders(),U=new Noe(C.statusCode,L,C.body,C.url);U.cachePolicy=R,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,x.headers=R.revalidationHeaders(x),E(x)},v=x=>n.emit("error",new qc.CacheError(x));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(x){r.automaticFailover&&!h&&E(r),n.emit("error",new qc.CacheError(x))}})(),n}}};function qnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function jM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}qc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};qc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Loe.exports=qc});var Uoe=_((xLt,Moe)=>{"use strict";var jnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Moe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(jnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var Hoe=_((kLt,_oe)=>{"use strict";var{Transform:Gnt,PassThrough:Ynt}=ve("stream"),GM=ve("zlib"),Wnt=Uoe();_oe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof GM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Gnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Ynt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?GM.createBrotliDecompress():GM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Wnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((QLt,qoe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};qoe.exports=YM});var VM=_((FLt,Woe)=>{"use strict";var Knt=ve("events"),Vnt=ve("tls"),Jnt=ve("http2"),znt=WM(),ea=Symbol("currentStreamsCount"),joe=Symbol("request"),Wl=Symbol("cachedOriginSet"),DE=Symbol("gracefullyClosing"),Xnt=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],Znt=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},$nt=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Yoe(r)},eit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Yoe(e)},Goe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[DE]=!0,t[ea]===0&&t.close()},tA=class extends Knt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new znt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of Xnt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,x;for(let C of E){let R=C.remoteSettings.maxConcurrentStreams;if(R=R||C[DE]||C.destroyed)continue;x||(I=R),L>v&&(x=C,v=L)}}if(x){if(o.length!==1){for(let{reject:C}of o){let R=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(R)}return}o[0].resolve(x);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=Jnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[DE]=!1;let x=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let R=()=>{if(!(!(u in this.queue)||!x())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&x();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!x())break}}};v.on("origin",()=>{v[Wl]=v.originSet,x()&&(R(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(Znt(U,v,$nt),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),R(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{R(),KM(this.sessions[u],v)})}),v[joe]=v.request,v.request=(L,U)=>{if(v[DE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[joe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=x(),--v[ea],!v.destroyed&&!v.closed&&(eit(this.sessions[u],v),x()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[DE])?v.close():(KM(this.sessions[u],v),R())}}),J}}catch(v){for(let x of o)x.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Vnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Goe({agent:this,isFree:!0})}get busySessions(){return Goe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=DE;Woe.exports={Agent:tA,globalAgent:new tA}});var zM=_((RLt,Koe)=>{"use strict";var{Readable:tit}=ve("stream"),JM=class extends tit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Koe.exports=JM});var XM=_((TLt,Voe)=>{"use strict";Voe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var zoe=_((NLt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var eae=_((MLt,$oe)=>{"use strict";var SE=(t,e,r)=>{$oe.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};SE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});SE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);SE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);SE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);SE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);SE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((ULt,aae)=>{"use strict";var rit=ve("http2"),{Writable:nit}=ve("stream"),{Agent:tae,globalAgent:iit}=VM(),sit=zM(),oit=XM(),ait=zoe(),lit=Zoe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:cit,ERR_HTTP_HEADERS_SENT:rae,ERR_INVALID_HTTP_TOKEN:uit,ERR_HTTP_INVALID_HEADER_VALUE:Ait,ERR_INVALID_CHAR:fit}=eae(),{HTTP2_HEADER_STATUS:nae,HTTP2_HEADER_METHOD:iae,HTTP2_HEADER_PATH:sae,HTTP2_METHOD_CONNECT:pit}=rit.constants,Qo=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),oae=Symbol("options"),rb=Symbol("flushedHeaders"),h1=Symbol("jobs"),hit=/^[\^`\-\w!#$%&*+.|~]+$/,git=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends nit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=oit(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new tae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new tae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=iit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new cit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[h1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[oae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[rb]=!1}get method(){return this[Qo][iae]}set method(e){e&&(this[Qo][iae]=e.toUpperCase())}get path(){return this[Qo][sae]}set path(e){e&&(this[Qo][sae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[h1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[h1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[rb]||this.destroyed)return;this[rb]=!0;let e=this.method===pit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||ait(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new sit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[nae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[nae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[h1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[oae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[rb]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new rae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new rae("set");if(typeof e!="string"||!hit.test(e)&&!lit(e))throw new uit("Header name",e);if(typeof r>"u")throw new Ait(r,e);if(git.test(r))throw new fit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[h1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};aae.exports=t4});var cae=_((_Lt,lae)=>{"use strict";var dit=ve("tls");lae.exports=(t={})=>new Promise((e,r)=>{let o=dit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var Aae=_((HLt,uae)=>{"use strict";var mit=ve("net");uae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),mit.isIP(e)?"":e}});var hae=_((qLt,i4)=>{"use strict";var fae=ve("http"),n4=ve("https"),yit=cae(),Eit=WM(),Cit=r4(),wit=Aae(),Iit=XM(),nb=new Eit({maxSize:100}),g1=new Map,pae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},Bit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!nb.has(e)){if(g1.has(e))return(await g1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=yit(t);g1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(nb.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?pae(o,n,t):n.destroy():A.createConnection===p?pae(A,n,t):n.destroy()}return g1.delete(e),u}catch(n){throw g1.delete(e),n}}return nb.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Iit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||wit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:fae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await Bit(e)==="h2"?(a&&(e.agent=a.http2),new Cit(e,r)):fae.request(e,r)};i4.exports.protocolCache=nb});var dae=_((jLt,gae)=>{"use strict";var vit=ve("http2"),Dit=VM(),s4=r4(),Sit=zM(),Pit=hae(),bit=(t,e,r)=>new s4(t,e,r),xit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};gae.exports={...vit,ClientRequest:s4,IncomingMessage:Sit,...Dit,request:bit,get:xit,auto:Pit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var mae=Tf();o4.default=t=>mae.default.nodeStream(t)&&mae.default.function_(t.getBoundary)});var wae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=ve("fs"),Cae=ve("util"),yae=Tf(),kit=a4(),Qit=Cae.promisify(Eae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(yae.default.string(t))return Buffer.byteLength(t);if(yae.default.buffer(t))return t.length;if(kit.default(t))return Cae.promisify(t.getLength.bind(t))();if(t instanceof Eae.ReadStream){let{size:r}=await Qit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Fit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Fit});var Iae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var vae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.TimeoutError=void 0;var Rit=ve("net"),Tit=Iae(),Bae=Symbol("reentry"),Nit=()=>{},ib=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};d1.TimeoutError=ib;d1.default=(t,e,r)=>{if(Bae in t)return Nit;t[Bae]=!0;let o=[],{once:a,unhandleAll:n}=Tit.default(),u=(I,v,x)=>{var C;let R=setTimeout(v,I,I,x);(C=R.unref)===null||C===void 0||C.call(R);let L=()=>{clearTimeout(R)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new ib(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:x}=t;if(I.connecting){let C=Boolean(x??Rit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let R=u(e.lookup,h,"lookup");a(I,"lookup",R)}if(typeof e.connect<"u"){let R=()=>u(e.connect,h,"connect");C?a(I,"connect",R()):a(I,"lookup",L=>{L===null&&a(I,"connect",R())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let R=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",R)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Dae=Tf();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Dae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Dae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Pae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Lit=ve("url"),Oit=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Lit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of Oit)e[n]&&(a[n]=e[n].toString());return a}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var Mit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=Mit});var kae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var xae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in xae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return xae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(sb=>{"use strict";Object.defineProperty(sb,"__esModule",{value:!0});sb.isResponseOk=void 0;sb.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Fae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Qae=new Set;E4.default=t=>{Qae.has(t)||(Qae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Rae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Tf(),Uit=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=Uit});var Tae=_(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.retryAfterStatusCodes=void 0;m1.retryAfterStatusCodes=new Set([413,429,503]);var _it=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};m1.default=_it});var C1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=ve("util"),Lae=ve("stream"),Hit=ve("fs"),ah=ve("url"),Oae=ve("http"),w4=ve("http"),qit=ve("https"),jit=Zse(),Git=soe(),Mae=Ooe(),Yit=Hoe(),Wit=dae(),Kit=eb(),st=Tf(),Vit=wae(),Uae=a4(),Jit=u4(),_ae=vae(),zit=Sae(),Hae=Pae(),Xit=bae(),Zit=m4(),qae=kae(),$it=y4(),lh=Fae(),est=Rae(),tst=Tae(),I4,Zs=Symbol("request"),lb=Symbol("response"),PE=Symbol("responseSize"),bE=Symbol("downloadedSize"),xE=Symbol("bodySize"),kE=Symbol("uploadedSize"),ob=Symbol("serverResponsesPiped"),jae=Symbol("unproxyEvents"),Gae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Yae=Symbol("startedReading"),QE=Symbol("stopReading"),ab=Symbol("triggerRead"),ch=Symbol("body"),y1=Symbol("jobs"),Wae=Symbol("originalResponse"),Kae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var rst=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function nst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function ist(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new Xit.default,sst=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),ost=new Set([300,301,302,303,304,307,308]),ast=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of ast)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Vi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof db?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[lb]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Bn.RequestError=Vi;var ub=class extends Vi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ub;var Ab=class extends Vi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ab;var fb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fb;var pb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=pb;var hb=class extends Vi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hb;var E1=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=E1;var gb=class extends Vi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gb;var lst=["socket","connect","continue","information","upgrade","timeout"],db=class extends Lae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[bE]=0,this[kE]=0,this.requestInitialized=!1,this[ob]=new Set,this.redirects=[],this[QE]=!1,this[ab]=!1,this[y1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Hit.ReadStream&&await sst(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[y1])I();this[y1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Vi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new ah.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([qae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Kit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let x;if(st.default.string(r.searchParams)||r.searchParams instanceof ah.URLSearchParams)x=new ah.URLSearchParams(r.searchParams);else{nst(r.searchParams),x=new ah.URLSearchParams;for(let C in r.searchParams){let R=r.searchParams[C];R===null?x.append(C,""):R!==void 0&&x.append(C,R)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,R)=>{x.has(R)||x.append(R,C)}),r.searchParams=x}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=Hae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=Hae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:x}=r;Object.defineProperty(r,"prefixUrl",{set:R=>{let L=r.url;if(!L.href.startsWith(R))throw new Error(`Cannot change \`prefixUrl\` from ${x} to ${R}: ${L.href}`);r.url=new ah.URL(R+L.href.slice(x.length)),x=R},get:()=>x});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new ah.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gb(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:x,getCookieString:C}=E;st.assert.function_(x),st.assert.function_(C),x.length===4&&C.length===0&&(x=Nae.promisify(x.bind(r.cookieJar)),C=Nae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:x,getCookieString:C})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Mae((x,C)=>{let R=x[Zs](x,C);return st.default.promise(R)&&(R.once=(L,U)=>{if(L==="error")R.catch(U);else if(L==="abort")(async()=>{try{(await R).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return R}),R},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new Git.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let x of Bn.knownHookEvents)if(x in r.hooks)if(st.default.array(r.hooks[x]))r.hooks[x]=[...r.hooks[x]];else throw new TypeError(`Parameter \`${x}\` must be an Array, got ${st.default(r.hooks[x])}`);else r.hooks[x]=[];if(o&&!v)for(let x of Bn.knownHookEvents)o.hooks[x].length>0&&(r.hooks[x]=[...o.hooks[x],...r.hooks[x]]);if("family"in r&&lh.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&lh.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&lh.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&lh.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&lh.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&lh.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&lh.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&lh.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let x in r.agent)if(x!=="http"&&x!=="https"&&x!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${x}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),est.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Lae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Uae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Uae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ch]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[ch]=new ah.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[ch]=e.stringifyJson(e.json));let h=await Vit.default(this[ch],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Wae]=e,r.decompress&&(e=Yit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Oae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Gae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[lb]=e,e.once("end",()=>{this[PE]=this[bE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new E1(A,this))}),e.once("aborted",()=>{this._beforeError(new E1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&ost.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[jae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[ch]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ub(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new ah.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!$it.isResponseOk(n)){this._beforeError(new Ab(n));return}e.on("readable",()=>{this[ab]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ob])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;jit.default(e),this[B4]=_ae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof _ae.TimeoutError?new hb(p,this.timings,this):new Vi(p.message,p,this),this._beforeError(p)}),this[jae]=Jit.default(e,this,lst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[ch],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new pb(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,zit.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=rst?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[ch]!==u.body&&(this[ch]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",x;u.http2?x=Wit.auto:x=v?qit.request:Oae.request;let C=(e=u.request)!==null&&e!==void 0?e:x,R=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=qae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await R(I,L);st.default.undefined(U)&&(U=x(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),ist(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Mae.CacheError?new fb(U,this):new Vi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Vi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[QE])return;let{options:r}=this,o=this.retryCount+1;this[QE]=!0,e instanceof Vi||(e=new Vi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Zit.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:tst.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Vi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Vi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Kae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[ab]=!0;let e=this[lb];if(e&&!this[QE]){e.readableLength&&(this[ab]=!1);let r;for(;(r=e.read())!==null;){this[bE]+=r.length,this[Yae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[y1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[kE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[kE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[y1].push(r)}_destroy(e,r){var o;this[QE]=!0,clearTimeout(this[Kae]),Zs in this&&(this[B4](),!((o=this[lb])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Vi)&&(e=new Vi(e.message,e,this)),r(e)}get _isAboutToError(){return this[QE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Wae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[bE]/this[PE]:this[PE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[kE]/this[xE]:this[xE]===this[kE]?e=1:e=0,{percent:e,transferred:this[kE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Gae]}pipe(e,r){if(this[Yae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ob].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ob].delete(e),super.unpipe(e),this}};Bn.default=db});var w1=_(jc=>{"use strict";var cst=jc&&jc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ust=jc&&jc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&cst(e,t,r)};Object.defineProperty(jc,"__esModule",{value:!0});jc.CancelError=jc.ParseError=void 0;var Vae=C1(),D4=class extends Vae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};jc.ParseError=D4;var S4=class extends Vae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};jc.CancelError=S4;ust(C1(),jc)});var zae=_(P4=>{"use strict";Object.defineProperty(P4,"__esModule",{value:!0});var Jae=w1(),Ast=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};P4.default=Ast});var b4=_(uh=>{"use strict";var fst=uh&&uh.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),pst=uh&&uh.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&fst(e,t,r)};Object.defineProperty(uh,"__esModule",{value:!0});var hst=ve("events"),gst=Tf(),dst=zse(),mb=w1(),Xae=zae(),Zae=C1(),mst=u4(),yst=m4(),$ae=y4(),Est=["request","response","redirect","uploadProgress","downloadProgress"];function ele(t){let e,r,o=new hst.EventEmitter,a=new dst((u,A,p)=>{let h=E=>{let I=new Zae.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mb.CancelError(I))),e=I,I.once("response",async C=>{var R;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await yst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((R=C.headers["content-encoding"])!==null&&R!==void 0?R:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=Xae.default(C,te.responseType,te.parseJson,te.encoding)}catch(ae){if(C.body=L.toString(),$ae.isResponseOk(C)){I._beforeError(ae);return}}try{for(let[ae,fe]of te.hooks.afterResponse.entries())C=await fe(C,async ce=>{let me=Zae.default.normalizeArguments(void 0,{...ce,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ae);for(let Be of me.hooks.beforeRetry)await Be(me);let he=ele(me);return p(()=>{he.catch(()=>{}),he.cancel()}),he})}catch(ae){I._beforeError(new mb.RequestError(ae.message,ae,I));return}if(!$ae.isResponseOk(C)){I._beforeError(new mb.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:R}=I;if(C instanceof mb.HTTPError&&!R.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let x=I.options.body;I.once("retry",(C,R)=>{var L,U;if(x===((L=R.request)===null||L===void 0?void 0:L.options.body)&&gst.default.nodeStream((U=R.request)===null||U===void 0?void 0:U.options.body)){v(R);return}h(C)}),mst.default(I,o,Est)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Xae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}uh.default=ele;pst(w1(),uh)});var tle=_(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});var Cst=w1();function wst(t,...e){let r=(async()=>{if(t instanceof Cst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}x4.default=wst});var ile=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var rle=Tf();function nle(t){for(let e of Object.values(t))(rle.default.plainObject(e)||rle.default.array(e))&&nle(e);return Object.freeze(t)}k4.default=nle});var ole=_(sle=>{"use strict";Object.defineProperty(sle,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var Ist=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Bst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ist(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var ale=Tf(),Kl=b4(),vst=tle(),Eb=C1(),Dst=ile(),Sst={RequestError:Kl.RequestError,CacheError:Kl.CacheError,ReadError:Kl.ReadError,HTTPError:Kl.HTTPError,MaxRedirectsError:Kl.MaxRedirectsError,TimeoutError:Kl.TimeoutError,ParseError:Kl.ParseError,CancelError:Kl.CancelError,UnsupportedProtocolError:Kl.UnsupportedProtocolError,UploadError:Kl.UploadError},Pst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yb}=Eb.default,lle=(...t)=>{let e;for(let r of t)e=yb(void 0,r,e);return e},bst=t=>t.isStream?new Eb.default(void 0,t):Kl.default(t),xst=t=>"defaults"in t&&"options"in t.defaults,kst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var cle=(t,e)=>{if(t)for(let r of t)r(e)},ule=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?bst:h);if(ale.default.plainObject(o)){let E={...o,...a};Eb.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{cle(t.options.hooks.init,a),cle((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yb(o,a,n??t.options);if(I[Eb.kIsNormalizedAlready]=!0,E)throw new Kl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return vst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)xst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),ule({options:lle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yb(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!ale.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of kst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Sst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:Dst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=lle,e};Vl.default=ule;Bst(ole(),Vl)});var ple=_((Nf,Cb)=>{"use strict";var Qst=Nf&&Nf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Ale=Nf&&Nf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Qst(e,t,r)};Object.defineProperty(Nf,"__esModule",{value:!0});var Fst=ve("url"),fle=Q4(),Rst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Fst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[fle.defaultHandler],mutableDefaults:!1},F4=fle.default(Rst);Nf.default=F4;Cb.exports=F4;Cb.exports.default=F4;Cb.exports.__esModule=!0;Ale(Q4(),Nf);Ale(b4(),Nf)});var nn={};Vt(nn,{Method:()=>Cle,del:()=>Mst,get:()=>L4,getNetworkSettings:()=>Ele,post:()=>O4,put:()=>Ost,request:()=>I1});function dle(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function R4(t){return ol(gle,t,()=>oe.readFilePromise(t).then(e=>(gle.set(t,e),e)))}function Lst({statusCode:t,statusMessage:e},r){let o=Mt(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Zy(r,`${o}${e?` (${e})`:""}`,a)}async function wb(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Mt(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Lst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,PL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Mt(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Mt(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function Ele(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(N4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function I1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Ust(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function L4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>wb(I1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(hle,t,()=>u().then(p=>(hle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function Ost(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Mst(t,{customErrorMessage:e,...r}){return(await wb(I1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Ust(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=Ele(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!N4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?T4.default.httpOverHttp(dle(p.httpProxy)):Tst,https:p.httpsProxy?T4.default.httpsOverHttp(dle(p.httpsProxy)):Nst},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),x=r.get("enableStrictSsl"),C=p.httpsCaFilePath,R=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(ple())),J=C?await R4(C):void 0,te=R?await R4(R):void 0,ae=L?await R4(L):void 0,fe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:x,certificateAuthority:J,certificate:te,key:ae},...E});return r.getLimit("networkConcurrency")(()=>fe(A))}var mle,yle,N4,T4,hle,gle,Tst,Nst,Cle,Ib=Et(()=>{St();mle=ve("https"),yle=ve("http"),N4=$e(Zo()),T4=$e(Yse());Yl();jl();ql();hle=new Map,gle=new Map,Tst=new yle.Agent({keepAlive:!0}),Nst=new mle.Agent({keepAlive:!0});Cle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Cle||{})});var Ji={};Vt(Ji,{availableParallelism:()=>U4,getArchitecture:()=>B1,getArchitectureName:()=>Gst,getArchitectureSet:()=>M4,getCaller:()=>Vst,major:()=>_st,openUrl:()=>Hst});function jst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(qst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return KI(r,a=>{let n=a.match(o);if(!n)return KI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function B1(){return Ile=Ile??{os:process.platform,cpu:process.arch,libc:jst()}}function Gst(t=B1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=B1();return Ble=Ble??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Kst(t){let e=Yst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Wst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Vst(){let e=new Error().stack.split(` +`)[3];return Kst(e)}function U4(){return typeof Bb.default.availableParallelism<"u"?Bb.default.availableParallelism():Math.max(1,Bb.default.cpus().length)}var Bb,_st,wle,Hst,qst,Ile,Ble,Yst,Wst,vb=Et(()=>{St();Bb=$e(ve("os"));Db();ql();_st=Number(process.versions.node.split(".")[0]),wle=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Hst=typeof wle<"u"?async t=>{try{return await _4(wle,[t],{cwd:V.cwd()}),!0}catch{return!1}}:void 0,qst="/usr/bin/ldd";Yst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Wst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=A1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=A1(r);switch(o.type){case"ANY":return GP(n);case"SHAPE":return Zst(t,e,r,o,a);case"MAP":return $st(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sP(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=mM(r);return E&&E[0]!=="<"&&(h=V.dirname(E)),V.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function Zst(t,e,r,o,a){let n=A1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function $st(t,e,r,o,a){let n=A1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,E,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>V.normalize(o)):V.isAbsolute(e.default)?V.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>V.resolve(t.projectCwd,o)):V.resolve(t.projectCwd,e.default);default:return e.default}}function Pb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Xst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(Pb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=Pb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=Pb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function eot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bb)&&(e=(0,Dle.default)(e.slice(bb.length)),t[e]=r);return t}function j4(){let t=`${bb}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return G4}async function vle(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function tot(t,e){return Buffer.compare(...await Promise.all([vle(t),vle(e)]))===0}async function rot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function iot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await not(r,e)?null:r}var Dle,Lf,Sle,Ple,ble,q4,Jst,v1,zst,FE,bb,G4,Xst,D1,xle,xb,Sb,not,rA,Ke,S1=Et(()=>{St();Nl();Dle=$e(sV()),Lf=$e(td());qt();Sle=$e(ZV()),Ple=ve("module"),ble=$e(id()),q4=ve("stream");ose();fE();cM();uM();AM();Tse();fM();vd();Use();WP();jl();nh();Ib();ql();vb();Qf();bo();Jst=function(){if(!Lf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),v1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),zst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),FE=/^(?!v)[a-z0-9._-]+$/i,bb="yarn_",G4=".yarnrc.yml",Xst="********",D1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(D1||{}),xle=yt,xb=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(xb||{}),Sb={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:EM()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:j4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lP,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Lf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:U4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uP),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Lf.isPR&&Jst,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};not=process.platform==="win32"?tot:rot;rA=class{constructor(e){this.isCI=Lf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sb);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=eot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(EE());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=Mse(p.map(ce=>[ce.path,ce.data])),I=Bt.dot,v=new Set(Object.keys(Sb)),x=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he})=>({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he}),C=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he,...Be})=>{let we={};for(let[g,Ee]of Object.entries(Be))v.has(g)&&(we[g]=Ee);return we},R=({yarnPath:ce,ignorePath:me,...he})=>{let Be={};for(let[we,g]of Object.entries(he))v.has(we)||(Be[we]=g);return Be};if(A.importSettings(x(Sb)),A.useWithSource("",x(u),e,{strict:!1}),E){let[ce,me]=E;A.useWithSource(ce,x(me),I,{strict:!1})}if(a){if(await iot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async ce=>{let me=ce.endsWith("?")?await oe.readFilePromise(ce.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ce,"utf8");return(0,Sle.parse)(me)}));for(let ce of J)for(let[me,he]of Object.entries(ce))A.env[me]=sP(he,{env:U});if(A.importSettings(C(Sb)),A.useWithSource("",C(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,C(me),I,{strict:o})}let te=ce=>"default"in ce?ce.default:ce,ae=new Map([["@@core",sse]]);if(r!==null)for(let ce of r.plugins.keys())ae.set(ce,te(r.modules.get(ce)));for(let[ce,me]of ae)A.activatePlugin(ce,me);let fe=new Map([]);if(r!==null){let ce=new Map;for(let Be of Ple.builtinModules)ce.set(Be,()=>Df(Be));for(let[Be,we]of r.modules)ce.set(Be,()=>we);let me=new Set,he=async(Be,we)=>{let{factory:g,name:Ee}=Df(Be);if(!g||me.has(Ee))return;let Se=new Map(ce),le=ee=>{if(Se.has(ee))return Se.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Ky(async()=>te(await g(le)),ee=>`${ee} (when initializing ${Ee}, defined in ${we})`);ce.set(Ee,()=>ne),me.add(Ee),fe.set(Ee,ne)};if(u.plugins)for(let Be of u.plugins.split(";")){let we=V.resolve(e,ue.toPortablePath(Be));await he(we,"")}for(let{path:Be,cwd:we,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let Se=typeof Ee!="string"?Ee.path:Ee,le=Ee?.spec??"",ne=Ee?.checksum??"";if(v1.has(le))continue;let ee=V.resolve(we,ue.toPortablePath(Se));if(!await oe.existsPromise(ee)){if(!le){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,".gitignore",yt.NAME),at=Mt(A,A.values.get("rcFilename"),yt.NAME),Re=Mt(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${At} plugin - please try to remove the plugin from ${at} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!le.match(/^https?:/)){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${At} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await L4(le,{configuration:A}),Fe=zs(Ie);if(ne&&ne!==Fe){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME),at=Mt(A,`yarn plugin import ${le}`,yt.CODE);throw new it(`Failed to fetch the ${At} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${at} to reimport it.`)}await oe.mkdirPromise(V.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await he(ee,Be)}}for(let[ce,me]of fe)A.activatePlugin(ce,me);if(A.useWithSource("",R(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,R(me),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=j4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=V.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=V.dirname(n)}return o}static async findFolderRcFile(e){let r=V.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(V.join(a,dr.lockfile)))return a;oe.existsSync(V.join(a,dr.manifest))&&(r=a),o=V.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=j4(),n=V.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=EE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Mt(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&zst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bb}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=EE(),v=e[0]!=="<"?V.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Mt(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return Pb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Mt(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Mt(this,"STDERR","red")}`);n=new q4.PassThrough,n.pipe(p),n.pipe(A),u=new q4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Dd([new c1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new hE([new gE,new mE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=B1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!xa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=Yy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,x]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:x})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(ih(o,!0),iP(a),{userProvided:!0});return e}normalizeLocator(e){return xa(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):FE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return xa(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):FE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=e1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!kf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:yL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Pa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Pa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,ble.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=rA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};Vt(Ur,{EndStrategy:()=>z4,ExecError:()=>kb,PipeError:()=>P1,execvp:()=>_4,pipevp:()=>Gc});function bd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function V4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":bd(n)&&(h[0]=n),bd(u)&&(h[1]=u),bd(A)&&(h[2]=A);let E=(0,J4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",V4)),!bd(n)&&n!==null&&n.pipe(E.stdin),bd(u)||E.stdout.pipe(u,{end:!1}),bd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))bd(v)||v.end()};return new Promise((v,x)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1)&&I(),x(C)}),E.on("close",(C,R)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:X4(C,R)}):x(new P1({fileName:t,code:C,signal:R}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,J4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",x=>{let C=Ke.create(r),R=Mt(C,t,yt.PATH);v(new zt(1,`Process ${R} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,x.message)})}`)}))}),E.on("close",(x,C)=>{let R=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);x===0||!n?I({code:X4(x,C),stdout:R,stderr:L}):v(new kb({fileName:t,code:x,signal:C,stdout:R,stderr:L}))})})}function X4(t,e){let r=sot.get(e);return typeof r<"u"?128+r:t??1}function oot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var J4,z4,P1,kb,xd,sot,Db=Et(()=>{St();J4=$e(sT());S1();Yl();jl();z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(V.cwd()),u=Mt(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{oot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},kb=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;sot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Qle(t){kle=t}function b1(){return typeof Z4>"u"&&(Z4=kle()),Z4}var Z4,kle,$4=Et(()=>{kle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Fle=_((Qb,tU)=>{var aot=Object.assign({},ve("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function x(We){return r.locateFile?r.locateFile(We,v):v+We}var C,R,L,U;I&&(E?v=ve("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=aot),U||(U=ve("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},R=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ae=0,fe=function(We){ae=We},ce;r.wasmBinary&&(ce=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function he(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return He[We>>0];case"i8":return He[We>>0];case"i16":return cp((We>>1)*2);case"i32":return Os((We>>2)*4);case"i64":return Os((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return lp((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Be,we=!1,g;function Ee(We,tt){We||Ti("Assertion failed: "+tt)}function Se(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function le(We,tt,It,nr,$){var ye={string:function(es){var bi=0;if(es!=null&&es!==0){var qo=(es.length<<2)+1;bi=Un(qo),At(es,bi,qo)}return bi},array:function(es){var bi=Un(es.length);return Re(es,bi),bi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var pt=Se(We),ht=[],Tt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function Fe(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,ye=It+nr-1,Le=0;Le=55296&&pt<=57343){var ht=We.charCodeAt(++Le);pt=65536+((pt&1023)<<10)|ht&1023}if(pt<=127){if(It>=ye)break;tt[It++]=pt}else if(pt<=2047){if(It+1>=ye)break;tt[It++]=192|pt>>6,tt[It++]=128|pt&63}else if(pt<=65535){if(It+2>=ye)break;tt[It++]=224|pt>>12,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}else{if(It+3>=ye)break;tt[It++]=240|pt>>18,tt[It++]=128|pt>>12&63,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}}return tt[It]=0,It-$}function At(We,tt,It){return Fe(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function at(We){var tt=H(We)+1,It=Li(tt);return It&&Fe(We,He,It,tt),It}function Re(We,tt){He.set(We,tt)}function ke(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,He,Te,Je,qe,b,w,P,y,F;function z(We){xe=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=He=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=b=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=qe=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=P=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Pe=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Pe)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function bt(We){ie.unshift(We)}function an(We){Pe.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,br=null,Wr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(br!==null&&(clearInterval(br),br=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),we=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Pi="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Pi)||(Pi=x(Pi));function Ls(We){try{if(We==Pi&&ce)return new Uint8Array(ce);var tt=ii(We);if(tt)return tt;if(R)return R(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ti(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var ye=Le.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Ma};function tt($,ye){var Le=$.exports;r.asm=Le,Be=r.asm.g,z(Be.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Pi,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function lp(We){return F.getFloat64(We,!0)}function cp(We){return F.getInt16(We,!0)}function Os(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Ms(We,tt){var It=new Date(Os((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Ms.GMTString||(Ms.GMTString=at("GMT")),Dn((tt+40>>2)*4,Ms.GMTString),tt}function ml(We,tt){return Ms(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return Be.grow(We-xe.byteLength+65535>>>16),z(Be.buffer),1}catch{}}function Vn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var ye=Math.min(It,ke(Math.max(We,$),65536)),Le=ao(ye);if(Le)return!0}return!1}function On(We){fe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),ye=Math.max(nr,$);Dn((ds()>>2)*4,ye*60),Dn((gs()>>2)*4,Number(nr!=$));function Le($r){var ji=$r.toTimeString().match(/\(([A-Za-z ]+)\)$/);return ji?ji[1]:"GMT"}var pt=Le(tt),ht=Le(It),Tt=at(pt),er=at(ht);$>2)*4,Tt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Tt))}function _i(We){Mn();var tt=Date.UTC(Os((We+20>>2)*4)+1900,Os((We+16>>2)*4),Os((We+12>>2)*4),Os((We+8>>2)*4),Os((We+4>>2)*4),Os((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,ye,Le,pt,ht,Tt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),ht=tt.indexOf(We.charAt(er++)),Tt=tt.indexOf(We.charAt(er++)),nr=Le<<2|pt>>4,$=(pt&15)<<4|ht>>2,ye=(ht&3)<<6|Tt,It=It+String.fromCharCode(nr),ht!==64&&(It=It+String.fromCharCode($)),Tt!==64&&(It=It+String.fromCharCode(ye));while(er0||(dt(),mr>0))return;function tt(){Sn||(Sn=!0,r.calledRun=!0,!we&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Qb=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Qb=="object"&&(Qb.createModule=eU)});var Of,Rle,Tle,Nle=Et(()=>{Of=["number","number"],Rle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Rle||{}),Tle=t=>({get HEAPU8(){return t.HEAPU8},errors:Rle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Of,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Of,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Of,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Of,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Of,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Of,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Of,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Of,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Of,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==V.sep);){if(t[r-1]===V.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==V.sep?null:t.slice(0,o)}var Jl,Lle=Et(()=>{St();St();nA();Jl=class extends Hp{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function lot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ole.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fb(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Ole,iU,Mle,Rb,zi,sU=Et(()=>{St();St();St();St();St();St();ta=ve("fs"),nU=ve("stream"),Ole=ve("util"),iU=$e(ve("zlib"));$4();Mle="mixed";Rb=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Mu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Mle,r??=Fb(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=b1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fb():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return V.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return PD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=V.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),x=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=x,R=x,L=x,U=new Date(C),J=new Date(R),te=new Date(L),ae=new Date(x),fe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ce=fe===ta.constants.S_IFDIR?493:420,me=fe|this.getUnixMode(n,ce)&511,he=this.libzip.struct.statCrc(u),Be=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:ae,atimeMs:C,birthtimeMs:R,ctimeMs:L,mtimeMs:x,mode:me,crc:he});return a.bigint===!0?Ea.convertToBigIntStats(Be):Be}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,x=this.stats.mtimeMs,C=this.stats.mtimeMs,R=new Date(I),L=new Date(v),U=new Date(x),J=new Date(C),te=ta.constants.S_IFDIR|493,ae=0,fe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:R,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:x,mtimeMs:C,mode:te,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(fe):fe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(V.dirname(r)).add(V.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(V.dirname(r)).add(V.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(V.dirname(r))?.delete(V.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=V.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,V.resolve(V.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,V.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=V.resolve(p,V.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=V.resolve(V.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=V.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),x=Buffer.from(v);if(p===0)return this.fileSources.set(r,x),x;if(o.asyncDecompress)return new Promise((C,R)=>{iU.default.inflateRaw(x,(L,U)=>{L?R(L):(this.fileSources.set(r,U),C(U))})});{let C=iU.default.inflateRawSync(x);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,lot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,V.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",V.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=V.join(A.path,A.name),h=this.listings.get(V.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",V.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(V.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(V.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",V.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=V.resolve(Bt.root,r);return ny(this,n,o,a)}unwatchFile(r,o){let a=V.resolve(Bt.root,r);return Mg(this,a,o)}}});function _le(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),E=new Hp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Kw(Ule.default,new qp(E)),a}var Ule,Hle=Et(()=>{St();Ule=$e(ve("fs"));sU()});var qle=Et(()=>{Lle();sU();Hle()});var x1={};Vt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>Mle,LibzipError:()=>Rb,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>rU,getLibzipPromise:()=>uot,getLibzipSync:()=>cot,makeEmptyArchive:()=>Fb,mountMemoryDrive:()=>_le});function cot(){return b1()}async function uot(){return b1()}var jle,nA=Et(()=>{$4();jle=$e(Fle());Nle();qle();Qle(()=>{let t=(0,jle.default)();return Tle(t)})});var RE,Gle=Et(()=>{St();qt();k1();RE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};RE.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Yle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Lb={};Vt(Lb,{fastGlobOptions:()=>Vle,isBraceExpansion:()=>oU,isGlobPattern:()=>Aot,match:()=>fot,micromatchOptions:()=>Nb});function Aot(t){if(!Tb.default.scan(t,Nb).isGlob)return!1;try{Tb.default.parse(t,Nb)}catch{return!1}return!0}function fot(t,{cwd:e,baseFs:r}){return(0,Wle.default)(t,{...Vle,cwd:ue.fromPortablePath(e),fs:FD(Kle.default,new qp(r))})}function oU(t){return Tb.default.scan(t,Nb).isBrace}var Wle,Kle,Tb,Nb,Vle,Jle=Et(()=>{St();Wle=$e(RP()),Kle=$e(ve("fs")),Tb=$e(Zo()),Nb={strictBrackets:!0},Vle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of kd)t.kill()}function $le(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,Xle.default)(t,e,{...o,stdio:[n,u,A]});return kd.add(p),kd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(E!==null?E:129)})})}}}function ece(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ob(t,e){return NE.start(t,e)}function zle(t,e=null){let r=new iA.PassThrough,o=new Zle.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function tce(t,{prefix:e}){return{stdout:zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var Xle,iA,Zle,kd,zl,cU,NE,uU=Et(()=>{Xle=$e(sT()),iA=ve("stream"),Zle=ve("string_decoder"),kd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},NE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new NE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new NE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Vt(T1,{EntryCommand:()=>RE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Lb});function rce(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function Ub(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function hot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await _b(t,e,Ub(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function nce(t,e,r){let o=t.map(async n=>{let u=await Qd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Mb(t){return t.match(/[^ \r\n\t]+/g)||[]}async function cce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Mb(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Qd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Mb(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?Q1({type:"variable",name:o.join(" ")},e,r):Q1({type:"number",value:a},e,r)}else return got[t.type](await Q1(t.left,e,r),await Q1(t.right,e,r))}async function Qd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let x=JSON.stringify({type:E,fd:I}),C=o.get(x);typeof C>"u"&&o.set(x,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await Qd(E.args,e,r);for(let x of v)h(E.subtype,E.fd,x)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let x=await hot(v.shell,e,r);if(v.quoted)u(x);else{let C=Mb(x);for(let R=0;R"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let x=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(x.length===0){let C=oU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of x.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function F1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return $le(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return ece(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:x}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=x}})}function dot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,Ub(r,{stdin:a}));return{stdin:a,promise:n}}}function mot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,r);return{stdin:a,promise:n}}}function ice(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,F1([...e,"__ysh_run_procedure",a],r,o)}}async function sce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Qd(o.args,e,r),h=await nce(o.envs,e,r);A=o.envs.length?F1(p,e,Ub(u,{environment:h})):F1(p,e,u)}break;case"subshell":{let p=await Qd(o.args,e,r),h=dot(o.subshell,e,u);A=ice(h,p,e,u)}break;case"group":{let p=await Qd(o.args,e,r),h=mot(o.group,e,u);A=ice(h,p,e,u)}break;case"envs":{let p=await nce(o.envs,e,r);u.environment={...u.environment,...p},A=F1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ob(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function yot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return oce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=tce(r,{prefix:p});return r.backgroundJobs.push(sce(t,e,Ub(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(uy(t))}' has ended +`)})),0}return await sce(t,e,r)}async function Eot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await yot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function _b(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await Eot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function uce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>R1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>R1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function R1(t){switch(t.type){case"redirection":return t.args.some(e=>R1(e));case"argument":return t.segments.some(e=>uce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return uce(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>R1(n)))||r.args.some(a=>R1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Lb}={}){let I={};for(let[C,R]of Object.entries(n))typeof R<"u"&&(I[C]=R);let v=new Map(pot);for(let[C,R]of Object.entries(o))v.set(C,R);u===null&&(u=new ll.PassThrough,u.end());let x=ND(t,E);if(!fU(x)&&x.length>0&&e.length>0){let{command:C}=x[x.length-1];for(;C.then;)C=C.then.line;let R=C.chain;for(;R.then;)R=R.then.chain;R.type==="command"&&(R.args=R.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await _b(x,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var oce,ace,ll,lce,pot,got,k1=Et(()=>{St();Nl();oce=$e(IN()),ace=ve("os"),ll=ve("stream"),lce=ve("timers/promises");Gle();Yle();Jle();uU();uU();pot=new Map([["cd",async([t=(0,ace.homedir)(),...e],r,o)=>{let a=V.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,lce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ob(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:x}=JSON.parse(I),C=J=>{switch(x){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},R=J=>{switch(x){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(V.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>rce(Number(t[J]),1,r));break;case">":case">>":{let te=V.resolve(r.cwd,ue.toPortablePath(t[J]));R(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(ae,fe,ce){setImmediate(ce)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":R(rce(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=x=>{if(x===u.length)I.end();else{let C=u[x]();C.pipe(I,{end:!1}),C.on("end",()=>{v(x+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ob(F1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);got={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Hb=_((r4t,Ace)=>{function Cot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var fce=pd(),wot=Hb(),Iot=Hl(),Bot=pE(),vot=1/0,pce=fce?fce.prototype:void 0,hce=pce?pce.toString:void 0;function gce(t){if(typeof t=="string")return t;if(Iot(t))return wot(t,gce)+"";if(Bot(t))return hce?hce.call(t):"";var e=t+"";return e=="0"&&1/t==-vot?"-0":e}dce.exports=gce});var N1=_((i4t,yce)=>{var Dot=mce();function Sot(t){return t==null?"":Dot(t)}yce.exports=Sot});var pU=_((s4t,Ece)=>{function Pot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var bot=pU();function xot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:bot(t,e,r)}Cce.exports=xot});var hU=_((a4t,Ice)=>{var kot="\\ud800-\\udfff",Qot="\\u0300-\\u036f",Fot="\\ufe20-\\ufe2f",Rot="\\u20d0-\\u20ff",Tot=Qot+Fot+Rot,Not="\\ufe0e\\ufe0f",Lot="\\u200d",Oot=RegExp("["+Lot+kot+Tot+Not+"]");function Mot(t){return Oot.test(t)}Ice.exports=Mot});var vce=_((l4t,Bce)=>{function Uot(t){return t.split("")}Bce.exports=Uot});var Fce=_((c4t,Qce)=>{var Dce="\\ud800-\\udfff",_ot="\\u0300-\\u036f",Hot="\\ufe20-\\ufe2f",qot="\\u20d0-\\u20ff",jot=_ot+Hot+qot,Got="\\ufe0e\\ufe0f",Yot="["+Dce+"]",gU="["+jot+"]",dU="\\ud83c[\\udffb-\\udfff]",Wot="(?:"+gU+"|"+dU+")",Sce="[^"+Dce+"]",Pce="(?:\\ud83c[\\udde6-\\uddff]){2}",bce="[\\ud800-\\udbff][\\udc00-\\udfff]",Kot="\\u200d",xce=Wot+"?",kce="["+Got+"]?",Vot="(?:"+Kot+"(?:"+[Sce,Pce,bce].join("|")+")"+kce+xce+")*",Jot=kce+xce+Vot,zot="(?:"+[Sce+gU+"?",gU,Pce,bce,Yot].join("|")+")",Xot=RegExp(dU+"(?="+dU+")|"+zot+Jot,"g");function Zot(t){return t.match(Xot)||[]}Qce.exports=Zot});var Tce=_((u4t,Rce)=>{var $ot=vce(),eat=hU(),tat=Fce();function rat(t){return eat(t)?tat(t):$ot(t)}Rce.exports=rat});var Lce=_((A4t,Nce)=>{var nat=wce(),iat=hU(),sat=Tce(),oat=N1();function aat(t){return function(e){e=oat(e);var r=iat(e)?sat(e):void 0,o=r?r[0]:e.charAt(0),a=r?nat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=aat});var Mce=_((f4t,Oce)=>{var lat=Lce(),cat=lat("toUpperCase");Oce.exports=cat});var mU=_((p4t,Uce)=>{var uat=N1(),Aat=Mce();function fat(t){return Aat(uat(t).toLowerCase())}Uce.exports=fat});var _ce=_((h4t,qb)=>{function pat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,x=13,C=14,R=15,L=16,U=17,J=0,te=1,ae=2,fe=3,ce=4;function me(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function he(g,Ee){Ee===void 0&&(Ee=0);var Se=g.charCodeAt(Ee);if(55296<=Se&&Se<=56319&&Ee=1){var le=g.charCodeAt(Ee-1),ne=Se;return 55296<=le&&le<=56319?(le-55296)*1024+(ne-56320)+65536:ne}return Se}function Be(g,Ee,Se){var le=[g].concat(Ee).concat([Se]),ne=le[le.length-2],ee=Se,Ie=le.lastIndexOf(C);if(Ie>1&&le.slice(1,Ie).every(function(H){return H==o})&&[o,x,U].indexOf(g)==-1)return ae;var Fe=le.lastIndexOf(a);if(Fe>0&&le.slice(1,Fe).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return le.filter(function(H){return H==a}).length%2==1?fe:ce;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?ae:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==R)return J;if(ee==n)return J;if(ne==v)return J;var At=le.indexOf(o)!=-1?le.lastIndexOf(o)-1:le.length-2;return[x,U].indexOf(le[At])!=-1&&le.slice(At+1,-1).every(function(H){return H==o})&&ee==C||ne==R&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?ae:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var Se=we(he(g,Ee)),le=[],ne=Ee+1;ne{var hat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,jb;function gat(){if(jb)return jb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return jb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=_ce(),e=new t;return jb=r=>e.splitGraphemes(r)}}Hce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(hat)||[t,t,void 0],p=gat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var rn,L1=Et(()=>{rn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.1.1"});function Vce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Mt(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=Vce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Zy(e,o,n)}async function LE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Wce,Gb,dat,jce,Gce,Ah,Kce,Yce,mat,yat,Yb,Eat,Nt,O1=Et(()=>{Wce=$e(qce()),Gb=$e(td());fS();Yl();L1();jl();dat="\xB7",jce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Gce=80,Ah=Gb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Gb.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Gb.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Kce=Ah!==null,Yce=new Date,mat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,yat=t=>t,Yb=yat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),Eat=mat&&Object.keys(Yb).find(t=>{let e=Yb[t];return!(e.date&&(e.date[0]!==Yce.getDate()||e.date[1]!==Yce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(XI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||Eat;if(!Object.hasOwn(Yb,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Yb[v];let x=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*x/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,yd(r.configuration,`Yarn ${rn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,Ah!==null&&!this.json&&this.includeInfos&&this.stdout.write(Ah.start(r))},reportFooter:A=>{if(this.indent-=1,Ah!==null&&!this.json&&this.includeInfos){this.stdout.write(Ah.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Mt(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!Ah)return;let a=`${Ah.start(r)}${o}${Ah.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Mt(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Gce&&(this.progressFrame=(this.progressFrame+1)%jce.length,this.progressTime=r);let o=jce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Mt(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Gce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Wce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Vce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Mt(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${dat} `}}});var un={};Vt(un,{PackageManager:()=>Xce,detectPackageManager:()=>Zce,executePackageAccessibleBinary:()=>nue,executePackageScript:()=>Wb,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>Sat,executeWorkspaceLifecycleScript:()=>tue,executeWorkspaceScript:()=>eue,getPackageAccessibleBinaries:()=>Kb,getWorkspaceAccessibleBinaries:()=>rue,hasPackageScript:()=>Bat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>Dat,prepareExternalProject:()=>Iat});async function fh(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(V.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(V.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function Zce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=UP(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(V.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(V.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(V.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([fh(r,"node",process.execPath),...rn!==null?[fh(r,"run",process.execPath,[p,"run"]),fh(r,"yarn",process.execPath,[p]),fh(r,"yarnpkg",process.execPath,[p]),fh(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let x=t.storedPackages.get(e.locatorHash);if(!x)throw new Error(`Package for ${qr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),R={project:t,report:new Nt({stdout:new ph.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(x,R));if(!L)throw new Error(`The package ${qr(t.configuration,x)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(x,R)}u.npm_package_json=ue.fromPortablePath(V.join(v,dr.manifest))}let h=rn!==null?`yarn/${rn}`:`yarn/${Df("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await fh(r,E,I,v)),u}async function Iat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await wat(async()=>{await oe.mktempPromise(async u=>{let A=V.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?r1(n):n,v=I?ba(I):"an external project";h.write(`Packing ${v} from sources +`);let x=await Zce(t),C;x!==null?(h.write(`Using ${x.packageManager} for bootstrap. Reason: ${x.reason} + +`),C=x.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let R=C==="Yarn"&&!x?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:R}),te=new Map([["Yarn Classic",async()=>{let fe=a!==null?["workspace",a]:[],ce=V.join(t,dr.manifest),me=await oe.readFilePromise(ce),he=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(he.code!==0)return he.code;await oe.writeFilePromise(ce,me),await oe.appendFilePromise(V.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let Be=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` +`);let we=await Gc("yarn",[...fe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return we.code!==0?we.code:0}],["Yarn",async()=>{let fe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ce=V.join(t,dr.lockfile);await oe.existsPromise(ce)||await oe.writeFilePromise(ce,"");let me=await Gc("yarn",[...fe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return me.code!==0?me.code:0}],["npm",async()=>{if(a!==null){let Ee=new ph.PassThrough,Se=Vy(Ee);Ee.pipe(h,{end:!1});let le=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),le.code!==0)return h.end(),E.end(),le.code;let ne=(await Se).toString().trim();if(!kf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),Fe=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${jn(r,Ie)}; please upgrade to ${jn(r,Fe)} (npm has been detected as the primary package manager for ${Mt(r,t,yt.PATH)})`)}}let fe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ce=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ce.code!==0)return ce.code;let me=new ph.PassThrough,he=Vy(me);me.pipe(h);let Be=await Gc("npm",["pack","--silent",...fe],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let we=(await he).toString().trim().replace(/^.*\n/s,""),g=V.resolve(t,ue.toPortablePath(we));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let ae=await te();if(!(ae===0||typeof ae>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${ae}, logs can be found here: ${Mt(r,A,yt.PATH)})`)})})})}async function Bat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new ph.PassThrough,configuration:u})},h=A.find(x=>x.supportsPackage(a,p));if(!h)throw new Error(`The package ${qr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Wb(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await $ce(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let x=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(R=>R.wrapScriptExecution,x,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await $ce(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function vat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await rue(t)),typeof r>"u"&&(r=V.dirname(await oe.realpathPromise(V.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function $ce(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return vat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${qr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new ph.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${qr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await Kb(t,{project:e}));let x=await I.findPackageLocation(u,E),C=new gn(x,{baseFs:A}),R=await Ot.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=x),{manifest:R,binFolder:r,env:v,cwd:o}})}async function eue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Wb(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function tue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=V.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:qr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await eue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Jce.default)(e)} script failed (exit code ${Mt(a,I,yt.NUMBER)}, logs can be found here: ${Mt(a,A,yt.PATH)}); run ${Mt(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function Dat(t,e,r){CU(t,e)&&await tue(t,e,r)}function wU(t){let e=V.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${qr(r,t)} not found in the project`);let n=new ph.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${jn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let x=null;try{x=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:x}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[x,C]of I.bin){let R=V.resolve(v,C);o.set(x,[I,ue.fromPortablePath(R),wU(R)])}}return o}async function rue(t){return await Kb(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?fh(t,r,process.execPath,[o]):fh(t,r,o,[])))}async function nue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${qr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,x=await M1({project:a,locator:t,binFolder:I});await IU(x.BERRY_BIN_FOLDER,h);let C=wU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:x,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:x,stdin:n,stdout:u,stderr:A}),R;try{R=await C}finally{await oe.removePromise(x.BERRY_BIN_FOLDER)}return R.code})}async function Sat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await nue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,zce,ph,Xce,Cat,wat,BU=Et(()=>{St();St();nA();k1();Jce=$e(mU()),zce=$e(id()),ph=ve("stream");fE();Yl();O1();L1();Db();jl();ql();Qf();bo();Xce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Xce||{});Cat=2,wat=(0,zce.default)(Cat)});var OE=_((L4t,sue)=>{"use strict";var iue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);sue.exports=t=>t?Object.keys(t).map(e=>[iue.has(e)?iue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var UE=_((O4t,hue)=>{"use strict";var oue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Pat=ve("events"),aue=ve("stream"),lue=ve("string_decoder").StringDecoder,Mf=Symbol("EOF"),Uf=Symbol("maybeEmitEnd"),hh=Symbol("emittedEnd"),Vb=Symbol("emittingEnd"),U1=Symbol("emittedError"),Jb=Symbol("closed"),cue=Symbol("read"),zb=Symbol("flush"),uue=Symbol("flushChunk"),ka=Symbol("encoding"),_f=Symbol("decoder"),Xb=Symbol("flowing"),_1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),vU=Symbol("bufferPush"),DU=Symbol("bufferShift"),Fo=Symbol("objectMode"),Ro=Symbol("destroyed"),SU=Symbol("emitData"),Aue=Symbol("emitEnd"),PU=Symbol("emitEnd2"),Hf=Symbol("async"),H1=t=>Promise.resolve().then(t),fue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",bat=fue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),xat=fue&&Symbol.iterator||Symbol("iterator not implemented"),kat=t=>t==="end"||t==="finish"||t==="prefinish",Qat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Fat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Zb=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},bU=class extends Zb{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};hue.exports=class pue extends aue{constructor(e){super(),this[Xb]=!1,this[_1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Hf]=e&&!!e.async||!1,this[_f]=this[ka]?new lue(this[ka]):null,this[Mf]=!1,this[hh]=!1,this[Vb]=!1,this[Jb]=!1,this[U1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[Ro]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[_f]&&this[_f].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[_f]=e?new lue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[_f].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[Hf]}set async(e){this[Hf]=this[Hf]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Hf]?H1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Fat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Qat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[_f].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[_f].write(e)),this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Uf](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[cue](e||null,this.buffer[0]);return this[Uf](),r}[cue](e,r){return e===r.length||e===null?this[DU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[_1])&&this[Uf](),this}[ME](){this[Ro]||(this[_1]=!1,this[Xb]=!0,this.emit("resume"),this.buffer.length?this[zb]():this[Mf]?this[Uf]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Xb]=!1,this[_1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Xb]}get paused(){return this[_1]}[vU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[DU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[zb](e){do;while(this[uue](this[DU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[uue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[hh];return r=r||{},e===oue.stdout||e===oue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new bU(this,e,r):new Zb(this,e,r)),this[Hf]?H1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):kat(e)&&this[hh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[U1]&&(this[Hf]?H1(()=>r.call(this,this[U1])):r.call(this,this[U1])),o}get emittedEnd(){return this[hh]}[Uf](){!this[Vb]&&!this[hh]&&!this[Ro]&&this.buffer.length===0&&this[Mf]&&(this[Vb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Jb]&&this.emit("close"),this[Vb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Hf]?H1(()=>this[SU](r)):this[SU](r):!1;if(e==="end")return this[Aue]();if(e==="close"){if(this[Jb]=!0,!this[hh]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[U1]=r;let n=super.emit("error",r);return this[Uf](),n}else if(e==="resume"){let n=super.emit("resume");return this[Uf](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Uf](),a}[SU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Uf](),r}[Aue](){this[hh]||(this[hh]=!0,this.readable=!1,this[Hf]?H1(()=>this[PU]()):this[PU]())}[PU](){if(this[_f]){let r=this[_f].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[bat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[xat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[Jb]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof pue||e instanceof aue||e instanceof Pat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var due=_((M4t,gue)=>{var Rat=ve("zlib").constants||{ZLIB_VERNUM:4736};gue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Rat))});var GU=_(cl=>{"use strict";var RU=ve("assert"),gh=ve("buffer").Buffer,Eue=ve("zlib"),Fd=cl.constants=due(),Tat=UE(),mue=gh.concat,Rd=Symbol("_superWrite"),HE=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},Nat=Symbol("opts"),q1=Symbol("flushFlag"),yue=Symbol("finishFlushFlag"),jU=Symbol("fullFlushFlag"),ti=Symbol("handle"),$b=Symbol("onError"),_E=Symbol("sawError"),xU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),U4t=Symbol("_defaultFullFlush"),ex=class extends Tat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[_E]=!1,this[QU]=!1,this[Nat]=e,this[q1]=e.flush,this[yue]=e.finishFlush;try{this[ti]=new Eue[r](e)}catch(o){throw new HE(o)}this[$b]=o=>{this[_E]||(this[_E]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[$b](new HE(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[_E])return RU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[jU]),this.write(Object.assign(gh.alloc(0),{[q1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[yue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=gh.from(e,r)),this[_E])return;RU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},gh.concat=h=>h;let A;try{let h=typeof e[q1]=="number"?e[q1]:this[q1];A=this[ti]._processChunk(e,h),gh.concat=mue}catch(h){gh.concat=mue,this[$b](new HE(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[$b](new HE(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Rd](gh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[xU]=e,this[kU]=r)}}}},TU=class extends qf{constructor(e){super(e,"Deflate")}},NU=class extends qf{constructor(e){super(e,"Inflate")}},FU=Symbol("_portable"),LU=class extends qf{constructor(e){super(e,"Gzip"),this[FU]=e&&!!e.portable}[Rd](e){return this[FU]?(this[FU]=!1,e[9]=255,super[Rd](e)):super[Rd](e)}},OU=class extends qf{constructor(e){super(e,"Gunzip")}},MU=class extends qf{constructor(e){super(e,"DeflateRaw")}},UU=class extends qf{constructor(e){super(e,"InflateRaw")}},_U=class extends qf{constructor(e){super(e,"Unzip")}},tx=class extends ex{constructor(e,r){e=e||{},e.flush=e.flush||Fd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Fd.BROTLI_OPERATION_FINISH,super(e,r),this[jU]=Fd.BROTLI_OPERATION_FLUSH}},HU=class extends tx{constructor(e){super(e,"BrotliCompress")}},qU=class extends tx{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=TU;cl.Inflate=NU;cl.Gzip=LU;cl.Gunzip=OU;cl.DeflateRaw=MU;cl.InflateRaw=UU;cl.Unzip=_U;typeof Eue.BrotliCompress=="function"?(cl.BrotliCompress=HU,cl.BrotliDecompress=qU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var qE=_((q4t,Cue)=>{var Lat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Cue.exports=Lat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var rx=_((G4t,wue)=>{"use strict";var Oat=UE(),YU=qE(),WU=Symbol("slurp");wue.exports=class extends Oat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(nx=>{"use strict";nx.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);nx.code=new Map(Array.from(nx.name).map(t=>[t[1],t[0]]))});var Due=_((W4t,vue)=>{"use strict";var Mat=(t,e)=>{if(Number.isSafeInteger(t))t<0?_at(t,e):Uat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Uat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},_at=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Iue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Bue(a))}},Hat=t=>{let e=t[0],r=e===128?jat(t.slice(1,t.length)):e===255?qat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},qat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Iue(n):n===0?u=n:(o=!0,u=Bue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},jat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Iue=t=>(255^t)&255,Bue=t=>(255^t)+1&255;vue.exports={encode:Mat,parse:Hat}});var GE=_((K4t,Pue)=>{"use strict";var VU=KU(),jE=ve("path").posix,Sue=Due(),JU=Symbol("slurp"),ul=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=dh(e,r+100,8),this.uid=dh(e,r+108,8),this.gid=dh(e,r+116,8),this.size=dh(e,r+124,12),this.mtime=zU(e,r+136,12),this.cksum=dh(e,r+148,12),this[JU](o),this[JU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=dh(e,r+329,8),this.devmin=dh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=zU(e,r+476,12),this.ctime=zU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Gat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Nd(e,r,100,n)||this.needPax,this.needPax=mh(e,r+100,8,this.mode)||this.needPax,this.needPax=mh(e,r+108,8,this.uid)||this.needPax,this.needPax=mh(e,r+116,8,this.gid)||this.needPax,this.needPax=mh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Nd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Nd(e,r+265,32,this.uname)||this.needPax,this.needPax=Nd(e,r+297,32,this.gname)||this.needPax,this.needPax=mh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=mh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Nd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Nd(e,r+345,155,u)||this.needPax:(this.needPax=Nd(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),zU=(t,e,r)=>Yat(dh(t,e,r)),Yat=t=>t===null?null:new Date(t*1e3),dh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):Kat(t,e,r),Wat=t=>isNaN(t)?null:t,Kat=(t,e,r)=>Wat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Vat={12:8589934591,8:2097151},mh=(t,e,r,o)=>o===null?!1:o>Vat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Jat(t,e,r,o),!1),Jat=(t,e,r,o)=>t.write(zat(o,r),e,r,"ascii"),zat=(t,e)=>Xat(Math.floor(t).toString(8),e),Xat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:mh(t,e,r,o.getTime()/1e3),Zat=new Array(156).join("\0"),Nd=(t,e,r,o)=>o===null?!1:(t.write(o+Zat,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);Pue.exports=ZU});var ix=_((V4t,bue)=>{"use strict";var $at=GE(),elt=ve("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new $at({path:("PaxHeader/"+elt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(tlt(rlt(t),e),r);var tlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,rlt=t=>t.replace(/\n$/,"").split(` +`).reduce(nlt,Object.create(null)),nlt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};bue.exports=j1});var YE=_((J4t,xue)=>{xue.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var sx=_((z4t,kue)=>{"use strict";kue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_((Z4t,Que)=>{"use strict";var ox=["|","<",">","?",":"],$U=ox.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),ilt=new Map(ox.map((t,e)=>[t,$U[e]])),slt=new Map($U.map((t,e)=>[t,ox[e]]));Que.exports={encode:t=>ox.reduce((e,r)=>e.split(r).join(ilt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(slt.get(r)),t)}});var t3=_(($4t,Rue)=>{var{isAbsolute:olt,parse:Fue}=ve("path").win32;Rue.exports=t=>{let e="",r=Fue(t);for(;olt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Fue(t)}return[e,t]}});var Nue=_((eUt,Tue)=>{"use strict";Tue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var A3=_((nUt,Jue)=>{"use strict";var que=UE(),jue=ix(),Gue=GE(),oA=ve("fs"),Lue=ve("path"),sA=qE(),alt=YE(),Yue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),alt(e)+"/"+t):sA(t),llt=16*1024*1024,Oue=Symbol("process"),Mue=Symbol("file"),Uue=Symbol("directory"),n3=Symbol("symlink"),_ue=Symbol("hardlink"),G1=Symbol("header"),ax=Symbol("read"),i3=Symbol("lstat"),lx=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),yh=Symbol("close"),cx=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),aA=Symbol("prefix"),Hue=Symbol("hadError"),Wue=sx(),clt=e3(),Kue=t3(),Vue=Nue(),ux=Wue(class extends que{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||llt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=clt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Lue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[lx](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[Hue]=!0),super.emit(e,...r)}[i3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[lx](r)})}[lx](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Alt(e),this.emit("stat",e),this[Oue]()}[Oue](){switch(this.type){case"File":return this[Mue]();case"Directory":return this[Uue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[cx](e){return Vue(e,this.type==="Directory",this.portable)}[aA](e){return Yue(e,this.prefix)}[G1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Gue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[cx](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new jue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Uue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[G1](),this.end()}[n3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=sA(e),this[G1](),this.end()}[_ue](e){this.type="Link",this.linkpath=sA(Lue.relative(this.cwd,e)),this.stat.size=0,this[G1](),this.end()}[Mue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[_ue](r)}this.linkCache.set(e,this.absolute)}if(this[G1](),this.stat.size===0)return this.end();this[a3]()}[a3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[Hue])return this[yh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[ax]()}[ax](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[yh](()=>this.emit("error",u));this[s3](A)})}[yh](e){oA.close(this.fd,e)}[s3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[ax]()}}),u3=class extends ux{[i3](){this[lx](oA.lstatSync(this.absolute))}[n3](){this[o3](oA.readlinkSync(this.absolute))}[a3](){this[l3](oA.openSync(this.absolute,"r"))}[ax](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[yh](()=>{})}catch{}}}[c3](e){e()}[yh](e){oA.closeSync(this.fd),e()}},ult=Wue(class extends que{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[cx](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Gue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new jue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Yue(e,this.prefix)}[cx](e){return Vue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});ux.Sync=u3;ux.Tar=ult;var Alt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=ux});var Ex=_((sUt,rAe)=>{"use strict";var mx=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},flt=UE(),plt=GU(),hlt=rx(),C3=A3(),glt=C3.Sync,dlt=C3.Tar,mlt=IS(),zue=Buffer.alloc(1024),px=Symbol("onStat"),Ax=Symbol("ended"),lA=Symbol("queue"),WE=Symbol("current"),Ld=Symbol("process"),fx=Symbol("processing"),Xue=Symbol("processJob"),cA=Symbol("jobs"),f3=Symbol("jobDone"),hx=Symbol("addFSEntry"),Zue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),gx=Symbol("onreaddir"),dx=Symbol("pipe"),$ue=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),tAe=Symbol("write"),h3=Symbol("ondrain"),yx=ve("fs"),eAe=ve("path"),ylt=sx(),g3=qE(),w3=ylt(class extends flt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new plt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new mlt,this[cA]=0,this.jobs=+e.jobs||4,this[fx]=!1,this[Ax]=!1}[tAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[Ax]=!0,this[Ld](),this}write(e){if(this[Ax])throw new Error("write after end");return e instanceof hlt?this[Zue](e):this[hx](e),this.flowing}[Zue](e){let r=g3(eAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new mx(e.path,r,!1);o.entry=new dlt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[cA]+=1,this[lA].push(o)}this[Ld]()}[hx](e){let r=g3(eAe.resolve(this.cwd,e));this[lA].push(new mx(e,r)),this[Ld]()}[d3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";yx[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[px](e,a)})}[px](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Ld]()}[m3](e){e.pending=!0,this[cA]+=1,yx.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[gx](e,o)})}[gx](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Ld]()}[Ld](){if(!this[fx]){this[fx]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[$ue](e){this[cA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[WE]&&this[WE].entry&&this[WE].entry.resume()}[dx](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=glt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[px](e,yx[r](e.absolute))}[m3](e,r){this[gx](e,yx.readdirSync(e.absolute))}[dx](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[tAe](a)})}};w3.Sync=E3;rAe.exports=w3});var eC=_(W1=>{"use strict";var Elt=UE(),Clt=ve("events").EventEmitter,Qa=ve("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var ZE=Symbol("_autoClose"),Yc=Symbol("_close"),Y1=Symbol("_ended"),Gn=Symbol("_fd"),nAe=Symbol("_finished"),Ch=Symbol("_flags"),I3=Symbol("_flush"),D3=Symbol("_handleChunk"),S3=Symbol("_makeBuf"),vx=Symbol("_mode"),Cx=Symbol("_needDrain"),zE=Symbol("_onerror"),$E=Symbol("_onopen"),B3=Symbol("_onread"),VE=Symbol("_onwrite"),wh=Symbol("_open"),jf=Symbol("_path"),Od=Symbol("_pos"),uA=Symbol("_queue"),JE=Symbol("_read"),iAe=Symbol("_readSize"),Eh=Symbol("_reading"),wx=Symbol("_remain"),sAe=Symbol("_size"),Ix=Symbol("_write"),KE=Symbol("_writing"),Bx=Symbol("_defaultFlag"),XE=Symbol("_errored"),Dx=class extends Elt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[XE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[iAe]=r.readSize||16*1024*1024,this[Eh]=!1,this[sAe]=typeof r.size=="number"?r.size:1/0,this[wx]=this[sAe],this[ZE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[JE]():this[wh]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[wh](){Qa.open(this[jf],"r",(e,r)=>this[$E](e,r))}[$E](e,r){e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[JE]())}[S3](){return Buffer.allocUnsafe(Math.min(this[iAe],this[wx]))}[JE](){if(!this[Eh]){this[Eh]=!0;let e=this[S3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[Eh]=!1,e?this[zE](e):this[D3](r,o)&&this[JE]()}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[zE](e){this[Eh]=!0,this[Yc](),this.emit("error",e)}[D3](e,r){let o=!1;return this[wx]-=e,e>0&&(o=super.write(ethis[$E](e,r))}[$E](e,r){this[Bx]&&this[Ch]==="r+"&&e&&e.code==="ENOENT"?(this[Ch]="w",this[wh]()):e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[Y1]=!0,!this[KE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Y1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[KE]||this[uA].length?(this[uA].push(e),this[Cx]=!0,!1):(this[KE]=!0,this[Ix](e),!0)}[Ix](e){Qa.write(this[Gn],e,0,e.length,this[Od],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[zE](e):(this[Od]!==null&&(this[Od]+=r),this[uA].length?this[I3]():(this[KE]=!1,this[Y1]&&!this[nAe]?(this[nAe]=!0,this[Yc](),this.emit("finish")):this[Cx]&&(this[Cx]=!1,this.emit("drain"))))}[I3](){if(this[uA].length===0)this[Y1]&&this[VE](null,0);else if(this[uA].length===1)this[Ix](this[uA].pop());else{let e=this[uA];this[uA]=[],v3(this[Gn],e,this[Od],(r,o)=>this[VE](r,o))}}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},b3=class extends Sx{[wh](){let e;if(this[Bx]&&this[Ch]==="r+")try{e=Qa.openSync(this[jf],this[Ch],this[vx])}catch(r){if(r.code==="ENOENT")return this[Ch]="w",this[wh]();throw r}else e=Qa.openSync(this[jf],this[Ch],this[vx]);this[$E](null,e)}[Yc](){if(this[ZE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[Ix](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Od])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};W1.ReadStream=Dx;W1.ReadStreamSync=P3;W1.WriteStream=Sx;W1.WriteStreamSync=b3});var Rx=_((lUt,fAe)=>{"use strict";var wlt=sx(),Ilt=GE(),Blt=ve("events"),vlt=IS(),Dlt=1024*1024,Slt=rx(),oAe=ix(),Plt=GU(),x3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),Gf=Symbol("readEntry"),k3=Symbol("nextEntry"),aAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),K1=Symbol("globalExtendedHeader"),Ih=Symbol("meta"),lAe=Symbol("emitMeta"),fi=Symbol("buffer"),Yf=Symbol("queue"),Ud=Symbol("ended"),cAe=Symbol("emittedEnd"),_d=Symbol("emit"),Fa=Symbol("unzip"),Px=Symbol("consumeChunk"),bx=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),uAe=Symbol("consumeMeta"),AAe=Symbol("consumeHeader"),xx=Symbol("consuming"),F3=Symbol("bufferConcat"),R3=Symbol("maybeEnd"),V1=Symbol("writing"),Bh=Symbol("aborted"),kx=Symbol("onDone"),Hd=Symbol("sawValidEntry"),Qx=Symbol("sawNullBlock"),Fx=Symbol("sawEOF"),blt=t=>!0;fAe.exports=wlt(class extends Blt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Hd]=null,this.on(kx,r=>{(this[Xl]==="begin"||this[Hd]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(kx,e.ondone):this.on(kx,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Dlt,this.filter=typeof e.filter=="function"?e.filter:blt,this.writable=!0,this.readable=!1,this[Yf]=new vlt,this[fi]=null,this[Gf]=null,this[Md]=null,this[Xl]="begin",this[Ih]="",this[Zl]=null,this[K1]=null,this[Ud]=!1,this[Fa]=null,this[Bh]=!1,this[Qx]=!1,this[Fx]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[AAe](e,r){this[Hd]===null&&(this[Hd]=!1);let o;try{o=new Ilt(e,r,this[Zl],this[K1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Qx]?(this[Fx]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[_d]("eof")):(this[Qx]=!0,this[_d]("nullBlock"));else if(this[Qx]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Slt(o,this[Zl],this[K1]);if(!this[Hd])if(n.remain){let u=()=>{n.invalid||(this[Hd]=!0)};n.on("end",u)}else this[Hd]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[_d]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[Ih]="",n.on("data",u=>this[Ih]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[_d]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[Gf]?this[Yf].push(n):(this[Yf].push(n),this[k3]())))}}}[aAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[Gf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[Gf]=null,r=!1),r}[k3](){do;while(this[aAe](this[Yf].shift()));if(!this[Yf].length){let e=this[Gf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[uAe](e,r){let o=this[Md],a=this[Q3](e,r);return this[Md]||this[lAe](o),a}[_d](e,r,o){!this[Yf].length&&!this[Gf]?this.emit(e,r,o):this[Yf].push([e,r,o])}[lAe](e){switch(this[_d]("meta",this[Ih]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=oAe.parse(this[Ih],this[Zl],!1);break;case"GlobalExtendedHeader":this[K1]=oAe.parse(this[Ih],this[K1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[Ih].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[Ih].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Bh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Bh])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[Px](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Ud]=!0,this[Px]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[Px](e),this[V1]=!1;let r=this[Yf].length?!1:this[Gf]?this[Gf].flowing:!0;return!r&&!this[Yf].length&&this[Gf].once("drain",o=>this.emit("drain")),r}[F3](e){e&&!this[Bh]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[R3](){if(this[Ud]&&!this[cAe]&&!this[Bh]&&!this[xx]){this[cAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[_d](kx)}}[Px](e){if(this[xx])this[F3](e);else if(!e&&!this[fi])this[R3]();else{if(this[xx]=!0,this[fi]){this[F3](e);let r=this[fi];this[fi]=null,this[bx](r)}else this[bx](e);for(;this[fi]&&this[fi].length>=512&&!this[Bh]&&!this[Fx];){let r=this[fi];this[fi]=null,this[bx](r)}this[xx]=!1}(!this[fi]||this[Ud])&&this[R3]()}[bx](e){let r=0,o=e.length;for(;r+512<=o&&!this[Bh]&&!this[Fx];)switch(this[Xl]){case"begin":case"header":this[AAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[uAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var xlt=OE(),hAe=Rx(),tC=ve("fs"),klt=eC(),pAe=ve("path"),T3=YE();dAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=xlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Flt(o,e),o.noResume||Qlt(o),o.file&&o.sync?Rlt(o):o.file?Tlt(o,r):gAe(o)};var Qlt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Flt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||pAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(pAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Rlt=t=>{let e=gAe(t),r=t.file,o=!0,a;try{let n=tC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new hAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),tC.stat(a,(p,h)=>{if(p)A(p);else{let E=new klt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},gAe=t=>new hAe(t)});var IAe=_((uUt,wAe)=>{"use strict";var Nlt=OE(),Nx=Ex(),mAe=eC(),yAe=Tx(),EAe=ve("path");wAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Nlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Llt(o,e):o.file?Olt(o,e,r):o.sync?Mlt(o,e):Ult(o,e)};var Llt=(t,e)=>{let r=new Nx.Sync(t),o=new mAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),CAe(r,e)},Olt=(t,e,r)=>{let o=new Nx(t),a=new mAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return N3(o,e),r?n.then(r,r):n},CAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?yAe({file:EAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},N3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return yAe({file:EAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>N3(t,e));t.add(r)}t.end()},Mlt=(t,e)=>{let r=new Nx.Sync(t);return CAe(r,e),r},Ult=(t,e)=>{let r=new Nx(t);return N3(r,e),r}});var L3=_((AUt,xAe)=>{"use strict";var _lt=OE(),BAe=Ex(),Al=ve("fs"),vAe=eC(),DAe=Tx(),SAe=ve("path"),PAe=GE();xAe.exports=(t,e,r)=>{let o=_lt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Hlt(o,e):jlt(o,e,r)};var Hlt=(t,e)=>{let r=new BAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,qlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},qlt=(t,e,r,o,a)=>{let n=new vAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Glt(e,a)},jlt=(t,e,r)=>{e=Array.from(e);let o=new BAe(t),a=(u,A,p)=>{let h=(C,R)=>{C?Al.close(u,L=>p(C)):p(null,R)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),x=(C,R)=>{if(C)return h(C);if(I+=R,I<512&&R)return Al.read(u,v,I,v.length-I,E+I,x);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new PAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,x)};Al.read(u,v,0,512,E,x)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,x)=>{if(v)return Al.close(I,()=>A(v));a(I,x.size,(C,R)=>{if(C)return A(C);let L=new vAe.WriteStream(t.file,{fd:I,start:R});o.pipe(L),L.on("error",A),L.on("close",u),bAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Glt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?DAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},bAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return DAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>bAe(t,e));t.add(r)}t.end()}});var QAe=_((fUt,kAe)=>{"use strict";var Ylt=OE(),Wlt=L3();kAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Klt(o),Wlt(o,e,r)};var Klt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var TAe=_((pUt,RAe)=>{var{promisify:FAe}=ve("util"),vh=ve("fs"),Vlt=t=>{if(!t)t={mode:511,fs:vh};else if(typeof t=="object")t={mode:511,fs:vh,...t};else if(typeof t=="number")t={mode:t,fs:vh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:vh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||vh.mkdir,t.mkdirAsync=FAe(t.mkdir),t.stat=t.stat||t.fs.stat||vh.stat,t.statAsync=FAe(t.stat),t.statSync=t.statSync||t.fs.statSync||vh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||vh.mkdirSync,t};RAe.exports=Vlt});var LAe=_((hUt,NAe)=>{var Jlt=process.platform,{resolve:zlt,parse:Xlt}=ve("path"),Zlt=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=zlt(t),Jlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Xlt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=Zlt});var HAe=_((gUt,_Ae)=>{var{dirname:OAe}=ve("path"),MAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?MAe(t,OAe(e),e):void 0),UAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?UAe(t,OAe(e),e):void 0}};_Ae.exports={findMade:MAe,findMadeSync:UAe}});var U3=_((dUt,jAe)=>{var{dirname:qAe}=ve("path"),O3=(t,e,r)=>{e.recursive=!1;let o=qAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},M3=(t,e,r)=>{let o=qAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};jAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var WAe=_((mUt,YAe)=>{var{dirname:GAe}=ve("path"),{findMade:$lt,findMadeSync:ect}=HAe(),{mkdirpManual:tct,mkdirpManualSync:rct}=U3(),nct=(t,e)=>(e.recursive=!0,GAe(t)===t?e.mkdirAsync(t,e):$lt(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return tct(t,e);throw a}))),ict=(t,e)=>{if(e.recursive=!0,GAe(t)===t)return e.mkdirSync(t,e);let o=ect(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return rct(t,e);throw a}};YAe.exports={mkdirpNative:nct,mkdirpNativeSync:ict}});var zAe=_((yUt,JAe)=>{var KAe=ve("fs"),sct=process.version,_3=sct.replace(/^v/,"").split("."),VAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,oct=VAe?t=>t.mkdir===KAe.mkdir:()=>!1,act=VAe?t=>t.mkdirSync===KAe.mkdirSync:()=>!1;JAe.exports={useNative:oct,useNativeSync:act}});var rfe=_((EUt,tfe)=>{var rC=TAe(),nC=LAe(),{mkdirpNative:XAe,mkdirpNativeSync:ZAe}=WAe(),{mkdirpManual:$Ae,mkdirpManualSync:efe}=U3(),{useNative:lct,useNativeSync:cct}=zAe(),iC=(t,e)=>(t=nC(t),e=rC(e),lct(e)?XAe(t,e):$Ae(t,e)),uct=(t,e)=>(t=nC(t),e=rC(e),cct(e)?ZAe(t,e):efe(t,e));iC.sync=uct;iC.native=(t,e)=>XAe(nC(t),rC(e));iC.manual=(t,e)=>$Ae(nC(t),rC(e));iC.nativeSync=(t,e)=>ZAe(nC(t),rC(e));iC.manualSync=(t,e)=>efe(nC(t),rC(e));tfe.exports=iC});var cfe=_((CUt,lfe)=>{"use strict";var $l=ve("fs"),qd=ve("path"),Act=$l.lchown?"lchown":"chown",fct=$l.lchownSync?"lchownSync":"chownSync",ife=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),nfe=(t,e,r)=>{try{return $l[fct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},pct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},hct=ife?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=ife?(t,e,r)=>{try{return nfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;pct(t,e,r)}}:(t,e,r)=>nfe(t,e,r),gct=process.version,sfe=(t,e,r)=>$l.readdir(t,e,r),dct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(gct)&&(sfe=(t,e,r)=>$l.readdir(t,r));var Lx=(t,e,r,o)=>{$l[Act](t,e,r,hct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},ofe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(qd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,ofe(t,u,r,o,a)});if(e.isDirectory())q3(qd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=qd.resolve(t,e.name);Lx(u,r,o,a)});else{let n=qd.resolve(t,e.name);Lx(n,r,o,a)}},q3=(t,e,r,o)=>{sfe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Lx(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Lx(t,e,r,o)}};n.forEach(h=>ofe(t,h,e,r,p))})},mct=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(qd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&afe(qd.resolve(t,e.name),r,o),H3(qd.resolve(t,e.name),r,o)},afe=(t,e,r)=>{let o;try{o=dct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>mct(t,a,e,r)),H3(t,e,r)};lfe.exports=q3;q3.sync=afe});var pfe=_((wUt,j3)=>{"use strict";var ufe=rfe(),ec=ve("fs"),Ox=ve("path"),Afe=cfe(),Wc=qE(),Mx=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Ux=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},_x=(t,e)=>t.get(Wc(e)),J1=(t,e,r)=>t.set(Wc(e),r),yct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Ux(t,r&&r.code||"ENOTDIR")),e(r)})};j3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),x=(L,U)=>{L?r(L):(J1(I,t,!0),U&&p?Afe(U,u,A,J=>x(J)):n?ec.chmod(t,a,r):r())};if(I&&_x(I,t)===!0)return x();if(t===v)return yct(t,x);if(h)return ufe(t,{mode:a}).then(L=>x(null,L),x);let R=Wc(Ox.relative(v,t)).split("/");Hx(v,R,a,I,E,v,null,x)};var Hx=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ox.resolve(t+"/"+p));if(_x(o,h))return Hx(h,e,r,o,a,n,u,A);ec.mkdir(h,r,ffe(h,e,r,o,a,n,u,A))},ffe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())Hx(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,ffe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new Mx(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,Hx(t,e,r,o,a,n,u,A))},Ect=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Ux(t,r)}};j3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{J1(E,t,!0),L&&A&&Afe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&_x(E,t)===!0)return v();if(t===I)return Ect(I),v();if(p)return v(ufe.sync(t,o));let C=Wc(Ox.relative(I,t)).split("/"),R=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ox.resolve(U)),!_x(E,U))try{ec.mkdirSync(U,o),R=R||U,J1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){J1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),R=R||U,J1(E,U,!0);continue}else if(te.isSymbolicLink())return new Mx(U,U+"/"+C.join("/"))}return v(R)}});var Y3=_((IUt,hfe)=>{var G3=Object.create(null),{hasOwnProperty:Cct}=Object.prototype;hfe.exports=t=>(Cct.call(G3,t)||(G3[t]=t.normalize("NFKD")),G3[t])});var yfe=_((BUt,mfe)=>{var gfe=ve("assert"),wct=Y3(),Ict=YE(),{join:dfe}=ve("path"),Bct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,vct=Bct==="win32";mfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=dfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(x=>{let C=t.get(x);gfe.equal(C[0],h),C.length===1?t.delete(x):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(R=>v.add(R)))}),I.forEach(x=>{let C=t.get(x);gfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(x):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(x=>u(x)),!0};return{check:n,reserve:(h,E)=>{h=vct?["win32 parallelization disabled"]:h.map(v=>wct(Ict(dfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,x)=>v.concat(x)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let x=t.get(v);x?x.push(E):t.set(v,[E])}),I.forEach(v=>{let x=t.get(v);x?x[x.length-1]instanceof Set?x[x.length-1].add(E):x.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var wfe=_((vUt,Cfe)=>{var Dct=process.platform,Sct=Dct==="win32",Pct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:bct,O_TRUNC:xct,O_WRONLY:kct,UV_FS_O_FILEMAP:Efe=0}=Pct.constants,Qct=Sct&&!!Efe,Fct=512*1024,Rct=Efe|xct|bct|kct;Cfe.exports=Qct?t=>t"w"});var e_=_((DUt,Nfe)=>{"use strict";var Tct=ve("assert"),Nct=Rx(),vn=ve("fs"),Lct=eC(),Wf=ve("path"),Ffe=pfe(),Ife=e3(),Oct=yfe(),Mct=t3(),fl=qE(),Uct=YE(),_ct=Y3(),Bfe=Symbol("onEntry"),V3=Symbol("checkFs"),vfe=Symbol("checkFs2"),Gx=Symbol("pruneCache"),J3=Symbol("isReusable"),tc=Symbol("makeFs"),z3=Symbol("file"),X3=Symbol("directory"),Yx=Symbol("link"),Dfe=Symbol("symlink"),Sfe=Symbol("hardlink"),Pfe=Symbol("unsupported"),bfe=Symbol("checkPath"),Dh=Symbol("mkdir"),To=Symbol("onError"),qx=Symbol("pending"),xfe=Symbol("pend"),sC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),z1=Symbol("doChown"),X1=Symbol("uid"),Z1=Symbol("gid"),$1=Symbol("checkedCwd"),Rfe=ve("crypto"),Tfe=wfe(),Hct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,e2=Hct==="win32",qct=(t,e)=>{if(!e2)return vn.unlink(t,e);let r=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},jct=t=>{if(!e2)return vn.unlinkSync(t);let e=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},kfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Qfe=t=>_ct(Uct(fl(t))).toLowerCase(),Gct=(t,e)=>{e=Qfe(e);for(let r of t.keys()){let o=Qfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Yct=t=>{for(let e of t.keys())t.delete(e)},t2=class extends Nct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[$1]=!1,this.reservations=Oct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[qx]=0,this[W3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||e2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Wf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Bfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[qx]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[bfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||e2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Mct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Wf.isAbsolute(e.path)?e.absolute=fl(Wf.resolve(e.path)):e.absolute=fl(Wf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Wf.win32.parse(e.absolute);e.absolute=r+Ife.encode(e.absolute.substr(r.length));let{root:o}=Wf.win32.parse(e.path);e.path=o+Ife.encode(e.path.substr(o.length))}return!0}[Bfe](e){if(!this[bfe](e))return e.resume();switch(Tct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[V3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[Pfe](e)}}[To](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[sC](),r.resume())}[Dh](e,r,o){Ffe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[z1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[X1](e){return kfe(this.uid,e.uid,this.processUid)}[Z1](e){return kfe(this.gid,e.gid,this.processGid)}[z3](e,r){let o=e.mode&4095||this.fmode,a=new Lct.WriteStream(e.absolute,{flags:Tfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[To](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[To](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[To](h,e):this[sC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,x=>x?vn.utimes(h,I,v,C=>u(C&&x)):u())}if(this[z1](e)){n++;let I=this[X1](e),v=this[Z1](e);vn.fchown(E,I,v,x=>x?vn.chown(h,I,v,C=>u(C&&x)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[To](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[Dh](e.absolute,o,a=>{if(a){this[To](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[sC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[z1](e)&&(n++,vn.chown(e.absolute,this[X1](e),this[Z1](e),u)),u()})}[Pfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Dfe](e,r){this[Yx](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=fl(Wf.resolve(this.cwd,e.linkpath));this[Yx](e,o,"link",r)}[xfe](){this[qx]++}[sC](){this[qx]--,this[K3]()}[Z3](e){this[sC](),e.resume()}[J3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!e2}[V3](e){this[xfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[vfe](e,o))}[Gx](e){e.type==="SymbolicLink"?Yct(this.dirCache):e.type!=="Directory"&&Gct(this.dirCache,e.absolute)}[vfe](e,r){this[Gx](e);let o=A=>{this[Gx](e),r(A)},a=()=>{this[Dh](this.cwd,this.dmode,A=>{if(A){this[To](A,e),o();return}this[$1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Wf.dirname(e.absolute));if(A!==this.cwd)return this[Dh](A,this.dmode,p=>{if(p){this[To](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[J3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);qct(e.absolute,h=>this[tc](h,e,o))})};this[$1]?n():a()}[tc](e,r,o){if(e){this[To](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[z3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Dfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Yx](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[To](n,e):(this[sC](),e.resume()),a()})}},jx=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends t2{[tc](e,r){return super[tc](e,r,()=>{})}[V3](e){if(this[Gx](e),!this[$1]){let n=this[Dh](this.cwd,this.dmode);if(n)return this[To](n,e);this[$1]=!0}if(e.absolute!==this.cwd){let n=fl(Wf.dirname(e.absolute));if(n!==this.cwd){let u=this[Dh](n,this.dmode);if(u)return this[To](u,e)}}let[r,o]=jx(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[J3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?jx(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=jx(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:jx(()=>jct(e.absolute));this[tc](a,e)}[z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[To](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Tfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[To](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[z1](e)){let h=this[X1](e),E=this[Z1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[Dh](e.absolute,o);if(a){this[To](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[z1](e))try{vn.chownSync(e.absolute,this[X1](e),this[Z1](e))}catch{}r(),e.resume()}[Dh](e,r){try{return Ffe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Yx](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[To](n,e)}}};t2.Sync=$3;Nfe.exports=t2});var _fe=_((SUt,Ufe)=>{"use strict";var Wct=OE(),Wx=e_(),Ofe=ve("fs"),Mfe=eC(),Lfe=ve("path"),t_=YE();Ufe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Wct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Kct(o,e),o.file&&o.sync?Vct(o):o.file?Jct(o,r):o.sync?zct(o):Xct(o)};var Kct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Lfe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Lfe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},Vct=t=>{let e=new Wx.Sync(t),r=t.file,o=Ofe.statSync(r),a=t.maxReadSize||16*1024*1024;new Mfe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Jct=(t,e)=>{let r=new Wx(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ofe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Mfe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},zct=t=>new Wx.Sync(t),Xct=t=>new Wx(t)});var Hfe=_(us=>{"use strict";us.c=us.create=IAe();us.r=us.replace=L3();us.t=us.list=Tx();us.u=us.update=QAe();us.x=us.extract=_fe();us.Pack=Ex();us.Unpack=e_();us.Parse=Rx();us.ReadEntry=rx();us.WriteEntry=A3();us.Header=GE();us.Pax=ix();us.types=KU()});var r_,qfe,Sh,r2,n2,jfe=Et(()=>{r_=$e(id()),qfe=ve("worker_threads"),Sh=Symbol("kTaskInfo"),r2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},n2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new qfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Sh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Sh].resolve(r),e[Sh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Sh]?.reject(r),e[Sh]=null}),e.on("exit",r=>{r!==0&&e[Sh]?.reject(new Error(`Worker exited with code ${r}`)),e[Sh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Sh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Yfe=_((kUt,Gfe)=>{var n_;Gfe.exports.getContent=()=>(typeof n_>"u"&&(n_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Xi={};Vt(Xi,{convertToZip:()=>tut,convertToZipWorker:()=>o_,extractArchiveTo:()=>zfe,getDefaultTaskPool:()=>Vfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>eut});function Zct(t,e){switch(t){case"async":return new r2(o_,{poolSize:e});case"workers":return new n2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Vfe(){return typeof i_>"u"&&(i_=Zct("workers",Ji.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?Vfe():ol($ct,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new r2(o_,{poolSize:r});case"workers":return new n2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await zfe(u,n,a),n.saveAndClose(),e}async function eut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=V.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=V.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function tut(t,e={}){let r=await oe.mktempPromise(),o=V.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*rut(t){let e=new Kfe.default.Parse,r=new Wfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of rut(t)){if(a(n))continue;let u=V.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=V.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Wfe,Kfe,s_,i_,$ct,Xfe=Et(()=>{Ye();St();nA();Wfe=ve("stream"),Kfe=$e(Hfe());jfe();ql();s_=$e(Yfe());$ct=new WeakMap});var $fe=_((a_,Zfe)=>{(function(t,e){typeof a_=="object"?Zfe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,x,C,R=A.slice(0);if(R.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){x=++v===L.length,r(U,n[U],x,R,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Vt($s,{emitList:()=>nut,emitTree:()=>npe,treeNodeToJson:()=>rpe,treeNodeToTreeify:()=>tpe});function tpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,x=[];typeof E<"u"&&x.push(yd(e,E,2)),typeof I<"u"&&x.push(Mt(e,I[0],I[1])),x.length===0&&x.push(yd(e,`${p}`,2));let C=x.join(": ").trim(),R=`\0${o++}\0`,L=u[`${R}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function rpe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Ed(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[iut(n)]=e(u));return typeof r.value>"u"?a:{value:Ed(r.value[0],r.value[1]),children:a}};return e(t)}function nut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));npe({children:a},{configuration:e,stdout:r,json:o})}function npe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(rpe(A))} +`);return}let n=(0,epe.asTree)(tpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function iut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var epe,ipe=Et(()=>{epe=$e($fe());jl()});function i2(t){let e=t.match(sut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var spe,l_,c_,Kx,Lr,sut,u_=Et(()=>{Ye();St();St();nA();spe=ve("crypto"),l_=$e(ve("fs"));Yl();nh();ql();bo();c_=Jy(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Kx=Jy(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,spe.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Kx,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${lE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=i2(r).hash.slice(0,10);return`${lE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=i2(e);if(r===null||r{let he=new zi,Be=V.join(Bt.root,nM(e));return he.mkdirSync(Be,{recursive:!0}),he.writeJsonSync(V.join(Be,dr.manifest),{name:fn(e),mocked:!0}),he},E=async(he,{isColdHit:Be,controlPath:we=null})=>{if(we===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?i2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await NP(he)}`:r;if(we!==null){let le=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await NP(we)}`:r;if(Ee!==le)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let Se=null;switch(r!==null&&Ee!==r&&(this.check?Se="throw":i2(r).cacheKey!==i2(Ee).cacheKey?Se="update":Se=this.configuration.get("checksumBehavior")),Se){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async he=>{if(!n)throw new Error(`Cache check required but no loader configured for ${qr(this.configuration,e)}`);let Be=await n(),we=Be.getRealPath();Be.saveAndClose(),await oe.chmodPromise(we,420);let g=await E(he,{controlPath:we,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let he=await n(),Be=he.getRealPath();return he.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:A}},x=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${qr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${qr(this.configuration,e)}`);let{path:he,source:Be}=await v(),{hash:we}=await E(he,{isColdHit:!0}),g=this.getLocatorPath(e,we),Ee=[];Be!=="mirror"&&A!==null&&Ee.push(async()=>{let le=`${A}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let le=`${g}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,g)});let Se=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(le=>le())),[!1,Se,we]},C=async()=>{let Be=(async()=>{let we=u.unstablePackages?.has(e.locatorHash),g=we||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,Se=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),le=Se||Ee,ne=le?o:a;if(ne&&ne(),le){let ee=null,Ie=g;if(!Se)if(this.check)ee=await I(Ie);else{let Fe=await E(Ie,{isColdHit:!1});if(Fe.isValid)ee=Fe.hash;else return x()}return[Se,Ie,ee]}else{if(this.immutable&&we)throw new zt(56,`Cache entry required but missing for ${qr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return x()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let he;he=this.mutexes.get(e.locatorHash);)await he;let[R,L,U]=await C();R||this.markedFiles.add(L);let J,te=R?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),ae=new iy(()=>EL(()=>J=te(),he=>`Failed to open the cache entry for ${qr(this.configuration,e)}: ${he}`),V),fe=new Uu(L,{baseFs:ae,pathUtils:V}),ce=()=>{J?.discardAndClose()},me=u.unstablePackages?.has(e.locatorHash)?null:U;return[fe,ce,me]}},sut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var Vx,ope=Et(()=>{Vx=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(Vx||{})});var out,oC,A_=Et(()=>{St();Nl();Qf();bo();out=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>_P({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],oC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=V.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=s1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=xa(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,R]of out){let L=I.match(C);if(L){v=R(E,...L);break}}if(!v){r.reportWarning(14,`${jn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let x=h;try{let C=Bd(h.range),R=s1(C.selector,!0);R&&(x=R)}catch{}u.set(h.descriptorHash,Qs(x,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,ape=Et(()=>{Yl();O1();jl();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;XI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var aC,f_=Et(()=>{bo();aC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OP(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OP(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Kf(){}function aut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nx.length?R:x}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function lut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function cut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function upe(t,e,r){return r=cut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function uut(t,e,r){return y_.diff(t,e,r)}function Jx(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Jx=function(e){return typeof e}:Jx=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jx(t)}function p_(t){return put(t)||hut(t)||gut(t)||dut()}function put(t){if(Array.isArray(t))return h_(t)}function hut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function gut(t,e){if(!!t){if(typeof t=="string")return h_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=uut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],x=1,C=1,R=function(J){var te=A[J],ae=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=ae,te.added||te.removed){var fe;if(!E){var ce=A[J-1];E=x,I=C,ce&&(v=u.context>0?p(ce.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(fe=v).push.apply(fe,p_(ae.map(function(le){return(te.added?"+":"-")+le}))),te.added?C+=ae.length:x+=ae.length}else{if(E)if(ae.length<=u.context*2&&J=A.length-2&&ae.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),Se=ae.length==0&&v.length>we.oldLines;!g&&Se&&r.length>0&&v.splice(we.oldLines,0,"\\ No newline at end of file"),(!g&&!Se||!Ee)&&v.push("\\ No newline at end of file")}h.push(we),E=0,I=0,v=[]}x+=ae.length,C+=ae.length}},L=0;L{Kf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(R){return a?(setTimeout(function(){a(void 0,R)},0),!0):R}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function x(){for(var R=-1*h;R<=h;R+=2){var L=void 0,U=I[R-1],J=I[R+1],te=(J?J.newPos:0)-R;U&&(I[R-1]=void 0);var ae=U&&U.newPos+1=A&&te+1>=p)return u(aut(n,L.components,r,e,n.useLongestToken));I[R]=L}h++}if(a)(function R(){setTimeout(function(){if(h>E)return a();x()||R()},0)})();else for(;h<=E;){var C=x();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};s2.equals=function(t,e){return Kf.prototype.equals.call(s2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Kf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var ppe=_((s3t,fpe)=>{var yut=Hl(),Eut=pE(),Cut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wut=/^\w*$/;function Iut(t,e){if(yut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Eut(t)?!0:wut.test(t)||!Cut.test(t)||e!=null&&t in Object(e)}fpe.exports=Iut});var dpe=_((o3t,gpe)=>{var hpe=_S(),But="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(But);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||hpe),r}C_.Cache=hpe;gpe.exports=C_});var ype=_((a3t,mpe)=>{var vut=dpe(),Dut=500;function Sut(t){var e=vut(t,function(o){return r.size===Dut&&r.clear(),o}),r=e.cache;return e}mpe.exports=Sut});var w_=_((l3t,Epe)=>{var Put=ype(),but=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xut=/\\(\\)?/g,kut=Put(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(but,function(r,o,a,n){e.push(a?n.replace(xut,"$1"):o||r)}),e});Epe.exports=kut});var jd=_((c3t,Cpe)=>{var Qut=Hl(),Fut=ppe(),Rut=w_(),Tut=N1();function Nut(t,e){return Qut(t)?t:Fut(t,e)?[t]:Rut(Tut(t))}Cpe.exports=Nut});var lC=_((u3t,wpe)=>{var Lut=pE(),Out=1/0;function Mut(t){if(typeof t=="string"||Lut(t))return t;var e=t+"";return e=="0"&&1/t==-Out?"-0":e}wpe.exports=Mut});var zx=_((A3t,Ipe)=>{var Uut=jd(),_ut=lC();function Hut(t,e){e=Uut(e,t);for(var r=0,o=e.length;t!=null&&r{var qut=rP(),jut=jd(),Gut=_I(),Bpe=il(),Yut=lC();function Wut(t,e,r,o){if(!Bpe(t))return t;e=jut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Kut=zx(),Vut=I_(),Jut=jd();function zut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Xut(t,e){return t!=null&&e in Object(t)}Ppe.exports=Xut});var B_=_((g3t,xpe)=>{var Zut=jd(),$ut=OI(),eAt=Hl(),tAt=_I(),rAt=YS(),nAt=lC();function iAt(t,e,r){e=Zut(e,t);for(var o=-1,a=e.length,n=!1;++o{var sAt=bpe(),oAt=B_();function aAt(t,e){return t!=null&&oAt(t,e,sAt)}kpe.exports=aAt});var Rpe=_((m3t,Fpe)=>{var lAt=Spe(),cAt=Qpe();function uAt(t,e){return lAt(t,e,function(r,o){return cAt(t,o)})}Fpe.exports=uAt});var Ope=_((y3t,Lpe)=>{var Tpe=pd(),AAt=OI(),fAt=Hl(),Npe=Tpe?Tpe.isConcatSpreadable:void 0;function pAt(t){return fAt(t)||AAt(t)||!!(Npe&&t&&t[Npe])}Lpe.exports=pAt});var _pe=_((E3t,Upe)=>{var hAt=jS(),gAt=Ope();function Mpe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=gAt),a||(a=[]);++n0&&r(A)?e>1?Mpe(A,e-1,r,o,a):hAt(a,A):o||(a[a.length]=A)}return a}Upe.exports=Mpe});var qpe=_((C3t,Hpe)=>{var dAt=_pe();function mAt(t){var e=t==null?0:t.length;return e?dAt(t,1):[]}Hpe.exports=mAt});var v_=_((w3t,jpe)=>{var yAt=qpe(),EAt=AL(),CAt=fL();function wAt(t){return CAt(EAt(t,void 0,yAt),t+"")}jpe.exports=wAt});var D_=_((I3t,Gpe)=>{var IAt=Rpe(),BAt=v_(),vAt=BAt(function(t,e){return t==null?{}:IAt(t,e)});Gpe.exports=vAt});var Xx,Ype=Et(()=>{Yl();Xx=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,S_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Wpe,cC,P_=Et(()=>{St();Wpe=$e(RP());fE();vd();jl();nh();Qf();bo();cC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=V.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Wpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=V.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(V.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${a1(this.project.configuration,this)} (${Mt(this.project.configuration,V.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&V.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=xa(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${V.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&i1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=V.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function kAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map(t.workspaces.map(ce=>{let me=ce.anchoredLocator.locatorHash,he=o.get(me);if(typeof he>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,e1(he)]})),U=()=>{let ce=oe.mktempSync(),me=V.join(ce,"stacktrace.log"),he=String(E.length+1).length,Be=E.map((we,g)=>`${`${g+1}.`.padStart(he," ")} ${ba(we)} +`).join("");throw oe.writeFileSync(me,Be),oe.detachTemp(ce),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(me)}`)},J=ce=>{let me=r.get(ce.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let he=o.get(me);if(!he)throw new Error("Assertion failed: The package could not be found");return he},te=(ce,me,he,{top:Be,optional:we})=>{E.length>1e3&&U(),E.push(me);let g=ae(ce,me,he,{top:Be,optional:we});return E.pop(),g},ae=(ce,me,he,{top:Be,optional:we})=>{if(we||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=o.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${qr(t.configuration,me)}) should have been registered`);let Ee=[],Se=[],le=[],ne=[],ee=[];for(let Fe of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Fe.identHash)&&g.locatorHash!==Be)continue;if(bf(Fe))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(Fe.descriptorHash);let At=we;if(!At){let Te=g.dependenciesMeta.get(fn(Fe));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(At=!0)}}let H=r.get(Fe.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${jn(t.configuration,Fe)}) should have been registered`);let at=L.get(H)||o.get(H);if(!at)throw new Error(`Assertion failed: The package (${H}, resolved from ${jn(t.configuration,Fe)}) should have been registered`);if(at.peerDependencies.size===0){te(Fe,at,new Map,{top:Be,optional:At});continue}let Re,ke,xe=new Set,He;Se.push(()=>{Re=tM(Fe,me.locatorHash),ke=rM(at,me.locatorHash),g.dependencies.delete(Fe.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,ke.locatorHash),e.set(Re.descriptorHash,Re),o.set(ke.locatorHash,ke),Ee.push([at,Re,ke])}),le.push(()=>{He=new Map;for(let Te of ke.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&n1(me,Te)&&(ce.identHash===me.identHash?Je=ce:(Je=In(me,ce.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,me.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&ke.dependencies.has(Te.identHash)){ke.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),ke.dependencies.set(Je.identHash,Je),bf(Je)&&md(x,Je.descriptorHash).add(ke.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&xe.add(Je.identHash),He.set(Te.identHash,he.get(Te.identHash)??ke.locatorHash)}ke.dependencies=new Map(ks(ke.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(ke.locatorHash))return;let Te=h.get(at.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(at.locatorHash),qe=typeof Je<"u"?Je+1:1;h.set(at.locatorHash,qe),te(Re,ke,He,{top:Be,optional:At}),h.set(at.locatorHash,qe-1)}),ee.push(()=>{let Te=g.dependencies.get(Fe.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(md(R,Je).add(me.locatorHash),!!o.has(ke.locatorHash)){for(let qe of ke.peerDependencies.values()){let b=He.get(qe.identHash);if(typeof b>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Yy(Wy(C,b),fn(qe)).push(ke.locatorHash)}for(let qe of xe)ke.dependencies.delete(qe)}})}for(let Fe of[...Se,...le])Fe();let Ie;do{Ie=!0;for(let[Fe,At,H]of Ee){let at=Wy(v,Fe.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${jn(t.configuration,Te)} to have been registered`);return Je===Be?`${Je} (top)`:Je}),At.identHash),ke=at.get(Re);if(typeof ke>"u"){at.set(Re,At);continue}if(ke===At)continue;o.delete(H.locatorHash),e.delete(At.descriptorHash),r.delete(At.descriptorHash),a.delete(H.locatorHash);let xe=x.get(At.descriptorHash)||[],He=[g.locatorHash,...xe];x.delete(At.descriptorHash);for(let Te of He){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(At.identHash).descriptorHash!==ke.descriptorHash&&(Ie=!1),Je.dependencies.set(At.identHash,ke))}}}while(!Ie);for(let Fe of[...ne,...ee])Fe()};for(let ce of t.workspaces){let me=ce.anchoredLocator;p.delete(ce.anchoredDescriptor.descriptorHash),te(ce.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}let fe=new Map;for(let[ce,me]of R){let he=o.get(ce);if(typeof he>"u")throw new Error("Assertion failed: Expected the root to be registered");let Be=C.get(ce);if(!(typeof Be>"u"))for(let we of me){let g=o.get(we);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,Se]of Be){let le=Js(Ee);if(g.peerDependencies.has(le.identHash))continue;let ne=`p${zs(we,Ee,ce).slice(0,5)}`;u.set(ne,{subject:we,requested:le,rootRequester:ce,allRequesters:Se});let ee=he.dependencies.get(le.identHash);if(typeof ee<"u"){let Ie=J(ee),Fe=Ie.version??"0.0.0",At=new Set;for(let at of Se){let Re=o.get(at);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let ke=Re.peerDependencies.get(le.identHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the ident to be registered");At.add(ke.range)}if(![...At].every(at=>{if(at.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;at=at.slice(Xn.protocol.length),(at==="^"||at==="~")&&(at="*")}return kf(Fe,at)})){let at=ol(fe,Ie.locatorHash,()=>({type:2,requested:le,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:Fe,hash:`p${Ie.locatorHash.slice(0,5)}`}));at.dependents.set(g.locatorHash,g),at.requesters.set(he.locatorHash,he);for(let Re of Se)at.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:le,requester:he,version:Fe,hash:ne,requirementCount:Se.length})}}else he.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:le,requester:he,hash:ne})}}}A.push(...fe.values())}function QAt(t,e){let r=wL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=sM(u),h=p?cE(t.configuration,p):Mt(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${o1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Mt(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${qr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Mt(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Mt(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Mt(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>Xy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>Xy.default(u)))e.reportWarning(2,n)})}var Zx,$x,ek,Jpe,k_,x_,Q_,tk,DAt,SAt,Kpe,PAt,bAt,xAt,pl,b_,rk,Vpe,Pt,zpe=Et(()=>{St();St();Nl();qt();Zx=ve("crypto");E_();$x=$e(D_()),ek=$e(id()),Jpe=$e(zn()),k_=ve("util"),x_=$e(ve("v8")),Q_=$e(ve("zlib"));u_();S1();A_();f_();fE();uM();Yl();Ype();O1();S_();vd();P_();WP();jl();nh();ql();vb();BU();Qf();bo();tk=Jy(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),DAt=3,SAt=/ *, */g,Kpe=/\/$/,PAt=32,bAt=(0,k_.promisify)(Q_.default.gzip),xAt=(0,k_.promisify)(Q_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),b_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},rk=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(rk||{}),Vpe=t=>zs(`${DAt}`,t),Pt=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(V.join(n,dr.manifest))){o=n;break}a=V.dirname(n)}let u=new Pt(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((C,R)=>C+R.manifest.dependencies.size+R.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Mt(e,u.cwd,yt.PATH),E=Mt(e,V.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,x=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Mt(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Mt(e,u.cwd,yt.PATH)}. + +${[I,v,x].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=V.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=Vpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Ot;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,x=p.linkType.toUpperCase(),C=p.conditions??null,R=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let fe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,fe)}let ae={...h,version:I,languageName:v,linkType:x,conditions:C,dependencies:R,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(ae.locatorHash,ae);for(let fe of A.split(SAt)){let ce=ih(fe);n<=6&&(ce=this.configuration.normalizeDependency(ce),ce=In(ce,ce.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ce.descriptorHash,ce),this.storedResolutions.set(ce.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,ek.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new cC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){V.isAbsolute(e)||(e=V.resolve(this.cwd,e)),e=V.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)V.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!xa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(bf(e)&&(e=t1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${jn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=r1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${qr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)bf(o)&&e.dependencies.set(r,t1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Kpe,"")!==e.replace(Kpe,""))continue;return A}}return null}async loadUserConfig(){let e=V.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&Df(e).setup();let r=V.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?Df(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!n1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new oC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Xx(a)]:[n,a],A=new Dd([new aC(a),...u]),p=new Dd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],ae=M4(),fe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async le=>{let ne=async H=>{let at=await Ky(async()=>await A.resolve(H,E),He=>`${qr(this.configuration,H)}: ${He}`);if(!i1(H,at))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${qr(this.configuration,H)} to ${qr(this.configuration,at)})`);C.set(at.locatorHash,at),!r.delete(at.locatorHash)&&!this.tryWorkspaceByLocator(at)&&o.push(at);let ke=await this.preparePackage(at,{resolver:A,resolveOptions:E}),xe=Uc([...ke.dependencies.values()].map(He=>At(He)));return te.push(xe),xe.catch(()=>{}),v.set(ke.locatorHash,ke),ke},ee=async H=>{let at=R.get(H.locatorHash);if(typeof at<"u")return at;let Re=Promise.resolve().then(()=>ne(H));return R.set(H.locatorHash,Re),Re},Ie=async(H,at)=>{let Re=await At(at);return I.set(H.descriptorHash,H),x.set(H.descriptorHash,Re.locatorHash),Re},Fe=async H=>{le.setTitle(jn(this.configuration,H));let at=this.resolutionAliases.get(H.descriptorHash);if(typeof at<"u")return Ie(H,this.storedDescriptors.get(at));let Re=A.getResolutionDependencies(H,E),ke=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let qe=A.bindDescriptor(Je,U,E),b=await At(qe);return J.add(b.locatorHash),[Te,b]}))),He=(await Ky(async()=>await A.getCandidates(H,ke,E),Te=>`${jn(this.configuration,H)}: ${Te}`))[0];if(typeof He>"u")throw new zt(82,`${jn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,ke,[He],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===He.locatorHash))throw new zt(78,`Invalid resolution ${ZI(this.configuration,H,He)}`)}return I.set(H.descriptorHash,H),x.set(H.descriptorHash,He.locatorHash),ee(He)},At=H=>{let at=L.get(H.descriptorHash);if(typeof at<"u")return at;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>Fe(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let at=H.anchoredDescriptor;te.push(At(at))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let ce=sl(r.values(),le=>this.tryWorkspaceByLocator(le)?sl.skip:le);if(o.length>0||ce.length>0){let le=new Set(this.workspaces.flatMap(H=>{let at=v.get(H.anchoredLocator.locatorHash);if(!at)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(at.dependencies.values(),Re=>{let ke=x.get(Re.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),ne=H=>le.has(H.locatorHash)?"0":"1",ee=H=>ba(H),Ie=ks(o,[ne,ee]),Fe=ks(ce,[ne,ee]),At=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"+",yt.ADDED)} ${cP(this.configuration,Ie,At)}`),Fe.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"-",yt.REMOVED)} ${cP(this.configuration,Fe,At)}`)}let me=new Set(this.resolutionAliases.values()),he=new Set(v.keys()),Be=new Set,we=new Map,g=[];kAt({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:he,peerRequirements:we,peerWarnings:g,allDescriptors:I,allResolutions:x,allPackages:v});for(let le of J)he.delete(le);for(let le of me)I.delete(le),x.delete(le);let Ee=new Set,Se=new Set;for(let le of v.values())le.conditions!=null&&(!he.has(le.locatorHash)||(qP(le,fe)||(qP(le,ae)&&e.report.reportWarningOnce(77,`${qr(this.configuration,le)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Mt(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),Se.add(le.locatorHash)),Ee.add(le.locatorHash)));this.storedResolutions=x,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Be,this.conditionalLocators=Ee,this.disabledLocators=Se,this.originalPackages=C,this.optionalBuilds=he,this.peerRequirements=we,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");return ba(R)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,ek.default)(PAt);if(await Uc(h.map(C=>v(async()=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");if(Hc(R))return;let L;try{L=await A.fetch(R,p)}catch(U){U.message=`${qr(this.configuration,R)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(R.locatorHash,L.checksum):this.storedChecksums.delete(R.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let x=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||x){let R=(await Promise.all([...r.cacheMisses].map(async ce=>{let me=this.storedPackages.get(ce),he=this.storedChecksums.get(ce)??null,Be=e.getLocatorPath(me,he);return(await oe.statPromise(Be)).size}))).reduce((ce,me)=>ce+me,0)-(x?.size??0),L=r.cacheMisses.size,U=x?.count??0,J=`${nP(L,{zero:"No new packages",one:"A package was",more:`${Mt(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nP(U,{zero:"none were",one:"one was",more:`${Mt(this.configuration,U,yt.NUMBER)} were`})} removed`,ae=R!==0?` (${Mt(this.configuration,R,yt.SIZE_DIFF)})`:"",fe=U>0?L>0?`${J}, and ${te}${ae}.`:`${J}, but ${te}${ae}.`:`${J}${ae}.`;r.reportInfo(13,fe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(le=>{let ne=le.makeInstaller(h),ee=le.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[le,ne]})),I=new Map,v=new Map,x=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async le=>{let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[le,await u.fetch(ne,A)]}))),R=[],L=new Set,U=[];for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],Fe=H=>{Ie.push(H)},At=this.tryWorkspaceByLocator(ne);if(At!==null){let H=[],{scripts:at}=At.manifest;for(let ke of["preinstall","install","postinstall"])at.has(ke)&&H.push({type:0,script:ke});try{for(let[ke,xe]of E)if(ke.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:Fe})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=V.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&x.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(ke=>ke.supportsPackage(ne,h));if(!H)throw new zt(12,`${qr(this.configuration,ne)} isn't supported by any available linker`);let at=E.get(H);if(!at)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await at.installPackage(ne,ee,{holdFetchResult:Fe})}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):x.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(Fe,At)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${qr(this.configuration,ne)}) should have been registered`);let at=[];for(let Re of ne.dependencies.values()){let ke=this.storedResolutions.get(Re.descriptorHash);if(typeof ke>"u")throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Re)}, from ${qr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(ke);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${jn(this.configuration,Re)}) should have been registered`);let He=this.tryWorkspaceByLocator(xe)===null?I.get(ke):null;if(typeof He>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${jn(this.configuration,Re)}) should have been registered`);He===Fe||He===null?v.get(xe.locatorHash)!==null&&at.push([Re,xe]):!ee&&H!==null&&Yy(J,ke).push(H)}H!==null&&await At.attachInternalDependencies(ne,at)};if(ee)for(let[Fe,At]of E)Fe.supportsPackage(ne,h)&&await Ie(Fe,At);else{let Fe=I.get(ne.locatorHash);if(!Fe)throw new Error("Assertion failed: The linker should have been found");let At=E.get(Fe);if(!At)throw new Error("Assertion failed: The installer should have been registered");await Ie(Fe,At)}}for(let[le,ne]of J){let ee=this.storedPackages.get(le);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let Fe=E.get(Ie);if(!Fe)throw new Error("Assertion failed: The installer should have been registered");await Fe.attachExternalDependents(ee,ne)}let te=new Map;for(let[le,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):x.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(le.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(R),a==="skip-build")return;for(let[,le]of ks(U,([ne])=>ba(ne)))le(r);let ae=new Set(this.storedPackages.keys()),fe=new Set(x.keys());for(let le of fe)ae.delete(le);let ce=(0,Zx.createHash)("sha512");ce.update(process.versions.node),await this.configuration.triggerHook(le=>le.globalHashGeneration,this,le=>{ce.update("\0"),ce.update(le)});let me=ce.digest("hex"),he=new Map,Be=le=>{let ne=he.get(le.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(le.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,Zx.createHash)("sha512");Ie.update(le.locatorHash),he.set(le.locatorHash,"");for(let Fe of ee.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(typeof At>"u")throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Fe)}) should have been registered`);let H=this.storedPackages.get(At);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(Be(H))}return ne=Ie.digest("hex"),he.set(le.locatorHash,ne),ne},we=(le,ne)=>{let ee=(0,Zx.createHash)("sha512");ee.update(me),ee.update(Be(le));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,Se=le=>{let ne=new Set([le.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let Fe of Ie.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(!At)throw new Error(`Assertion failed: The resolution (${jn(this.configuration,Fe)}) should have been registered`);if(At!==le.locatorHash&&fe.has(At))return!1;let H=this.storedPackages.get(At);if(!H)throw new Error("Assertion failed: The package should have been registered");let at=this.tryWorkspaceByLocator(H);if(at){if(at.anchoredLocator.locatorHash!==le.locatorHash&&fe.has(at.anchoredLocator.locatorHash))return!1;ne.add(at.anchoredLocator.locatorHash)}ne.add(At)}}return!0};for(;fe.size>0;){let le=fe.size,ne=[];for(let ee of fe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!Se(Ie))continue;let Fe=x.get(Ie.locatorHash);if(!Fe)throw new Error("Assertion failed: The build directive should have been registered");let At=we(Ie,Fe.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===At){g.set(Ie.locatorHash,At),fe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${qr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${qr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=Fe.buildLocations.map(async at=>{if(!V.isAbsolute(at))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${at})`);for(let Re of Fe.buildDirectives){let ke=`# This file contains the result of Yarn building a package (${ba(Ie)}) +`;switch(Re.type){case 0:ke+=`# Script name: ${Re.script} +`;break;case 1:ke+=`# Script code: ${Re.script} +`;break}let xe=null;if(!await oe.mktempPromise(async Te=>{let Je=V.join(Te,"build.log"),{stdout:qe,stderr:b}=this.configuration.getSubprocessStreams(Je,{header:ke,prefix:qr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Wb(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break;case 1:w=await EU(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:qe,stderr:b});break}}catch(F){b.write(F.stack),w=1}if(qe.end(),b.end(),w===0)return!0;oe.detachTemp(Te);let P=`${qr(this.configuration,Ie)} couldn't be built successfully (exit code ${Mt(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Mt(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,P):r.reportError(9,P),Kce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(at=>{fe.delete(ee),at.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,At)}))}if(await Uc(ne),le===fe.size){let ee=Array.from(fe).map(Ie=>{let Fe=this.storedPackages.get(Ie);if(!Fe)throw new Error("Assertion failed: The package should have been registered");return qr(this.configuration,Fe)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=V.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{QAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let x=Mt(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${x}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${x}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=_g(u,this.generateLockfile());if(E!==u){let I=Ape(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let x of v.lines)x.startsWith("+")?e.report.reportError(28,Mt(this.configuration,x,yt.ADDED)):x.startsWith("-")?e.report.reportError(28,Mt(this.configuration,x,yt.REMOVED)):e.report.reportInfo(null,Mt(this.configuration,x,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(Ed(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>LP(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Mt(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>LP(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:tk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let I of u){let v=this.storedDescriptors.get(I);if(!v)throw new Error("Assertion failed: The descriptor should have been registered");p.push(v)}let h=p.map(I=>Pa(I)).sort().join(", "),E=new Ot;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:ba(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Ba(r)}async persistLockfile(){let e=V.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=_g(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=Vpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(b_))e.push(...u);let r=(0,$x.default)(this,e),o=x_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(V.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await bAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await xAt(await oe.readFilePromise(a));n=x_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,$x.default)(n,b_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,$x.default)(n,b_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,ek.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=V.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Mt(this.configuration,V.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function FAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var uC,Xpe=Et(()=>{St();L1();nh();Ib();ql();Qf();uC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&rn?kf(rn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){md(this.values,e).add(r)}reportEnumerator(e,r){md(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Wy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return V.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=FAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(V.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let x=v;x.userId=I,x.reportType="primary";for(let L of Object.keys(x.enumerators??{}))x.enumerators[L]=x.enumerators[L].length;E(x);let C=new Map,R=20;for(let[L,U]of Object.entries(x.values))U.length>0&&C.set(L,U.slice(0,R));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(V.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var o2={};Vt(o2,{BuildDirectiveType:()=>Vx,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>Kx,Cache:()=>Lr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>G4,FormatType:()=>xle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>v1,LOCKFILE_VERSION:()=>tk,LegacyMigrationResolver:()=>oC,LightReport:()=>AA,LinkType:()=>zy,LockfileResolver:()=>aC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>hE,PackageExtensionStatus:()=>BL,PackageExtensionType:()=>IL,PeerWarningType:()=>rk,Project:()=>Pt,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>D1,StreamReport:()=>Nt,TAG_REGEXP:()=>FE,TelemetryManager:()=>uC,ThrowReport:()=>Qi,VirtualFetcher:()=>gE,WindowsLinkType:()=>xb,Workspace:()=>cC,WorkspaceFetcher:()=>mE,WorkspaceResolver:()=>Xn,YarnVersion:()=>rn,execUtils:()=>Ur,folderUtils:()=>YP,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>nn,miscUtils:()=>_e,nodeUtils:()=>Ji,parseMessageName:()=>AS,reportOptionDeprecations:()=>LE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Db();WP();jl();nh();Ib();ql();vb();BU();Qf();bo();Xfe();ipe();u_();S1();S1();ope();A_();ape();f_();fE();fS();cM();zpe();Yl();O1();Xpe();S_();AM();fM();vd();P_();L1();Cne()});var nhe=_((K_t,l2)=>{"use strict";var TAt=process.env.TERM_PROGRAM==="Hyper",NAt=process.platform==="win32",ehe=process.platform==="linux",F_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},the=Object.assign({},F_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),rhe=Object.assign({},F_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:ehe?"\u25B8":"\u276F",pointerSmall:ehe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});l2.exports=NAt&&!TAt?the:rhe;Reflect.defineProperty(l2.exports,"common",{enumerable:!1,value:F_});Reflect.defineProperty(l2.exports,"windows",{enumerable:!1,value:the});Reflect.defineProperty(l2.exports,"other",{enumerable:!1,value:rhe})});var Kc=_((V_t,R_)=>{"use strict";var LAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),OAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ihe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=OAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!LAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=nhe(),t.define=a,t};R_.exports=ihe();R_.exports.create=ihe});var No=_(sn=>{"use strict";var MAt=Object.prototype.toString,rc=Kc(),she=!1,T_=[],ohe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};sn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);sn.hasColor=t=>!!t&&rc.hasColor(t);var ik=sn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);sn.nativeType=t=>MAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");sn.isAsyncFn=t=>sn.nativeType(t)==="asyncfunction";sn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";sn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;sn.scrollDown=(t=[])=>[...t.slice(1),t[0]];sn.scrollUp=(t=[])=>[t.pop(),...t];sn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};sn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};sn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};sn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};sn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};sn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";sn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+sn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};sn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[ohe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ohe[o];return a&&rc["bg"+sn.pascal(a)]||t}return rc.none};sn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};sn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!sn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};sn.mixin=(t,e)=>{if(!ik(t))return e;if(!ik(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ik(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ik(a.value)?t[r]=sn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};sn.merge=(...t)=>{let e={};for(let r of t)sn.mixin(e,r);return e};sn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?sn.define(t,o,a.bind(e)):sn.define(t,o,a)}};sn.onExit=t=>{let e=(r,o)=>{she||(she=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};sn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};sn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var ahe=_(hC=>{"use strict";hC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};hC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};hC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};hC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};hC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var uhe=_((X_t,che)=>{"use strict";var lhe=ve("readline"),UAt=ahe(),_At=/^(?:\x1b)([a-zA-Z0-9])$/,HAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,qAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function jAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function GAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var sk=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=_At.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=HAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=qAt[n],o.shift=jAt(n)||o.shift,o.ctrl=GAt(n)||o.ctrl}return o};sk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=lhe.createInterface({terminal:!0,input:r});lhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,sk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};sk.action=(t,e,r)=>{let o={...UAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};che.exports=sk});var fhe=_((Z_t,Ahe)=>{"use strict";Ahe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),YAt(t,r,o)}};function YAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var hhe=_(($_t,phe)=>{"use strict";var{define:WAt,width:KAt}=No(),N_=class{constructor(e){let r=e.options;WAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=KAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};phe.exports=N_});var dhe=_((e8t,ghe)=>{"use strict";var L_=No(),eo=Kc(),O_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||L_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||L_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=L_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};ghe.exports=O_});var yhe=_((t8t,mhe)=>{"use strict";var M_=process.platform==="win32",Vf=Kc(),VAt=No(),U_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};U_.merge=t=>{let e=VAt.merge({},Vf.symbols,U_,t.symbols);return delete e.merge,e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var JAt=dhe(),zAt=yhe(),XAt=No();Ehe.exports=t=>{t.options=XAt.merge({},t.options.theme,t.options),t.symbols=zAt.merge(t.options),t.styles=JAt.merge(t.options)}});var Dhe=_((Bhe,vhe)=>{"use strict";var whe=process.env.TERM_PROGRAM==="Apple_Terminal",ZAt=Kc(),__=No(),Vc=vhe.exports=Bhe,Di="\x1B[",Ihe="\x07",H_=!1,Ph=Vc.code={bell:Ihe,beep:Ihe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(whe?"8":"u"),savePosition:Di+(whe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},Gd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,Ph.hide},show(){return H_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Gd.left(-t):t>0?Gd.right(t):"",r+=e<0?Gd.up(-e):e>0?Gd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},q_=Vc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return q_.line+Gd.to(0);let r=n=>[...ZAt.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(q_.line+Gd.prevLine()).repeat(a-1)+q_.line+Gd.to(0)}});var gC=_((n8t,Phe)=>{"use strict";var $At=ve("events"),She=Kc(),j_=uhe(),eft=fhe(),tft=hhe(),rft=Che(),Ra=No(),Yd=Dhe(),c2=class extends $At{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,rft(this),eft(this),this.state=new tft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=ift(this.options.margin),this.setMaxListeners(0),nft(this)}async keypress(e,r={}){this.keypressed=!0;let o=j_.action(e,j_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Yd.code.beep)}cursorHide(){this.stdout.write(Yd.cursor.hide()),Ra.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Yd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Yd.cursor.down(e)+Yd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Yd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,x=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ra.isObject(e)&&(e=e[o.status]||e.pending),Ra.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ra.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ra.isObject(n)&&(n=n[o.status]||n.pending),Ra.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ra.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ra.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ra.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ra.resolve(this,e,...r)}get base(){return c2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ra.height(this.stdout,25)}get width(){return this.options.columns||Ra.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function nft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function ift(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}Phe.exports=c2});var khe=_((i8t,xhe)=>{"use strict";var sft=No(),bhe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return bhe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};xhe.exports=(t,e={})=>{let r=sft.merge({},bhe,e.roles);return r[t]||r.default}});var u2=_((s8t,Rhe)=>{"use strict";var oft=Kc(),aft=gC(),lft=khe(),ok=No(),{reorder:G_,scrollUp:cft,scrollDown:uft,isObject:Qhe,swap:Aft}=ok,Y_=class extends aft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Qhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=lft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,ok.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,oft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Fhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=G_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=G_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=G_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=cft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=uft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Aft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Qhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ok.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Fhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Fhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ok.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Rhe.exports=Y_});var bh=_((o8t,The)=>{"use strict";var fft=u2(),W_=No(),K_=class extends fft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};The.exports=K_});var Lhe=_((a8t,Nhe)=>{"use strict";var pft=bh(),hft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},V_=class extends pft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=hft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=V_});var z_=_((l8t,Ohe)=>{"use strict";var J_=No();Ohe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=J_.inverse(t.styles.primary),h=R=>p(t.styles.black(R)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=R=>R,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=J_.isPrimitive(o)?`${o}`:"",r=J_.isPrimitive(r)?`${r}`:"";let x=o&&o.startsWith(r)&&o!==r,C=x?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),x){let R=t.styles.unstyle(E+C);return E+C+A(o.slice(R.length))}return E+C}});var ak=_((c8t,Mhe)=>{"use strict";var gft=Kc(),dft=bh(),mft=z_(),X_=class extends dft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:x}=a,C=p,R=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,ae=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(ae="danger");let fe=a[ae],ce=fe(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),he=()=>[me,ce,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=gft.unstyle(J),h=I(h),C="",he();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=mft(this,{input:h,initial:u,pos:n,showCursor:R,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),R&&(J=v(J)),e.error?h+=(h?" ":"")+x(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),he()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Mhe.exports=X_});var Z_=_((u8t,_he)=>{"use strict";var yft=ak(),Eft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Uhe=(t=Eft)=>{class e extends yft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Uhe(o)}}return e};_he.exports=Uhe()});var jhe=_((A8t,qhe)=>{"use strict";var Cft=Z_();function wft(t,e){return t.username===this.options.username&&t.password===this.options.password}var Hhe=(t=wft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Cft.create(t){constructor(a){super({...a,choices:e})}static create(a){return Hhe(a)}}return r};qhe.exports=Hhe()});var lk=_((f8t,Ghe)=>{"use strict";var Ift=gC(),{isPrimitive:Bft,hasColor:vft}=No(),$_=class extends Ift{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return Bft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return vft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Ghe.exports=$_});var Whe=_((p8t,Yhe)=>{"use strict";var Dft=lk(),e8=class extends Dft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Yhe.exports=e8});var Vhe=_((h8t,Khe)=>{"use strict";var Sft=bh(),Pft=ak(),dC=Pft.prototype,t8=class extends Sft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():dC.dispatch.call(this,e,r)}append(e,r){return dC.append.call(this,e,r)}delete(e,r){return dC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?dC.next.call(this):super.next()}prev(){return this.focused.editable?dC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?dC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Khe.exports=t8});var Wd=_((g8t,Jhe)=>{"use strict";var bft=gC(),xft=z_(),{isPrimitive:kft}=No(),r8=class extends bft{constructor(e){super(e),this.initial=kft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):xft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Jhe.exports=r8});var Xhe=_((d8t,zhe)=>{"use strict";var Qft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),ck=t=>Qft(t).filter(Boolean);zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:ck([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:ck([...n,r]),present:u};case"save":return{past:ck([...o,r]),present:""};case"remove":return u=ck(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((m8t,$he)=>{"use strict";var Fft=Wd(),Zhe=Xhe(),n8=class extends Fft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Zhe(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Zhe("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};$he.exports=n8});var t0e=_((y8t,e0e)=>{"use strict";var Rft=Wd(),s8=class extends Rft{format(){return""}};e0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Tft=Wd(),o8=class extends Tft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};r0e.exports=o8});var s0e=_((C8t,i0e)=>{"use strict";var Nft=bh(),a8=class extends Nft{constructor(e){super({...e,multiple:!0})}};i0e.exports=a8});var c8=_((w8t,o0e)=>{"use strict";var Lft=Wd(),l8=class extends Lft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};o0e.exports=l8});var l0e=_((I8t,a0e)=>{a0e.exports=c8()});var u0e=_((B8t,c0e)=>{"use strict";var Oft=Wd(),u8=class extends Oft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};c0e.exports=u8});var p0e=_((v8t,f0e)=>{"use strict";var Mft=Kc(),Uft=u2(),A0e=No(),A8=class extends Uft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!A0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=Mft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let x=A0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),x=x.map(C=>this.styles.info(C))),x[0]+=E,this.linebreak&&x.push(""),[p+a,x.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),x=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&x!=null&&(u+=this.styles.danger(x)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};f0e.exports=A8});var d0e=_((D8t,g0e)=>{"use strict";var h0e=Kc(),_ft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=_ft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Hft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],x=C=>{C.line=h,u.push(C)};for(x({type:"bos",value:""});Eae.name===U.key);U.field=a.find(ae=>ae.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let R=u[u.length-1];R.type==="text"&&R.line===h?R.value+=C:x({type:"text",value:C})}return x({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};g0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Hft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let x=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,ae,fe)=>{let ce=await h(J,te,ae,fe);return ce===!1?"Invalid field "+ae.name:ce};for(let J of a){let te=J.value,ae=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let fe=n.find(we=>we.name===ae);e.required===!0&&I.required.add(fe.name);let ce=[fe.input,I.values[fe.value],fe.value,te].find(E),he=(fe.field||{}).message||J.inner;if(v){let we=await C(I.values[ae],I,fe,x);if(we&&typeof we=="string"||we===!1){I.invalid.set(ae,we);continue}I.invalid.delete(ae);let g=await A(I.values[ae],I,fe,x);I.output+=h0e.unstyle(g);continue}fe.placeholder=!1;let Be=te;te=await p(te,I,fe,x),ce!==te?(I.values[ae]=ce,te=t.styles.typing(ce),I.missing.delete(he)):(I.values[ae]=void 0,ce=`<${he}>`,te=t.styles.primary(ce),fe.placeholder=!0,I.required.has(ae)&&I.missing.add(he)),I.missing.has(he)&&I.validating&&(te=t.styles.warning(ce)),I.invalid.has(ae)&&I.validating&&(te=t.styles.danger(ce)),x===I.index&&(Be!==te?te=t.styles.underline(te):te=t.styles.heading(h0e.unstyle(te))),x++}te&&(I.output+=te)}let R=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{R[te][0]===" "&&(R[te]=I.styles.danger(I.symbols.bullet)+R[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=R.join(` +`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var y0e=_((S8t,m0e)=>{"use strict";var qft=Kc(),jft=d0e(),Gft=gC(),h8=class extends Gft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await jft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",x=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",R=await this.format(C),L=await this.footer();R&&(h+=" "+R),v&&!R&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,x,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=qft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};m0e.exports=h8});var C0e=_((P8t,E0e)=>{"use strict";var Yft="(Use + to sort)",Wft=bh(),g8=class extends Wft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Yft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};E0e.exports=g8});var I0e=_((b8t,w0e)=>{"use strict";var Kft=u2(),d8=class extends Kft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=Vft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),x=this.indent(e),C=x+e.scale.map((te,ae)=>h(ae===e.scaleIdx)).join(A),R=te=>te===e.scaleIdx?I(te):te,L=x+e.scale.map((te,ae)=>R(ae)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function Vft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{B0e.exports=i8()});var S0e=_((k8t,D0e)=>{"use strict";var Jft=lk(),m8=class extends Jft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};D0e.exports=m8});var b0e=_((Q8t,P0e)=>{"use strict";var zft=bh(),y8=class extends zft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};P0e.exports=y8});var k0e=_(E8=>{"use strict";var x0e=No(),As=(t,e)=>{x0e.defineExport(E8,t,e),x0e.defineExport(E8,t.toLowerCase(),e)};As("AutoComplete",()=>Lhe());As("BasicAuth",()=>jhe());As("Confirm",()=>Whe());As("Editable",()=>Vhe());As("Form",()=>ak());As("Input",()=>i8());As("Invisible",()=>t0e());As("List",()=>n0e());As("MultiSelect",()=>s0e());As("Numeral",()=>l0e());As("Password",()=>u0e());As("Scale",()=>p0e());As("Select",()=>bh());As("Snippet",()=>y0e());As("Sort",()=>C0e());As("Survey",()=>I0e());As("Text",()=>v0e());As("Toggle",()=>S0e());As("Quiz",()=>b0e())});var F0e=_((R8t,Q0e)=>{Q0e.exports={ArrayPrompt:u2(),AuthPrompt:Z_(),BooleanPrompt:lk(),NumberPrompt:c8(),StringPrompt:Wd()}});var f2=_((T8t,T0e)=>{"use strict";var R0e=ve("assert"),w8=ve("events"),xh=No(),Jc=class extends w8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}R0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];R0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||gC()}static get prompts(){return k0e()}static get types(){return F0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new w8),e}};xh.mixinEmitter(Jc,new w8);var C8=Jc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>C8[t]})}var A2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};A2("ArrayPrompt");A2("AuthPrompt");A2("BooleanPrompt");A2("NumberPrompt");A2("StringPrompt");T0e.exports=Jc});var d2=_((dHt,H0e)=>{var rpt=zx();function npt(t,e,r){var o=t==null?void 0:rpt(t,e);return o===void 0?r:o}H0e.exports=npt});var G0e=_((IHt,j0e)=>{function ipt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var spt=dd(),opt=zS();function apt(t,e){return t&&spt(e,opt(e),t)}Y0e.exports=apt});var V0e=_((vHt,K0e)=>{var lpt=dd(),cpt=Gy();function upt(t,e){return t&&lpt(e,cpt(e),t)}K0e.exports=upt});var z0e=_((DHt,J0e)=>{var Apt=dd(),fpt=GS();function ppt(t,e){return Apt(t,fpt(t),e)}J0e.exports=ppt});var P8=_((SHt,X0e)=>{var hpt=jS(),gpt=tP(),dpt=GS(),mpt=WN(),ypt=Object.getOwnPropertySymbols,Ept=ypt?function(t){for(var e=[];t;)hpt(e,dpt(t)),t=gpt(t);return e}:mpt;X0e.exports=Ept});var $0e=_((PHt,Z0e)=>{var Cpt=dd(),wpt=P8();function Ipt(t,e){return Cpt(t,wpt(t),e)}Z0e.exports=Ipt});var b8=_((bHt,ege)=>{var Bpt=YN(),vpt=P8(),Dpt=Gy();function Spt(t){return Bpt(t,Dpt,vpt)}ege.exports=Spt});var rge=_((xHt,tge)=>{var Ppt=Object.prototype,bpt=Ppt.hasOwnProperty;function xpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&bpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}tge.exports=xpt});var ige=_((kHt,nge)=>{var kpt=$S();function Qpt(t,e){var r=e?kpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}nge.exports=Qpt});var oge=_((QHt,sge)=>{var Fpt=/\w*$/;function Rpt(t){var e=new t.constructor(t.source,Fpt.exec(t));return e.lastIndex=t.lastIndex,e}sge.exports=Rpt});var Age=_((FHt,uge)=>{var age=pd(),lge=age?age.prototype:void 0,cge=lge?lge.valueOf:void 0;function Tpt(t){return cge?Object(cge.call(t)):{}}uge.exports=Tpt});var pge=_((RHt,fge)=>{var Npt=$S(),Lpt=ige(),Opt=oge(),Mpt=Age(),Upt=oL(),_pt="[object Boolean]",Hpt="[object Date]",qpt="[object Map]",jpt="[object Number]",Gpt="[object RegExp]",Ypt="[object Set]",Wpt="[object String]",Kpt="[object Symbol]",Vpt="[object ArrayBuffer]",Jpt="[object DataView]",zpt="[object Float32Array]",Xpt="[object Float64Array]",Zpt="[object Int8Array]",$pt="[object Int16Array]",eht="[object Int32Array]",tht="[object Uint8Array]",rht="[object Uint8ClampedArray]",nht="[object Uint16Array]",iht="[object Uint32Array]";function sht(t,e,r){var o=t.constructor;switch(e){case Vpt:return Npt(t);case _pt:case Hpt:return new o(+t);case Jpt:return Lpt(t,r);case zpt:case Xpt:case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:return Upt(t,r);case qpt:return new o;case jpt:case Wpt:return new o(t);case Gpt:return Opt(t);case Ypt:return new o;case Kpt:return Mpt(t)}}fge.exports=sht});var gge=_((THt,hge)=>{var oht=GI(),aht=Ju(),lht="[object Map]";function cht(t){return aht(t)&&oht(t)==lht}hge.exports=cht});var Ege=_((NHt,yge)=>{var uht=gge(),Aht=WS(),dge=KS(),mge=dge&&dge.isMap,fht=mge?Aht(mge):uht;yge.exports=fht});var wge=_((LHt,Cge)=>{var pht=GI(),hht=Ju(),ght="[object Set]";function dht(t){return hht(t)&&pht(t)==ght}Cge.exports=dht});var Dge=_((OHt,vge)=>{var mht=wge(),yht=WS(),Ige=KS(),Bge=Ige&&Ige.isSet,Eht=Bge?yht(Bge):mht;vge.exports=Eht});var x8=_((MHt,xge)=>{var Cht=HS(),wht=G0e(),Iht=rP(),Bht=W0e(),vht=V0e(),Dht=sL(),Sht=eP(),Pht=z0e(),bht=$0e(),xht=zN(),kht=b8(),Qht=GI(),Fht=rge(),Rht=pge(),Tht=aL(),Nht=Hl(),Lht=UI(),Oht=Ege(),Mht=il(),Uht=Dge(),_ht=zS(),Hht=Gy(),qht=1,jht=2,Ght=4,Sge="[object Arguments]",Yht="[object Array]",Wht="[object Boolean]",Kht="[object Date]",Vht="[object Error]",Pge="[object Function]",Jht="[object GeneratorFunction]",zht="[object Map]",Xht="[object Number]",bge="[object Object]",Zht="[object RegExp]",$ht="[object Set]",e0t="[object String]",t0t="[object Symbol]",r0t="[object WeakMap]",n0t="[object ArrayBuffer]",i0t="[object DataView]",s0t="[object Float32Array]",o0t="[object Float64Array]",a0t="[object Int8Array]",l0t="[object Int16Array]",c0t="[object Int32Array]",u0t="[object Uint8Array]",A0t="[object Uint8ClampedArray]",f0t="[object Uint16Array]",p0t="[object Uint32Array]",ri={};ri[Sge]=ri[Yht]=ri[n0t]=ri[i0t]=ri[Wht]=ri[Kht]=ri[s0t]=ri[o0t]=ri[a0t]=ri[l0t]=ri[c0t]=ri[zht]=ri[Xht]=ri[bge]=ri[Zht]=ri[$ht]=ri[e0t]=ri[t0t]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=!0;ri[Vht]=ri[Pge]=ri[r0t]=!1;function Ak(t,e,r,o,a,n){var u,A=e&qht,p=e&jht,h=e&Ght;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Mht(t))return t;var E=Nht(t);if(E){if(u=Fht(t),!A)return Sht(t,u)}else{var I=Qht(t),v=I==Pge||I==Jht;if(Lht(t))return Dht(t,A);if(I==bge||I==Sge||v&&!a){if(u=p||v?{}:Tht(t),!A)return p?bht(t,vht(u,t)):Pht(t,Bht(u,t))}else{if(!ri[I])return a?t:{};u=Rht(t,I,A)}}n||(n=new Cht);var x=n.get(t);if(x)return x;n.set(t,u),Uht(t)?t.forEach(function(L){u.add(Ak(L,e,r,L,t,n))}):Oht(t)&&t.forEach(function(L,U){u.set(U,Ak(L,e,r,U,t,n))});var C=h?p?kht:xht:p?Hht:_ht,R=E?void 0:C(t);return wht(R||t,function(L,U){R&&(U=L,L=t[U]),Iht(u,U,Ak(L,e,r,U,t,n))}),u}xge.exports=Ak});var k8=_((UHt,kge)=>{var h0t=x8(),g0t=1,d0t=4;function m0t(t){return h0t(t,g0t|d0t)}kge.exports=m0t});var Q8=_((_Ht,Qge)=>{var y0t=I_();function E0t(t,e,r){return t==null?t:y0t(t,e,r)}Qge.exports=E0t});var Lge=_((WHt,Nge)=>{var C0t=Object.prototype,w0t=C0t.hasOwnProperty;function I0t(t,e){return t!=null&&w0t.call(t,e)}Nge.exports=I0t});var Mge=_((KHt,Oge)=>{var B0t=Lge(),v0t=B_();function D0t(t,e){return t!=null&&v0t(t,e,B0t)}Oge.exports=D0t});var _ge=_((VHt,Uge)=>{function S0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Uge.exports=S0t});var qge=_((JHt,Hge)=>{var P0t=zx(),b0t=pU();function x0t(t,e){return e.length<2?t:P0t(t,b0t(e,0,-1))}Hge.exports=x0t});var R8=_((zHt,jge)=>{var k0t=jd(),Q0t=_ge(),F0t=qge(),R0t=lC();function T0t(t,e){return e=k0t(e,t),t=F0t(t,e),t==null||delete t[R0t(Q0t(e))]}jge.exports=T0t});var T8=_((XHt,Gge)=>{var N0t=R8();function L0t(t,e){return t==null?!0:N0t(t,e)}Gge.exports=L0t});var Jge=_((S6t,U0t)=>{U0t.exports={name:"@yarnpkg/cli",version:"4.1.1",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var j8=_((n5t,ade)=>{"use strict";ade.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var cde=_((i5t,lde)=>{"use strict";var igt=j8();function sgt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=igt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}lde.exports=sgt});var fde=_((s5t,Ade)=>{"use strict";var ogt=cde();function agt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var lgt=agt(ogt),cgt="text/plain",ugt="us-ascii",ude=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Agt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,x=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(x=x.toLowerCase(),x===ugt)?"":`${v}${x?`=${x}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==cgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function fgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return Agt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,x=a.pathname.slice(A,v);p+=x.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];ude(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])ude(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var G8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>G8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=fgt(t,e));let a=lgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};G8.MAX_INPUT_LENGTH=2048;Ade.exports=G8});var gde=_((o5t,hde)=>{"use strict";var pgt=j8();function pde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=pgt(t);if(t=t.substring(t.indexOf("://")+3),pde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var hgt=fde(),dde=gde();function ggt(t){var e=hgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),dde(e.protocols)||e.protocols.length===0&&dde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}mde.exports=ggt});var Cde=_((l5t,Ede)=>{"use strict";var dgt=yde();function Y8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=dgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return Y8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var x=a.length>n&&a[n+1]==="-"?n+1:n;a.length>x+2&&["raw","src","blob","tree","edit"].indexOf(a[x+1])>=0&&(r.filepathtype=a[x+1],r.ref=a[x+2],a.length>x+3&&(r.filepath=a.slice(x+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,R=C.exec(r.pathname);return R!=null&&(r.source="bitbucket-server",R[1]==="users"?r.owner="~"+R[2]:r.owner=R[2],r.organization=r.owner,r.name=R[3],a=R[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?mgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+ygt(t)+a;default:return t.href}};function mgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function ygt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ede.exports=Y8});var Lde=_((H9t,Nde)=>{var xgt=Hb(),kgt=eP(),Qgt=Hl(),Fgt=pE(),Rgt=w_(),Tgt=lC(),Ngt=N1();function Lgt(t){return Qgt(t)?xgt(t,Tgt):Fgt(t)?[t]:kgt(Rgt(Ngt(t)))}Nde.exports=Lgt});function _gt(t,e){return e===1&&Ugt.has(t[0])}function B2(t){let e=Array.isArray(t)?t:(0,Ude.default)(t);return e.map((o,a)=>Ogt.test(o)?`[${o}]`:Mgt.test(o)&&!_gt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Hgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function gk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(x=>({text:x,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[x,C]of p){if(C.size>1){let R=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Hgt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,x,de.Type.CODE)}; conflicting values are:${R}`,fixable:!1})}else{let[[R]]=C,L=(0,Ode.default)(v,x);if(JSON.stringify(L)===JSON.stringify(R))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}`:typeof R>"u"?`Extraneous field ${de.pretty(t.configuration,x,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof R>"u"?(0,_de.default)(v,x):(0,Mde.default)(v,x,R),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Hde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:_e.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=_e.sortMap(r.children,o=>o.value[1]),r}var Ode,Mde,Ude,_de,wC,Ogt,Mgt,Ugt,v2=Et(()=>{Ye();Ode=$e(d2()),Mde=$e(Q8()),Ude=$e(Lde()),_de=$e(T8()),wC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;_e.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Ogt=/^[0-9]+$/,Mgt=/^[a-zA-Z0-9_]+$/,Ugt=new Set(["scripts",...Ot.allDependencies])});var qde=_(($9t,sH)=>{var qgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),x=I.length-1;x>=0;x--)v=new t.type.Term(".",[new t.type.Term("-",[I[x],I[x].pair]),v]),delete I[x].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,x=0;x=0;x--)I=new t.type.Term(".",[E[x],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(qgt)});var nme=_(Yr=>{"use strict";var $d=process.platform==="win32",oH="aes-256-cbc",jgt="sha256",Yde="The current environment doesn't support interactive reading from TTY.",Yn=ve("fs"),jde=process.binding("tty_wrap").TTY,lH=ve("child_process"),c0=ve("path"),cH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},zf="none",Xc,BC,Gde=!1,l0,mk,aH,Ggt=0,hH="",Zd=[],yk,Wde=!1,uH=!1,D2=!1;function Kde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return mk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Ygt(t,e){function r(U){var J,te="",ae;for(aH=aH||ve("os").tmpdir();;){J=c0.join(aH,U+te);try{ae=Yn.openSync(J,"wx")}catch(fe){if(fe.code==="EEXIST"){te++;continue}else throw fe}Yn.closeSync(ae);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),x=ve("crypto"),C,R,L;C=x.createHash(jgt),C.update(""+process.pid+Ggt+++Math.random()),L=C.digest("hex"),R=x.createDecipher(oH,L),o=Kde(t),$d?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+l0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+l0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),D2&&D2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=R.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+R.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Yde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Wgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(l0||($d?process.env.PSModulePath?(l0="powershell.exe",mk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(l0="cscript.exe",mk=["//nologo",__dirname+"\\read.cs.js"]):(l0="/bin/sh",mk=[__dirname+"/read.sh"])),$d&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=Kde(t),D2&&D2("execFileSync",e);try{r.input=lH.execFileSync(l0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Yde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=l0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Ygt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Wgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof zf=="string")if(zf=null,$d){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),zf=process.stdin.fd,BC=process.stdin._handle;else try{zf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),BC=new jde(zf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{zf=Yn.openSync("/dev/tty","r"),BC=process.stdin._handle}catch{}}else try{zf=Yn.openSync("/dev/tty","r"),BC=new jde(zf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;yk="";function x(C){return C===Gde?!0:BC.setRawMode(C)!==0?!1:(Gde=C,!0)}if(Wde||!BC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!x(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(zf,p,0,h)}catch(C){if(C.code!=="EOF"){x(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),yk+=I):(I=` +`,yk+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),x(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function Kgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Rs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Kgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=c0.normalize($d?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=c0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",$d?"i":""),"~")}function vC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Vde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,x;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(x=I.charCodeAt(0),v&&v===n&&x===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=x),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Jde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function zde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Vde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Jde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=c0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Zd[Zd.length-n]||"")}return r}function Xde(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(x){return x==="charlist"?r.text:x==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=vC(e.charlist?e.charlist+"":"$",Xde),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Vde([u],n.caseSensitive,!0),r.text=Jde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function eme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Rs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return eme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return eme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Rs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var x=c0.resolve(I+=v+c0.sep);if(!Yn.existsSync(x))Yn.mkdirSync(x);else if(!Yn.statSync(x).isDirectory())throw new Error("Non directory already exists: "+x);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):c0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(c0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function tme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Rs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Rs({hideEchoBack:!1,history:!0},t,{prompt:function(){return $d?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function rme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Rs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return rme(t,e)};Yr.keyInYNStrict=function(t,e){return rme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Rs({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Rs({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return yk};function S2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return S2("print",arguments)};Yr.setPrompt=function(){return S2("prompt",arguments)};Yr.setEncoding=function(){return S2("encoding",arguments)};Yr.setMask=function(){return S2("mask",arguments)};Yr.setBufferSize=function(){return S2("bufferSize",arguments)}});var mH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,P,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:P,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,P){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,P){return w.get_flag("char_conversion").id==="on"?P.replace(/./g,function(y){return w.get_char_conversion(y)}):P}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var P,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,P=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else P=this.text;if(/^\s*$/.test(P))return null;for(;P!=="";){var Pe=[],Ne=!1;if(/^\n/.exec(P)!==null){F++,z=0,y++,P=P.replace(/\n/,""),Z=!0;continue}for(var ot in R)if(R.hasOwnProperty(ot)){var dt=R[ot].exec(P);dt&&Pe.push({value:dt[0],name:ot,matches:dt})}if(!Pe.length)return this.set_last_tokens([{value:P,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Pe,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,P=P.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var bt=this.set_last_tokens(X);return bt.length===0?null:bt};function J(w,P,y,F,z){if(!P[y])return{type:A,value:b.error.syntax(P[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=P[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new b.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new b.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Num(n(Z.value,Pe),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Term(Z.value.charAt(Pe),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_paren"?(bt.len++,bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],") or operator expected",!P[bt.len])};case"l_bracket":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_bracket"?(bt.len++,bt.value=new H("{}",[bt.value]),bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],"} or operator expected",!P[bt.len])}}var Ne=te(w,P,y,z);return Ne.type===p||Ne.derived||(Ne=ae(w,P,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:b.error.syntax(P[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(P[y].name==="atom"&&P[y+1]&&(P[y].space||P[y+1].name!=="l_paren")){var Z=P[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var bt=J(w,P,y,F,z);if(bt.type!==A)return Z.value==="-"&&!Z.space&&b.type.is_number(bt.value)?{value:new b.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}else if($t&&$t.indexOf("fx")>-1){var bt=J(w,P,y,dt,z);if(bt.type!==A)return{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}}y=jt;var bt=J(w,P,y,dt,z);if(bt.type===p){y=bt.len;var Z=P[y];if(P[y]&&(P[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||P[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new b.type.Term(Z.value,[bt.value]),len:++bt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,P,y+1,an,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,P,y+1,Qr,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(bt.type!==A)for(;;){y=bt.len;var Z=P[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)bt={value:new b.type.Term(Z.value,[bt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,P,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,bt={value:new b.type.Term(Z.value,[bt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:b.error.syntax(P[bt.len-1],"operator expected")};return bt}return bt}function te(w,P,y,F){if(!P[y]||P[y].name==="atom"&&P[y].raw==="."&&!F&&(P[y].space||!P[y+1]||P[y+1].name!=="l_paren"))return{type:A,derived:!1,value:b.error.syntax(P[y-1],"unfounded token")};var z=P[y],X=[];if(P[y].name==="atom"&&P[y].raw!==","){if(y++,P[y-1].space)return{type:p,len:y,value:new b.type.Term(z.value,X)};if(P[y]&&P[y].name==="l_paren"){if(P[y+1]&&P[y+1].name==="r_paren")return{type:A,derived:!0,value:b.error.syntax(P[y+1],"argument expected")};var Z=J(w,P,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],"argument expected",!P[y])};for(X.push(Z.value),y=Z.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(Z=J(w,P,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X.push(Z.value),y=Z.len}if(P[y]&&P[y].name==="r_paren")y++;else return{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],", or ) expected",!P[y])}}return{type:p,len:y,value:new b.type.Term(z.value,X)}}return{type:A,derived:!1,value:b.error.syntax(P[y],"term expected")}}function ae(w,P,y){if(!P[y])return{type:A,derived:!1,value:b.error.syntax(P[y-1],"[ expected")};if(P[y]&&P[y].name==="l_brace"){var F=J(w,P,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:new b.type.Term("[]",[])}:{type:A,derived:!0,value:b.error.syntax(P[y],"] expected")};for(y=F.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};z.push(F.value),y=F.len}var Z=!1;if(P[y]&&P[y].name==="bar"){if(Z=!0,F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X=F.value,y=F.len}return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],Z?"] expected":", or | or ] expected",!P[y])}}return{type:A,derived:!1,value:b.error.syntax(P[y],"list expected")}}function fe(w,P,y){var F=P[y].line,z=J(w,P,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,P[y]&&P[y].name==="atom"&&P[y].raw===".")if(y++,b.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new b.type.Rule(z.value.args[0],we(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=he(new b.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=we(X.body),Z={value:X,len:y,type:b.type.is_rule(X)?p:A}):(X=new b.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(b.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:b.error.syntax(P[y],"callable expected")};else return{type:A,value:b.error.syntax(P[y]?P[y]:P[y-1],". or operator expected")};return z}function ce(w,P,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(P);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Pe=fe(w,ie,Z);if(Pe.type===A)return new H("throw",[Pe.value]);if(Pe.value.body===null&&Pe.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Pe.value.head.args[0]),Ne.answer(function(dt){b.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(b.warning.failed_goal(Pe.value.head.args[0],Pe.len))}),Z=Pe.len;var ot=!0}else if(Pe.value.body===null&&Pe.value.head.indicator===":-/1"){var ot=w.run_directive(Pe.value.head.args[0]);Z=Pe.len,Pe.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Pe.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Pe.value,y);Z=Pe.len}if(!ot)return ot}while(!0);return!0}function me(w,P){var y=new U(w);y.new_text(P);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(we(X.value));else{var Pe=z[Z];return new H("throw",[b.error.syntax(Pe||z[Z-1],". or operator expected",!Pe)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function he(w,P){w=w.rename(P);var y=P.next_free_variable(),F=Be(w.body,y,P);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function Be(w,P,y){var F;if(b.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:P,error:!1};if(b.type.is_term(w)&&w.indicator===",/2"){var z=Be(w.args[0],P,y);if(z.error)return z;var X=Be(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(b.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:P,error:!1};if(b.type.is_empty_list(w))return{value:new H("true",[]),variable:P,error:!1};if(b.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return b.type.is_variable(Z)?{value:b.error.instantiation("DCG"),variable:P,error:!0}:b.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[P,w]),variable:F,error:!1}):{value:b.error.type("list",w,"DCG"),variable:P,error:!0}}else return b.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([P,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:b.error.type("callable",w,"DCG"),variable:P,error:!0}}}function we(w){return b.type.is_variable(w)?new H("call",[w]):b.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[we(w.args[0]),we(w.args[1])]):w}function g(w,P){for(var y=P||new b.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new b.type.Term(".",[w[F],y]);return y}function Ee(w,P){for(var y=w.length-1;y>=0;y--)w[y]===P&&w.splice(y,1)}function Se(w){for(var P={},y=[],F=0;F=0;P--)if(w.charAt(P)==="/")return new H("/",[new H(w.substring(0,P)),new Fe(parseInt(w.substring(P+1)),!1)])}function Ie(w){this.id=w}function Fe(w,P){this.is_float=P!==void 0?P:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var At=0;function H(w,P,y){this.ref=y||++At,this.id=w,this.args=P||[],this.indicator=w+"/"+this.args.length}var at=0;function Re(w,P,y,F,z,X){this.id=at++,this.stream=w,this.mode=P,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function ke(w){w=w||{},this.links=w}function xe(w,P,y){P=P||new ke,y=y||null,this.goal=w,this.substitution=P,this.parent=y}function He(w,P,y){this.head=w,this.body=P,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(P){return P.substitution},this.format_error=function(P){return P.goal},this.flag={bounded:b.flag.bounded.value,max_integer:b.flag.max_integer.value,min_integer:b.flag.min_integer.value,integer_rounding_function:b.flag.integer_rounding_function.value,char_conversion:b.flag.char_conversion.value,debug:b.flag.debug.value,max_arity:b.flag.max_arity.value,unknown:b.flag.unknown.value,double_quotes:b.flag.double_quotes.value,occurs_check:b.flag.occurs_check.value,dialect:b.flag.dialect.value,version_data:b.flag.version_data.value,nodejs:b.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function qe(w,P,y){this.id=w,this.rules=P,this.exports=y,b.module[w]=this}qe.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,P){if(P&&e(w.variables(),this.id)!==-1&&!b.type.is_variable(w))return null;var y={};return y[this.id]=w,new ke(y)},Fe.prototype.unify=function(w,P){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new ke:null},H.prototype.unify=function(w,P){if(b.type.is_term(w)&&this.indicator===w.indicator){for(var y=new ke,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Pe=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Pe)&&Pe!=="{}"&&Pe!=="[]"&&(Pe="'"+x(Pe)+"'"),Pe+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>P.priority||Ne.priority===P.priority&&(Ne.class==="xfy"&&this.indicator!==P.indicator||Ne.class==="yfx"&&this.indicator!==P.indicator||this.indicator===P.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===P.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Pe+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Pe+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},ke.prototype.toString=function(w){var P="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(P!=="{"&&(P+=", "),P+=y+"/"+this.links[y].toString(w));return P+="}",P},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},He.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var P="",y=0;y=0;z--)F=new H(".",[P[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},He.prototype.apply=function(w){return new He(this.head.apply(w),this.body!==null?this.body.apply(w):null)},ke.prototype.apply=function(w){var P,y={};for(P in this.links)!this.links.hasOwnProperty(P)||(y[P]=this.links[P].apply(w));return new ke(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(b.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var P=0;PP&&F0&&(P=this.head_point().substitution.domain());e(P,b.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(b.format_variable(this.session.rename));this.session.renamed_variables[w.id]=b.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,b.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(b.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var P=w.length-1;P>=0;P--)this.points.push(w[P])},Te.prototype.success=function(w,P){return this.thread.success(w,P)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new ke,null,null)])},Te.prototype.step_rule=function(w,P){return this.thread.step_rule(w,P)},Je.prototype.step_rule=function(w,P){var y=P.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,P,y){return this.thread.answers(w,P,y)},Je.prototype.answers=function(w,P,y){var F=P||1e3,z=this;if(P<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,P-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var P,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!b.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):b.type.is_error(this.head_point().goal)?(P=this.session.format_error(this.points.pop()),this.points=[],z(P)):(this.debugger&&this.debugger_states.push(this.head_point()),P=this.session.format_success(this.points.pop()),z(P))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var P=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Pe=P.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new He(Pe,Ne))}var ot=this.rules[P.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return b.error.instantiation(w.level)},Fe.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return b.type.is_unitary_list(this)?this.args[0].interpret(w):b.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},Fe.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var P=0;PF)return 1;if(w.constructor===Fe){if(w.is_float&&P.is_float)return 0;if(w.is_float)return-1;if(P.is_float)return 1}return 0},is_substitution:function(w){return w instanceof ke},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof He},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof Fe},is_integer:function(w){return w instanceof Fe&&!w.is_float},is_float:function(w){return w instanceof Fe&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var P=0;P0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&b.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&b.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&b.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof Fe&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&b.flag[w.id]!==void 0},is_value_flag:function(w,P){if(!b.type.is_flag(w))return!1;for(var y in b.flag[w.id].allowed)if(!!b.flag[w.id].allowed.hasOwnProperty(y)&&b.flag[w.id].allowed[y].equals(P))return!0;return!1},is_io_mode:function(w){return b.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return b.type.is_term(w)&&(w.indicator==="alias/1"&&b.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return b.type.is_integer(w)&&w.value>=0||b.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return b.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(b.type.is_variable(w.args[0])||b.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return b.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return b.type.is_term(w)&&(w.indicator==="quoted/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return b.type.is_term(w)&&w.indicator==="force/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return b.type.is_flag(w)&&b.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&b.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,P){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,P){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,P){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,P){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,P){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,P){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,P){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.atan2(w,P)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,P){return w>0?Math.log(w):b.error.evaluation("undefined",P.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,P,y){return w+P}},"-/2":{type_args:null,type_result:null,fn:function(w,P,y){return w-P}},"*/2":{type_args:null,type_result:null,fn:function(w,P,y){return w*P}},"//2":{type_args:null,type_result:!0,fn:function(w,P,y){return P?w/P:b.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?parseInt(w/P):b.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.pow(w,P)}},"^/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.pow(w,P)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w>>P}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w&P}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w|P}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w^P}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w%P:b.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w-parseInt(w/P)*P:b.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.max(w,P)}},"min/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.min(w,P)}}}},directive:{"dynamic/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_compound(y)||y.indicator!=="//2")w.throw_error(b.error.type("predicate_indicator",y,P.indicator));else if(b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1]))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],P.indicator));else if(!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],P.indicator));else{var F=P.args[0].args[0].id+"/"+P.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,P){var y=P.args[0];b.type.is_variable(y)?w.throw_error(b.error.instantiation(P.indicator)):!b.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(b.error.type("predicate_indicator",y,P.indicator)):b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1])?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y.args[0])?b.type.is_integer(y.args[1])?w.session.multifile_predicates[P.args[0].args[0].id+"/"+P.args[0].args[1].value]=!0:w.throw_error(b.error.type("integer",y.args[1],P.indicator)):w.throw_error(b.error.type("atom",y.args[0],P.indicator))},"set_prolog_flag/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y)?b.type.is_flag(y)?b.type.is_value_flag(y,F)?b.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(b.error.permission("modify","flag",y)):w.throw_error(b.error.domain("flag_value",new H("+",[y,F]),P.indicator)):w.throw_error(b.error.domain("prolog_flag",y,P.indicator)):w.throw_error(b.error.type("atom",y,P.indicator))},"use_module/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_term(y))w.throw_error(b.error.type("term",y,P.indicator));else if(b.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_character(y)?b.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(b.error.type("character",F,P.indicator)):w.throw_error(b.error.type("character",y,P.indicator))},"op/3":function(w,P){var y=P.args[0],F=P.args[1],z=P.args[2];if(b.type.is_variable(y)||b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_integer(y))w.throw_error(b.error.type("integer",y,P.indicator));else if(!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,P.indicator));else if(!b.type.is_atom(z))w.throw_error(b.error.type("atom",z,P.indicator));else if(y.value<0||y.value>1200)w.throw_error(b.error.domain("operator_priority",y,P.indicator));else if(z.id===",")w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(b.error.domain("operator_specifier",F,P.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Pe;switch(F.id){case"fy":case"fx":Pe="prefix";break;case"yf":case"xf":Pe="postfix";break;default:Pe="infix";break}if(((X.prefix&&Pe==="prefix"||X.postfix&&Pe==="postfix"||X.infix&&Pe==="infix")&&X[Pe].type!==F.id||X.infix&&Pe==="postfix"||X.postfix&&Pe==="infix")&&y.value!==0)w.throw_error(b.error.permission("create","operator",z,P.indicator));else return X[Pe]&&(Ee(w.session.__operators[X[Pe].priority][z.id],F.id),w.session.__operators[X[Pe].priority][z.id].length===0&&delete w.session.__operators[X[Pe].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,P,y){b.directive["op/3"](w,y)&&w.success(P)},"current_op/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Pe in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new xe(y.args[0].args[0],P.substitution,P)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new xe(P.goal.replace(y.args[1]),P.substitution,P)]):b.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([P]),w.__calls.shift()(null)):w.prepend([new xe(P.goal.replace(y.args[0].args[1]).apply(Ne),P.substitution.apply(Ne),P)])};w.__calls.unshift(Z)}else{var ie=new xe(P.goal.replace(y.args[0]),P.substitution,P),Pe=new xe(P.goal.replace(y.args[1]),P.substitution,P);w.prepend([ie,Pe])}},"!/0":function(w,P,y){var F,z,X=[];for(F=P,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Pe=w.points[ie],Ne=Pe.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Pe)}w.points=X.reverse(),w.success(P)},"\\+/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(w.level)):b.type.is_callable(F)?w.prepend([new xe(P.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),P.substitution,P),new xe(P.goal.replace(null),P.substitution,P)]):w.throw_error(b.error.type("callable",F,w.level))},"->/2":function(w,P,y){var F=P.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(F,P.substitution,P)])},"fail/0":function(w,P,y){},"false/0":function(w,P,y){},"true/0":function(w,P,y){w.success(P)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),P.substitution,P)])},"forall/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),P.substitution,P)])},"repeat/0":function(w,P,y){w.prepend([new xe(P.goal.replace(null),P.substitution,P),P])},"throw/1":function(w,P,y){b.type.is_variable(y.args[0])?w.throw_error(b.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,P,y){var F=w.points;w.points=[],w.prepend([new xe(y.args[0],P.substitution,P)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Pe=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,b.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==P.parent;)dt=dt.parent;dt===null&&dt!==P.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new xe,bt=b.unify(ie.args[0],y.args[1],jt);bt!==null?($t.substitution=P.substitution.apply(bt),$t.goal=P.goal.replace(y.args[2]).apply(bt),$t.parent=P,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new xe(P.goal.apply(ie).replace(null),P.substitution.apply(ie),P)],Qr=[],ot=Pe.length-1;ot>=0;ot--){Qr.push(Pe[ot]);var mr=Pe[ot].goal!==null?Pe[ot].goal.select():null;if(b.type.is_term(mr)&&mr.indicator==="!/0")break}var br=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new xe(P.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),P.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(br),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new xe,X=b.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=P.goal.apply(X).replace(null),z.substitution=P.substitution.apply(X),z.parent=P,w.prepend([z]))},"unify_with_occurs_check/2":function(w,P,y){var F=new xe,z=b.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=P.goal.apply(z).replace(null),F.substitution=P.substitution.apply(z),F.parent=P,w.prepend([F]))},"\\=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[0],y.args[1],F);z===null&&w.success(P)},"subsumes_term/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(P)},"findall/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(z))w.throw_error(b.error.type("callable",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Pe=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,P);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!b.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Pe,w.session.limit=Ne,w.session.format_success=ot,b.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var bt=new H("[]"),an=dt.length-1;an>=0;an--)bt=new H(".",[dt[an],bt]);w.prepend([new xe(P.goal.replace(new H("=",[X,bt])),P.substitution,P)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(jt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(jt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(z)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation("functor/3"));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",y.args[2],"functor/3"));else if(!b.type.is_variable(X)&&!b.type.is_atomic(X))w.throw_error(b.error.type("atomic",y.args[1],"functor/3"));else if(b.type.is_integer(X)&&b.type.is_integer(Z)&&Z.value!==0)w.throw_error(b.error.type("atom",y.args[1],"functor/3"));else if(b.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Pe=0;Pe0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new xe(P.goal.replace(z),P.substitution,P)])}}},"=../2":function(w,P,y){var F;if(b.type.is_variable(y.args[0])&&(b.type.is_variable(y.args[1])||b.type.is_non_empty_list(y.args[1])&&b.type.is_variable(y.args[1].args[0])))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_fully_list(y.args[1]))w.throw_error(b.error.type("list",y.args[1],y.indicator));else if(b.type.is_variable(y.args[0])){if(!b.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];b.type.is_variable(y.args[0])&&b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):X.length===0&&b.type.is_compound(y.args[1].args[0])?w.throw_error(b.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(b.type.is_compound(y.args[1].args[0])||b.type.is_number(y.args[1].args[0]))?w.throw_error(b.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(P.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],P)),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),P.substitution,P)])}}else{if(b.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"copy_term/2":function(w,P,y){var F=y.args[0].rename(w);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P.parent)])},"term_variables/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_fully_list(z))w.throw_error(b.error.type("list",z,y.indicator));else{var X=g(o(Se(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"clause/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_callable(y.args[1]))w.throw_error(b.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new xe(P.goal.replace(Z),P.substitution,P))}w.prepend(F)}else w.throw_error(b.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,P,y){var F=y.args[0];if(!b.type.is_variable(F)&&(!b.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(b.error.type("predicate_indicator",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[0])&&!b.type.is_atom(F.args[0]))w.throw_error(b.error.type("atom",F.args[0],y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[1])&&!b.type.is_integer(F.args[1]))w.throw_error(b.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Pe=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new Fe(Pe,!1)]),ot=new H("=",[Ne,F]);z.push(new xe(P.goal.replace(ot),P.substitution,P))}w.prepend(z)}},"asserta/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new He(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"assertz/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new He(F,z,!0)),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"retract/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof P.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(b.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],y.indicator));else if(b.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(b.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Fe(y.args[0].id.length,!1);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"atom_concat/3":function(w,P,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(b.type.is_variable(ie)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_atom(Z))w.throw_error(b.error.type("atom",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_atom(ie))w.throw_error(b.error.type("atom",ie,y.indicator));else{var Pe=b.type.is_variable(X),Ne=b.type.is_variable(Z);if(!Pe&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]);else if(Pe&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else if(Ne&&!Pe)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new xe(P.goal.replace(z),P.substitution,P))}w.prepend(ot)}}},"sub_atom/5":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Pe=y.args[4];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_integer(ie))w.throw_error(b.error.type("integer",ie,y.indicator));else if(b.type.is_integer(X)&&X.value<0)w.throw_error(b.error.domain("not_less_than_zero",X,y.indicator));else if(b.type.is_integer(Z)&&Z.value<0)w.throw_error(b.error.domain("not_less_than_zero",Z,y.indicator));else if(b.type.is_integer(ie)&&ie.value<0)w.throw_error(b.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(b.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(b.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(b.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var bt in ot)if(!!ot.hasOwnProperty(bt)){var an=ot[bt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var br=new H("=",[new H(mr),Pe]),Wr=new H("=",[X,new Fe(F)]),Kn=new H("=",[Z,new Fe(an)]),Ns=new H("=",[ie,new Fe(Qr)]),Ti=new H(",",[new H(",",[new H(",",[Wr,Kn]),Ns]),br]);jt.push(new xe(P.goal.replace(Ti),P.substitution,P))}}}}w.prepend(jt)}},"atom_chars/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"atom_codes/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.representation("character_code",y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new Fe(n(F.id,Z),!1),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"char_code/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_character(F))w.throw_error(b.error.type("character",F,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_character_code(z))w.throw_error(b.error.representation("character_code",y.indicator));else if(b.type.is_variable(z)){var X=new Fe(n(F.id,0),!1);w.prepend([new xe(P.goal.replace(new H("=",[X,z])),P.substitution,P)])}else{var Z=new H(u(z.value));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"number_chars/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"number_codes/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new Fe(n(F,jt),!1),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"upcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),P.substitution,P)])},"atomic_list_concat/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z)||b.type.is_variable(F)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_list(F))w.throw_error(b.error.type("list",F,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(b.type.is_variable(X)){for(var ie="",Pe=F;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(!b.type.is_atom(Pe.args[0])&&!b.type.is_number(Pe.args[0])){w.throw_error(b.error.type("atomic",Pe.args[0],y.indicator));return}ie!==""&&(ie+=z.id),b.type.is_atom(Pe.args[0])?ie+=Pe.args[0].id:ie+=""+Pe.args[0].value,Pe=Pe.args[1]}ie=new H(ie,[]),b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_term(Pe)||Pe.indicator!=="[]/0"?w.throw_error(b.error.type("list",F,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[ie,X])),P.substitution,P)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"@=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>0&&w.success(P)},"@>=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>=0&&w.success(P)},"compare/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(b.type.domain("order",F,y.indicator));else{var Z=b.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(P.goal.replace(new H("=",[F,new H(Z,[])])),P.substitution,P)])}},"is/2":function(w,P,y){var F=y.args[1].interpret(w);b.type.is_number(F)?w.prepend([new xe(P.goal.replace(new H("=",[y.args[0],F],w.level)),P.substitution,P)]):w.throw_error(F)},"between/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_integer(F))w.throw_error(b.error.type("integer",F,y.indicator));else if(!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(b.type.is_variable(X)){var Z=[new xe(P.goal.replace(new H("=",[X,F])),P.substitution,P)];F.value=X.value&&w.success(P)},"succ/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)&&b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_variable(F)&&!b.type.is_integer(F)?w.throw_error(b.error.type("integer",F,y.indicator)):!b.type.is_variable(z)&&!b.type.is_integer(z)?w.throw_error(b.error.type("integer",z,y.indicator)):!b.type.is_variable(F)&&F.value<0?w.throw_error(b.error.domain("not_less_than_zero",F,y.indicator)):!b.type.is_variable(z)&&z.value<0?w.throw_error(b.error.domain("not_less_than_zero",z,y.indicator)):(b.type.is_variable(z)||z.value>0)&&(b.type.is_variable(F)?w.prepend([new xe(P.goal.replace(new H("=",[F,new Fe(z.value-1,!1)])),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[z,new Fe(F.value+1,!1)])),P.substitution,P)]))},"=:=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F===0&&w.success(P)},"=\\=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F!==0&&w.success(P)},"/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>0&&w.success(P)},">=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>=0&&w.success(P)},"var/1":function(w,P,y){b.type.is_variable(y.args[0])&&w.success(P)},"atom/1":function(w,P,y){b.type.is_atom(y.args[0])&&w.success(P)},"atomic/1":function(w,P,y){b.type.is_atomic(y.args[0])&&w.success(P)},"compound/1":function(w,P,y){b.type.is_compound(y.args[0])&&w.success(P)},"integer/1":function(w,P,y){b.type.is_integer(y.args[0])&&w.success(P)},"float/1":function(w,P,y){b.type.is_float(y.args[0])&&w.success(P)},"number/1":function(w,P,y){b.type.is_number(y.args[0])&&w.success(P)},"nonvar/1":function(w,P,y){b.type.is_variable(y.args[0])||w.success(P)},"ground/1":function(w,P,y){y.variables().length===0&&w.success(P)},"acyclic_term/1":function(w,P,y){for(var F=P.substitution.apply(P.substitution),z=y.args[0].variables(),X=0;X0?bt[bt.length-1]:null,bt!==null&&(jt=J(w,bt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===bt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(Se(jt.variables()),function(br){return new Ie(br)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(Se(jt.variables()),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new He(jt,null).singleton_variables(),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(P.goal.replace(Qr),P.substitution,P)])}else jt.type===p?w.throw_error(b.error.syntax(bt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),P.substitution,P)])},"write/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"writeq/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),P.substitution,P)])},"writeq/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"write_canonical/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),P.substitution,P)])},"write_canonical/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),P.substitution,P)])},"write_term/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),P.substitution,P)])},"write_term/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=b.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(b.type.is_variable(F)||b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else if(!b.type.is_stream(F)&&!b.type.is_atom(F))w.throw_error(b.error.domain("stream_or_alias",F,y.indicator));else if(!b.type.is_stream(Z)||Z.stream===null)w.throw_error(b.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(b.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(b.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(b.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Pe=X,Ne;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(Ne=Pe.args[0],b.type.is_variable(Ne)){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_write_option(Ne)){w.throw_error(b.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Pe=Pe.args[1]}if(Pe.indicator!=="[]/0"){b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):w.throw_error(b.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(P)}}},"halt/0":function(w,P,y){w.points=[]},"halt/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_integer(F)?w.points=[]:w.throw_error(b.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_flag(F))w.throw_error(b.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in b.flag)if(!!b.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new xe(P.goal.replace(ie),P.substitution,P))}w.prepend(X)}},"set_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)||b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?b.type.is_flag(F)?b.type.is_value_flag(F,z)?b.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(P)):w.throw_error(b.error.permission("modify","flag",F)):w.throw_error(b.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(b.error.domain("prolog_flag",F,y.indicator)):w.throw_error(b.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new Fe(Number.MAX_SAFE_INTEGER)],value:new Fe(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Fe(Number.MIN_SAFE_INTEGER)],value:new Fe(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)])],value:new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,P,y){y=y===void 0?!1:y;for(var F=[{left:w,right:P}],z={};F.length!==0;){var X=F.pop();if(w=X.left,P=X.right,b.type.is_term(w)&&b.type.is_term(P)){if(w.indicator!==P.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,P){if(b.type.is_operator(P)){for(var y=b.type.is_operator(P),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new Fe(w.line+1)]),new H(".",[new H("column",[new Fe(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(P)]),X])},syntax_by_predicate:function(w,P){return new H("error",[new H("syntax_error",[new H(w)]),ee(P)])}},warning:{singleton:function(w,P,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(P)]),new H(".",[new H("line",[new Fe(y,!1)]),new H("[]")])])},failed_goal:function(w,P){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new Fe(P,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,P,F){P instanceof Te&&(P=P.thread);var F=F||{};if(F.session=P?P.session:void 0,b.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(b.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!b.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Pe=typeof P>"u"||P.points.length>0?" ;":".";return z===0?"true"+Pe:X+Pe},flatten_error:function(w){if(!b.type.is_error(w))return null;w=w.args[0];var P={};return P.type=w.args[0].id,P.thrown=P.type==="syntax_error"?null:w.args[1].id,P.expected=null,P.found=null,P.representation=null,P.existence=null,P.existence_type=null,P.line=null,P.column=null,P.permission_operation=null,P.permission_type=null,P.evaluation_type=null,P.type==="type_error"||P.type==="domain_error"?(P.expected=w.args[0].args[0].id,P.found=w.args[0].args[1].toString()):P.type==="syntax_error"?w.args[1].indicator==="./2"?(P.expected=w.args[0].args[0].id,P.found=w.args[1].args[1].args[1].args[0],P.found=P.found.id==="token_not_found"?P.found.id:P.found.args[0].id,P.line=w.args[1].args[0].args[0].value,P.column=w.args[1].args[1].args[0].args[0].value):P.thrown=w.args[1].id:P.type==="permission_error"?(P.found=w.args[0].args[2].toString(),P.permission_operation=w.args[0].args[0].id,P.permission_type=w.args[0].args[1].id):P.type==="evaluation_error"?P.evaluation_type=w.args[0].args[0].id:P.type==="representation_error"?P.representation=w.args[0].args[0].id:P.type==="existence_error"&&(P.existence=w.args[0].args[1].toString(),P.existence_type=w.args[0].args[0].id),P},create:function(w){return new b.type.Session(w)}};typeof hl<"u"?hl.exports=b:window.pl=b})()});function ime(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=ome.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ame(t,e){ome.set(t,e),t.consult(`:- use_module(library(${zgt.id})).`)}var EH,Ta,sme,u0,Vgt,Jgt,ome,zgt,lme=Et(()=>{Ye();EH=$e(d2()),Ta=$e(mH()),sme=$e(ve("vm")),{is_atom:u0,is_variable:Vgt,is_instantiated_list:Jgt}=Ta.default.type;ome=new WeakMap;zgt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Vgt(n)&&h!==null&&ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),u0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!u0(o)||!u0(a)||!u0(n)||!Jgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,x]of u.toJavaScript().entries())E[`$${v}`]=x;sme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var b2={};Vt(b2,{Constraints:()=>P2,DependencyType:()=>fme});function to(t){if(t instanceof DC.default.type.Num)return t.value;if(t instanceof DC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof DC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function ume(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function em(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Xgt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function A0(t){return typeof t=="string"?`'${t}'`:"[]"}var Ame,DC,fme,cme,CH,P2,x2=Et(()=>{Ye();Ye();St();Ame=$e(qde()),DC=$e(mH());v2();lme();(0,Ame.default)(DC.default);fme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(fme||{}),cme=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=DC.default.create(o),ame(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw ume(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw ume(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of cme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${A0(o)}). +`,e+=`workspace_ident(${A0(o)}, ${A0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${A0(o)}, ${A0(r.manifest.version)}). +`;for(let a of cme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${A0(o)}, ${A0(W.stringifyIdent(n))}, ${A0(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=B2([A,W.stringifyIdent(n)]),h=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=B2(n),p=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.DependencyIdent),u=em(o.links.DependencyRange),A=em(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return _e.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.FieldPath),u=Xgt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return _e.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=em(u));yield a}}}});var wme=_(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});function G2(t){let e=[...t.caches],r=e.shift();return r===void 0?Cme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>G2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>G2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>G2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>G2({caches:e}).clear())}}}function Cme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}Ik.createFallbackableCache=G2;Ik.createNullCache=Cme});var Bme=_((QWt,Ime)=>{Ime.exports=wme()});var vme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function ddt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=ddt});var Sme=_((RWt,Dme)=>{Dme.exports=vme()});var bme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function mdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===NH.WithinHeaders?o:{}},queryParameters(){return t===NH.WithinQueryParameters?o:{}}}}function ydt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function Pme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return Pme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Edt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Cdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function wdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Idt="4.14.2",Bdt=t=>()=>t.transporter.requester.destroy(),NH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=NH;Zc.addMethods=Cdt;Zc.createAuth=mdt;Zc.createRetryablePromise=ydt;Zc.createWaitablePromise=Pme;Zc.destroy=Bdt;Zc.encode=wdt;Zc.shuffle=Edt;Zc.version=Idt});var Y2=_((NWt,xme)=>{xme.exports=bme()});var kme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});var vdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};LH.MethodEnum=vdt});var W2=_((OWt,Qme)=>{Qme.exports=kme()});var Wme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Rme=W2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var K2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Tme=2*60*1e3;function UH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Tme}function Lme(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Tme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:K2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||K2.Any}}function Ddt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Lme(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Sdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Pdt=t=>{let e=t.status;return t.isTimedOut||Sdt(t)||~~(e/100)!==2&&~~(e/100)!==4},bdt=({status:t})=>~~(t/100)===2,xdt=(t,e)=>Pdt(t)?e.onRetry(t):bdt(t)?e.onSuccess(t):e.onFail(t);function Fme(t,e,r,o){let a=[],n=Hme(r,o),u=qme(t,o),A=r.method,p=r.method!==Rme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,x)=>{let C=v.pop();if(C===void 0)throw Yme(MH(a));let R={data:n,headers:u,method:A,url:Ume(C,r.path,h),connectTimeout:x(E,t.timeouts.connect),responseTimeout:x(E,o.timeout)},L=J=>{let te={request:R,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>Ome(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(C,UH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,x))},onFail(J){throw L(J),Mme(J,MH(a))}};return t.requester.send(R).then(J=>xdt(J,U))};return Ddt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function kdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,x){let C=OH(x,I.timeouts.read),R=()=>Fme(I,I.hosts.filter(J=>(J.accept&K2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return R();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,R()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,x){return Fme(I,I.hosts.filter(C=>(C.accept&K2.Write)!==0),v,OH(x,I.timeouts.write))}};return I}function Qdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Ome(t){try{return JSON.parse(t.content)}catch(e){throw Gme(e.message,t)}}function Mme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return jme(o,e,r)}function Fdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function Ume(t,e,r){let o=_me(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function _me(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Fdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Hme(t,e){if(t.method===Rme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function qme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function jme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Gme(t,e){return{name:"DeserializationError",message:t,response:e}}function Yme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=K2;Fi.HostStatusEnum=xC;Fi.createApiError=jme;Fi.createDeserializationError=Gme;Fi.createMappedRequestOptions=OH;Fi.createRetryError=Yme;Fi.createStatefulHost=UH;Fi.createStatelessHost=_H;Fi.createTransporter=kdt;Fi.createUserAgent=Qdt;Fi.deserializeFailure=Mme;Fi.deserializeSuccess=Ome;Fi.isStatefulHostTimeouted=Lme;Fi.isStatefulHostUp=Nme;Fi.serializeData=Hme;Fi.serializeHeaders=qme;Fi.serializeQueryParameters=_me;Fi.serializeUrl=Ume;Fi.stackFrameWithoutCredentials=HH;Fi.stackTraceWithoutCredentials=MH});var V2=_((UWt,Kme)=>{Kme.exports=Wme()});var Vme=_(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});var kC=Y2(),Rdt=V2(),J2=W2(),Tdt=t=>{let e=t.region||"us",r=kC.createAuth(kC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Rdt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return kC.addMethods({appId:a,transporter:o},t.methods)},Ndt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:"2/abtests",data:e},r),Ldt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Delete,path:kC.encode("2/abtests/%s",e)},r),Odt=t=>(e,r)=>t.transporter.read({method:J2.MethodEnum.Get,path:kC.encode("2/abtests/%s",e)},r),Mdt=t=>e=>t.transporter.read({method:J2.MethodEnum.Get,path:"2/abtests"},e),Udt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:kC.encode("2/abtests/%s/stop",e)},r);m0.addABTest=Ndt;m0.createAnalyticsClient=Tdt;m0.deleteABTest=Ldt;m0.getABTest=Odt;m0.getABTests=Mdt;m0.stopABTest=Udt});var zme=_((HWt,Jme)=>{Jme.exports=Vme()});var Zme=_(z2=>{"use strict";Object.defineProperty(z2,"__esModule",{value:!0});var qH=Y2(),_dt=V2(),Xme=W2(),Hdt=t=>{let e=t.region||"us",r=qH.createAuth(qH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=_dt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return qH.addMethods({appId:t.appId,transporter:o},t.methods)},qdt=t=>e=>t.transporter.read({method:Xme.MethodEnum.Get,path:"1/strategies/personalization"},e),jdt=t=>(e,r)=>t.transporter.write({method:Xme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);z2.createPersonalizationClient=Hdt;z2.getPersonalizationStrategy=qdt;z2.setPersonalizationStrategy=jdt});var eye=_((jWt,$me)=>{$me.exports=Zme()});var hye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=Y2(),Na=V2(),Ir=W2(),Gdt=ve("crypto");function Bk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var Ydt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function tye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function rye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function nye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Wdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>X2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Kdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Vdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Jdt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>QC(t)(o.taskID,a)),vk=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Rules]}),Xdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Settings]}),Zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Synonyms]}),$dt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),emt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>X2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},tmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},rmt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Gdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},X2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),iye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),nmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),imt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),smt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw nye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},omt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),amt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),lmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},Z2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),umt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),pmt=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},hmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>Z2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),dmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},mmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return Z2(t)(o.indexName,{methods:{searchForFacetValues:Aye}}).searchForFacetValues(a,n,{...r,...u})})),ymt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Emt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Cmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>X2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},wmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Imt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),Bmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),vmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>QC(t)(o.taskID,a)),Dmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>X2(t)(e,I).then(x=>p(x)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},QC=t=>(e,r)=>Gt.createRetryablePromise(o=>iye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),sye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Smt=t=>e=>Bk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Pmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},bmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},xmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),kmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Qmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Fmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Tmt=t=>(e,r)=>Gt.createWaitablePromise(oye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),oye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,nm.DeleteObject,r)},Nmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Lmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Omt=t=>e=>aye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Mmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Umt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>uye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw rye();return A()});return A()},_mt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Hmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},qmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),aye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),lye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Ymt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?nm.PartialUpdateObject:nm.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Wmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,R,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:R}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=jH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let x=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,R,L])=>({objectIDs:R.objectIDs,taskIDs:[C.taskID,...R.taskIDs,L.taskID]}));return Gt.createWaitablePromise(x,(C,R)=>Promise.all(I.map(L=>L.wait(R))))},Kmt=t=>(e,r)=>GH(t)(e,{...r,clearExistingRules:!0}),Vmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),Jmt=t=>(e,r)=>Gt.createWaitablePromise(jH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),jH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?nm.AddObject:nm.UpdateObject;if(n===nm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(tye()))}return Dk(t)(e,n,a)},zmt=t=>(e,r)=>GH(t)([e],r),GH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},Xmt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},uye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),Aye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),fye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Zmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>lye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),$mt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},nm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Sk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},eyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},tyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=$mt;Ft.BatchActionEnum=nm;Ft.ScopeEnum=Sk;Ft.StrategyEnum=eyt;Ft.SynonymEnum=tyt;Ft.addApiKey=Wdt;Ft.assignUserID=Kdt;Ft.assignUserIDs=Vdt;Ft.batch=sye;Ft.browseObjects=Smt;Ft.browseRules=Pmt;Ft.browseSynonyms=bmt;Ft.chunkedBatch=Dk;Ft.clearDictionaryEntries=Jdt;Ft.clearObjects=xmt;Ft.clearRules=kmt;Ft.clearSynonyms=Qmt;Ft.copyIndex=vk;Ft.copyRules=zdt;Ft.copySettings=Xdt;Ft.copySynonyms=Zdt;Ft.createBrowsablePromise=Bk;Ft.createMissingObjectIDError=tye;Ft.createObjectNotFoundError=rye;Ft.createSearchClient=Ydt;Ft.createValidUntilNotFoundError=nye;Ft.customRequest=$dt;Ft.deleteApiKey=emt;Ft.deleteBy=Fmt;Ft.deleteDictionaryEntries=tmt;Ft.deleteIndex=Rmt;Ft.deleteObject=Tmt;Ft.deleteObjects=oye;Ft.deleteRule=Nmt;Ft.deleteSynonym=Lmt;Ft.exists=Omt;Ft.findAnswers=Mmt;Ft.findObject=Umt;Ft.generateSecuredApiKey=rmt;Ft.getApiKey=X2;Ft.getAppTask=iye;Ft.getDictionarySettings=nmt;Ft.getLogs=imt;Ft.getObject=_mt;Ft.getObjectPosition=Hmt;Ft.getObjects=qmt;Ft.getRule=jmt;Ft.getSecuredApiKeyRemainingValidity=smt;Ft.getSettings=aye;Ft.getSynonym=Gmt;Ft.getTask=lye;Ft.getTopUserIDs=omt;Ft.getUserID=amt;Ft.hasPendingMappings=lmt;Ft.initIndex=Z2;Ft.listApiKeys=cmt;Ft.listClusters=umt;Ft.listIndices=Amt;Ft.listUserIDs=fmt;Ft.moveIndex=pmt;Ft.multipleBatch=hmt;Ft.multipleGetObjects=gmt;Ft.multipleQueries=dmt;Ft.multipleSearchForFacetValues=mmt;Ft.partialUpdateObject=Ymt;Ft.partialUpdateObjects=cye;Ft.removeUserID=ymt;Ft.replaceAllObjects=Wmt;Ft.replaceAllRules=Kmt;Ft.replaceAllSynonyms=Vmt;Ft.replaceDictionaryEntries=Emt;Ft.restoreApiKey=Cmt;Ft.saveDictionaryEntries=wmt;Ft.saveObject=Jmt;Ft.saveObjects=jH;Ft.saveRule=zmt;Ft.saveRules=GH;Ft.saveSynonym=Xmt;Ft.saveSynonyms=YH;Ft.search=uye;Ft.searchDictionaryEntries=Imt;Ft.searchForFacetValues=Aye;Ft.searchRules=fye;Ft.searchSynonyms=pye;Ft.searchUserIDs=Bmt;Ft.setDictionarySettings=vmt;Ft.setSettings=Zmt;Ft.updateApiKey=Dmt;Ft.waitAppTask=QC;Ft.waitTask=Zi});var dye=_((YWt,gye)=>{gye.exports=hye()});var mye=_(Pk=>{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});function ryt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var nyt={Debug:1,Info:2,Error:3};Pk.LogLevelEnum=nyt;Pk.createNullLogger=ryt});var Eye=_((KWt,yye)=>{yye.exports=mye()});var Bye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var Cye=ve("http"),wye=ve("https"),iyt=ve("url"),Iye={keepAlive:!0},syt=new Cye.Agent(Iye),oyt=new wye.Agent(Iye);function ayt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||syt,n=r||t||oyt;return{send(u){return new Promise(A=>{let p=iyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?wye:Cye).request(E,R=>{let L=[];R.on("data",U=>{L=L.concat(U)}),R.on("end",()=>{clearTimeout(x),clearTimeout(C),A({status:R.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(R,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},R*1e3),x=v(u.connectTimeout,"Connection timeout"),C;I.on("error",R=>{clearTimeout(x),clearTimeout(C),A({status:0,content:R.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(x),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=ayt});var Dye=_((JWt,vye)=>{vye.exports=Bye()});var xye=_((zWt,bye)=>{"use strict";var Sye=Bme(),lyt=Sme(),FC=zme(),VH=Y2(),KH=eye(),Ut=dye(),cyt=Eye(),uyt=Dye(),Ayt=V2();function Pye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:uyt.createNodeHttpRequester(),logger:cyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:lyt.createInMemoryCache(),userAgent:Ayt.createUserAgent(VH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:VH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>FC.createAnalyticsClient({...o,...u,methods:{addABTest:FC.addABTest,getABTest:FC.getABTest,getABTests:FC.getABTests,stopABTest:FC.stopABTest,deleteABTest:FC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}Pye.version=VH.version;bye.exports=Pye});var zH=_((XWt,JH)=>{var kye=xye();JH.exports=kye;JH.exports.default=kye});var $H=_(($Wt,Rye)=>{"use strict";var Fye=Object.getOwnPropertySymbols,pyt=Object.prototype.hasOwnProperty,hyt=Object.prototype.propertyIsEnumerable;function gyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function dyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Rye.exports=dyt()?Object.assign:function(t,e){for(var r,o=gyt(t),a,n=1;n{"use strict";var i6=$H(),$c=typeof Symbol=="function"&&Symbol.for,$2=$c?Symbol.for("react.element"):60103,myt=$c?Symbol.for("react.portal"):60106,yyt=$c?Symbol.for("react.fragment"):60107,Eyt=$c?Symbol.for("react.strict_mode"):60108,Cyt=$c?Symbol.for("react.profiler"):60114,wyt=$c?Symbol.for("react.provider"):60109,Iyt=$c?Symbol.for("react.context"):60110,Byt=$c?Symbol.for("react.forward_ref"):60112,vyt=$c?Symbol.for("react.suspense"):60113,Dyt=$c?Symbol.for("react.memo"):60115,Syt=$c?Symbol.for("react.lazy"):60116,Tye=typeof Symbol=="function"&&Symbol.iterator;function eB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rbk.length&&bk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case $2:case myt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Wye.exports=Yye()});var u6=_((rKt,c6)=>{"use strict";var An=c6.exports;c6.exports.default=An;var Ln="\x1B[",tB="\x1B]",TC="\x07",xk=";",Kye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=Kye?"\x1B7":Ln+"s";An.cursorRestorePosition=Kye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[tB,"8",xk,xk,e,TC,t,tB,"8",xk,xk,TC].join("");An.image=(t,e={})=>{let r=`${tB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${tB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${tB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Jye=_((nKt,A6)=>{"use strict";var Vye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=Vye;A6.exports.default=Vye});var Xye=_((iKt,Qk)=>{"use strict";var Fyt=Jye(),kk=new WeakMap,zye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(kk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Fyt(n,t),kk.set(n,o),n};Qk.exports=zye;Qk.exports.default=zye;Qk.exports.callCount=t=>{if(!kk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return kk.get(t)}});var Zye=_((sKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((oKt,OC)=>{var Ei=global.process,im=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};im(Ei)?($ye=ve("assert"),NC=Zye(),eEe=/^win/i.test(Ei.platform),rB=ve("events"),typeof rB!="function"&&(rB=rB.EventEmitter),Ei.__signal_exit_emitter__?Ts=Ei.__signal_exit_emitter__:(Ts=Ei.__signal_exit_emitter__=new rB,Ts.count=0,Ts.emitted={}),Ts.infinite||(Ts.setMaxListeners(1/0),Ts.infinite=!0),OC.exports=function(t,e){if(!im(global.process))return function(){};$ye.equal(typeof t,"function","a callback must be provided for exit handler"),LC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ts.removeListener(r,t),Ts.listeners("exit").length===0&&Ts.listeners("afterexit").length===0&&Rk()};return Ts.on(r,t),o},Rk=function(){!LC||!im(global.process)||(LC=!1,NC.forEach(function(e){try{Ei.removeListener(e,Tk[e])}catch{}}),Ei.emit=Nk,Ei.reallyExit=p6,Ts.count-=1)},OC.exports.unload=Rk,sm=function(e,r,o){Ts.emitted[e]||(Ts.emitted[e]=!0,Ts.emit(e,r,o))},Tk={},NC.forEach(function(t){Tk[t]=function(){if(!!im(global.process)){var r=Ei.listeners(t);r.length===Ts.count&&(Rk(),sm("exit",null,t),sm("afterexit",null,t),eEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),OC.exports.signals=function(){return NC},LC=!1,f6=function(){LC||!im(global.process)||(LC=!0,Ts.count+=1,NC=NC.filter(function(e){try{return Ei.on(e,Tk[e]),!0}catch{return!1}}),Ei.emit=rEe,Ei.reallyExit=tEe)},OC.exports.load=f6,p6=Ei.reallyExit,tEe=function(e){!im(global.process)||(Ei.exitCode=e||0,sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Nk=Ei.emit,rEe=function(e,r){if(e==="exit"&&im(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Nk.apply(this,arguments);return sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),o}else return Nk.apply(this,arguments)}):OC.exports=function(){return function(){}};var $ye,NC,eEe,rB,Ts,Rk,sm,Tk,LC,f6,p6,tEe,Nk,rEe});var iEe=_((aKt,nEe)=>{"use strict";var Ryt=Xye(),Tyt=h6();nEe.exports=Ryt(()=>{Tyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(MC=>{"use strict";var Nyt=iEe(),Lk=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Lk=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(Nyt(),Lk=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Lk=t),Lk?MC.show(e):MC.hide(e)}});var lEe=_(nB=>{"use strict";var aEe=nB&&nB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nB,"__esModule",{value:!0});var sEe=aEe(u6()),oEe=aEe(g6()),Lyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(oEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(sEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(sEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(oEe.default.show(),a=!1)},n};nB.default={create:Lyt}});var cEe=_((uKt,Oyt)=>{Oyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var fEe=_(gl=>{"use strict";var AEe=cEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:AEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;AEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return uEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=uEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function uEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var hEe=_((fKt,pEe)=>{"use strict";pEe.exports=fEe().isCI});var dEe=_((pKt,gEe)=>{"use strict";var Myt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};gEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Myt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var BEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var _C,oB,Hk,qk,I6;typeof window>"u"||typeof MessageChannel!="function"?(UC=null,d6=null,m6=function(){if(UC!==null)try{var t=kn.unstable_now();UC(!0,t),UC=null}catch(e){throw setTimeout(m6,0),e}},mEe=Date.now(),kn.unstable_now=function(){return Date.now()-mEe},_C=function(t){UC!==null?setTimeout(_C,0,t):(UC=t,setTimeout(m6,0))},oB=function(t,e){d6=setTimeout(t,e)},Hk=function(){clearTimeout(d6)},qk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Ok=window.performance,y6=window.Date,yEe=window.setTimeout,EEe=window.clearTimeout,typeof console<"u"&&(CEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof CEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ok=="object"&&typeof Ok.now=="function"?kn.unstable_now=function(){return Ok.now()}:(wEe=y6.now(),kn.unstable_now=function(){return y6.now()-wEe}),iB=!1,sB=null,Mk=-1,E6=5,C6=0,qk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125_k(u,r))p!==void 0&&0>_k(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>_k(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function _k(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],y0=[],Uyt=1,na=null,Lo=3,Gk=!1,om=!1,aB=!1;function Yk(t){for(var e=nc(y0);e!==null;){if(e.callback===null)jk(y0);else if(e.startTime<=t)jk(y0),e.sortIndex=e.expirationTime,B6(eu,e);else break;e=nc(y0)}}function v6(t){if(aB=!1,Yk(t),!om)if(nc(eu)!==null)om=!0,_C(D6);else{var e=nc(y0);e!==null&&oB(v6,e.startTime-t)}}function D6(t,e){om=!1,aB&&(aB=!1,Hk()),Gk=!0;var r=Lo;try{for(Yk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!qk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&jk(eu),Yk(e)}else jk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(y0);u!==null&&oB(v6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Gk=!1}}function IEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var _yt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(y0,t),nc(eu)===null&&t===nc(y0)&&(aB?Hk():aB=!0,oB(v6,a-o))):(t.sortIndex=r,B6(eu,t),om||Gk||(om=!0,_C(D6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Yk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";vEe.exports=BEe()});var DEe=_((dKt,lB)=>{lB.exports=function t(e){"use strict";var r=$H(),o=on(),a=S6();function n(S){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+S,T=1;Tao||(S.current=yl[ao],yl[ao]=null,ao--)}function On(S,D){ao++,yl[ao]=S.current,S.current=D}var Ni={},Mn={current:Ni},_i={current:!1},tr=Ni;function Oe(S,D){var T=S.type.contextTypes;if(!T)return Ni;var q=S.stateNode;if(q&&q.__reactInternalMemoizedUnmaskedChildContext===D)return q.__reactInternalMemoizedMaskedChildContext;var Y={},Ae;for(Ae in T)Y[Ae]=D[Ae];return q&&(S=S.stateNode,S.__reactInternalMemoizedUnmaskedChildContext=D,S.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(S){return S=S.childContextTypes,S!=null}function Ma(S){Vn(_i,S),Vn(Mn,S)}function hr(S){Vn(_i,S),Vn(Mn,S)}function uc(S,D,T){if(Mn.current!==Ni)throw Error(n(168));On(Mn,D,S),On(_i,T,S)}function uu(S,D,T){var q=S.stateNode;if(S=D.childContextTypes,typeof q.getChildContext!="function")return T;q=q.getChildContext();for(var Y in q)if(!(Y in S))throw Error(n(108,he(D)||"Unknown",Y));return r({},T,{},q)}function Ac(S){var D=S.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=Mn.current,On(Mn,D,S),On(_i,_i.current,S),!0}function El(S,D,T){var q=S.stateNode;if(!q)throw Error(n(169));T?(D=uu(S,D,tr),q.__reactInternalMemoizedMergedChildContext=D,Vn(_i,S),Vn(Mn,S),On(Mn,D,S)):Vn(_i,S),On(_i,T,S)}var DA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Rt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,SA=a.unstable_NormalPriority,up=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,bA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case SA:return 97;case up:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(S){switch(S){case 99:return Yt;case 98:return Cl;case 97:return SA;case 96:return up;case 95:return pc;default:throw Error(n(332))}}function lo(S,D){return S=Ze(S),DA(S,D)}function gc(S,D,T){return S=Ze(S),Au(S,D,T)}function pu(S){return hi===null?(hi=[S],hc=Au(Yt,hu)):hi.push(S),PA}function qi(){if(hc!==null){var S=hc;hc=null,Ce(S)}hu()}function hu(){if(!bA&&hi!==null){bA=!0;var S=0;try{var D=hi;lo(99,function(){for(;S=D&&(jo=!0),S.firstContext=null)}function ms(S,D){if(aa!==S&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=S,D=1073741823),D={context:S,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return b?S._currentValue:S._currentValue2}var _s=!1;function Un(S){return{baseState:S,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Sn(S){return{baseState:S.baseState,firstUpdate:S.firstUpdate,lastUpdate:S.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(S,D){return{expirationTime:S,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(S,D){S.lastUpdate===null?S.firstUpdate=S.lastUpdate=D:(S.lastUpdate.next=D,S.lastUpdate=D)}function tt(S,D){var T=S.alternate;if(T===null){var q=S.updateQueue,Y=null;q===null&&(q=S.updateQueue=Un(S.memoizedState))}else q=S.updateQueue,Y=T.updateQueue,q===null?Y===null?(q=S.updateQueue=Un(S.memoizedState),Y=T.updateQueue=Un(T.memoizedState)):q=S.updateQueue=Sn(Y):Y===null&&(Y=T.updateQueue=Sn(q));Y===null||q===Y?We(q,D):q.lastUpdate===null||Y.lastUpdate===null?(We(q,D),We(Y,D)):(We(q,D),Y.lastUpdate=D)}function It(S,D){var T=S.updateQueue;T=T===null?S.updateQueue=Un(S.memoizedState):nr(S,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=D:(T.lastCapturedUpdate.next=D,T.lastCapturedUpdate=D)}function nr(S,D){var T=S.alternate;return T!==null&&D===T.updateQueue&&(D=S.updateQueue=Sn(D)),D}function $(S,D,T,q,Y,Ae){switch(T.tag){case 1:return S=T.payload,typeof S=="function"?S.call(Ae,q,Y):S;case 3:S.effectTag=S.effectTag&-4097|64;case 0:if(S=T.payload,Y=typeof S=="function"?S.call(Ae,q,Y):S,Y==null)break;return r({},q,Y);case 2:_s=!0}return q}function ye(S,D,T,q,Y){_s=!1,D=nr(S,D);for(var Ae=D.baseState,De=null,vt=0,wt=D.firstUpdate,xt=Ae;wt!==null;){var _r=wt.expirationTime;_rbn?(ai=Fr,Fr=null):ai=Fr.sibling;var tn=di(rt,Fr,ft[bn],Wt);if(tn===null){Fr===null&&(Fr=ai);break}S&&Fr&&tn.alternate===null&&D(rt,Fr),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn,Fr=ai}if(bn===ft.length)return T(rt,Fr),vr;if(Fr===null){for(;bnbn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,tn.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}S&&Fr&&ho.alternate===null&&D(rt,Fr),Ve=Ae(ho,Ve,bn),Pn===null?vr=ho:Pn.sibling=ho,Pn=ho,Fr=ai}if(tn.done)return T(rt,Fr),vr;if(Fr===null){for(;!tn.done;bn++,tn=ft.next())tn=is(rt,tn.value,Wt),tn!==null&&(Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return vr}for(Fr=q(rt,Fr);!tn.done;bn++,tn=ft.next())tn=po(Fr,rt,bn,tn.value,Wt),tn!==null&&(S&&tn.alternate!==null&&Fr.delete(tn.key===null?bn:tn.key),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return S&&Fr.forEach(function(vF){return D(rt,vF)}),vr}return function(rt,Ve,ft,Wt){var vr=typeof ft=="object"&&ft!==null&&ft.type===E&&ft.key===null;vr&&(ft=ft.props.children);var Pn=typeof ft=="object"&&ft!==null;if(Pn)switch(ft.$$typeof){case p:e:{for(Pn=ft.key,vr=Ve;vr!==null;){if(vr.key===Pn)if(vr.tag===7?ft.type===E:vr.elementType===ft.type){T(rt,vr.sibling),Ve=Y(vr,ft.type===E?ft.props.children:ft.props,Wt),Ve.ref=QA(rt,vr,ft),Ve.return=rt,rt=Ve;break e}else{T(rt,vr);break}else D(rt,vr);vr=vr.sibling}ft.type===E?(Ve=bu(ft.props.children,rt.mode,Wt,ft.key),Ve.return=rt,rt=Ve):(Wt=qm(ft.type,ft.key,ft.props,null,rt.mode,Wt),Wt.ref=QA(rt,Ve,ft),Wt.return=rt,rt=Wt)}return De(rt);case h:e:{for(vr=ft.key;Ve!==null;){if(Ve.key===vr)if(Ve.tag===4&&Ve.stateNode.containerInfo===ft.containerInfo&&Ve.stateNode.implementation===ft.implementation){T(rt,Ve.sibling),Ve=Y(Ve,ft.children||[],Wt),Ve.return=rt,rt=Ve;break e}else{T(rt,Ve);break}else D(rt,Ve);Ve=Ve.sibling}Ve=Rw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve}return De(rt)}if(typeof ft=="string"||typeof ft=="number")return ft=""+ft,Ve!==null&&Ve.tag===6?(T(rt,Ve.sibling),Ve=Y(Ve,ft,Wt),Ve.return=rt,rt=Ve):(T(rt,Ve),Ve=Fw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve),De(rt);if(kA(ft))return VA(rt,Ve,ft,Wt);if(ce(ft))return Yo(rt,Ve,ft,Wt);if(Pn&&Ap(rt,ft),typeof ft>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,Ve)}}var gu=ig(!0),sg=ig(!1),du={},uo={current:du},FA={current:du},mc={current:du};function ca(S){if(S===du)throw Error(n(174));return S}function og(S,D){On(mc,D,S),On(FA,S,S),On(uo,du,S),D=ne(D),Vn(uo,S),On(uo,D,S)}function yc(S){Vn(uo,S),Vn(FA,S),Vn(mc,S)}function Pm(S){var D=ca(mc.current),T=ca(uo.current);D=ee(T,S.type,D),T!==D&&(On(FA,S,S),On(uo,D,S))}function ag(S){FA.current===S&&(Vn(uo,S),Vn(FA,S))}var $n={current:0};function fp(S){for(var D=S;D!==null;){if(D.tag===13){var T=D.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Ls(T)||so(T)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===S)break;for(;D.sibling===null;){if(D.return===null||D.return===S)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function lg(S,D){return{responder:S,props:D}}var RA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,xi=null,wc=0;function ct(){throw Error(n(321))}function Eu(S,D){if(D===null)return!1;for(var T=0;TCc&&(Cc=_r,Hm(Cc))):(Pw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===S?wt.eagerState:S(Ae,wt.action)),De=wt,wt=wt.next}while(wt!==null&&wt!==q);xt||(vt=De,Y=Ae),hs(Ae,D.memoizedState)||(jo=!0),D.memoizedState=Ae,D.baseUpdate=vt,D.baseState=Y,T.lastRenderedState=Ae}return[D.memoizedState,T.dispatch]}function ug(S){var D=TA();return typeof S=="function"&&(S=S()),D.memoizedState=D.baseState=S,S=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:S},S=S.dispatch=gg.bind(null,Ha,S),[D.memoizedState,S]}function Ag(S){return Cs(Br,S)}function fg(S,D,T,q){return S={tag:S,create:D,destroy:T,deps:q,next:null},G===null?(G={lastEffect:null},G.lastEffect=S.next=S):(D=G.lastEffect,D===null?G.lastEffect=S.next=S:(T=D.next,D.next=S,S.next=T,G.lastEffect=S)),S}function hp(S,D,T,q){var Y=TA();Dt|=S,Y.memoizedState=fg(D,T,void 0,q===void 0?null:q)}function Ic(S,D,T,q){var Y=pp();q=q===void 0?null:q;var Ae=void 0;if(Gi!==null){var De=Gi.memoizedState;if(Ae=De.destroy,q!==null&&Eu(q,De.deps)){fg(0,T,Ae,q);return}}Dt|=S,Y.memoizedState=fg(D,T,Ae,q)}function Ct(S,D){return hp(516,192,S,D)}function bm(S,D){return Ic(516,192,S,D)}function pg(S,D){if(typeof D=="function")return S=S(),D(S),function(){D(null)};if(D!=null)return S=S(),D.current=S,function(){D.current=null}}function hg(){}function Cu(S,D){return TA().memoizedState=[S,D===void 0?null:D],S}function xm(S,D){var T=pp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Eu(D,q[1])?q[0]:(T.memoizedState=[S,D],S)}function gg(S,D,T){if(!(25>wc))throw Error(n(301));var q=S.alternate;if(S===Ha||q!==null&&q===Ha)if(wl=!0,S={expirationTime:mu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},xi===null&&(xi=new Map),T=xi.get(D),T===void 0)xi.set(D,S);else{for(D=T;D.next!==null;)D=D.next;D.next=S}else{var Y=ga(),Ae=ht.suspense;Y=qA(Y,S,Ae),Ae={expirationTime:Y,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var De=D.last;if(De===null)Ae.next=Ae;else{var vt=De.next;vt!==null&&(Ae.next=vt),De.next=Ae}if(D.last=Ae,S.expirationTime===0&&(q===null||q.expirationTime===0)&&(q=D.lastRenderedReducer,q!==null))try{var wt=D.lastRenderedState,xt=q(wt,T);if(Ae.eagerReducer=q,Ae.eagerState=xt,hs(xt,wt))return}catch{}finally{}Pc(S,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},Ew={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,hp(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return hp(4,36,S,D)},useMemo:function(S,D){var T=TA();return D=D===void 0?null:D,S=S(),T.memoizedState=[S,D],S},useReducer:function(S,D,T){var q=TA();return D=T!==void 0?T(D):D,q.memoizedState=q.baseState=D,S=q.queue={last:null,dispatch:null,lastRenderedReducer:S,lastRenderedState:D},S=S.dispatch=gg.bind(null,Ha,S),[q.memoizedState,S]},useRef:function(S){var D=TA();return S={current:S},D.memoizedState=S},useState:ug,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=ug(S),q=T[0],Y=T[1];return Ct(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),q},useTransition:function(S){var D=ug(!1),T=D[0],q=D[1];return[Cu(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},km={readContext:ms,useCallback:xm,useContext:ms,useEffect:bm,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,Ic(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return Ic(4,36,S,D)},useMemo:function(S,D){var T=pp();D=D===void 0?null:D;var q=T.memoizedState;return q!==null&&D!==null&&Eu(D,q[1])?q[0]:(S=S(),T.memoizedState=[S,D],S)},useReducer:Cs,useRef:function(){return pp().memoizedState},useState:Ag,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=Ag(S),q=T[0],Y=T[1];return bm(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),q},useTransition:function(S){var D=Ag(!1),T=D[0],q=D[1];return[xm(function(Y){q(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{q(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},Aa=null,Bc=null,Il=!1;function Iu(S,D){var T=Dl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=D,T.return=S,T.effectTag=8,S.lastEffect!==null?(S.lastEffect.nextEffect=T,S.lastEffect=T):S.firstEffect=S.lastEffect=T}function dg(S,D){switch(S.tag){case 5:return D=io(D,S.type,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 6:return D=Pi(D,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function NA(S){if(Il){var D=Bc;if(D){var T=D;if(!dg(S,D)){if(D=cc(T),!D||!dg(S,D)){S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S;return}Iu(Aa,T)}Aa=S,Bc=cu(D)}else S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S}}function gp(S){for(S=S.return;S!==null&&S.tag!==5&&S.tag!==3&&S.tag!==13;)S=S.return;Aa=S}function qa(S){if(!y||S!==Aa)return!1;if(!Il)return gp(S),Il=!0,!1;var D=S.type;if(S.tag!==5||D!=="head"&&D!=="body"&&!ke(D,S.memoizedProps))for(D=Bc;D;)Iu(S,D),D=cc(D);if(gp(S),S.tag===13){if(!y)throw Error(n(316));if(S=S.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(n(317));Bc=Os(S)}else Bc=Aa?cc(S.stateNode):null;return!0}function mg(){y&&(Bc=Aa=null,Il=!1)}var dp=u.ReactCurrentOwner,jo=!1;function ws(S,D,T,q){D.child=S===null?sg(D,null,T,q):gu(D,S.child,T,q)}function Ii(S,D,T,q,Y){T=T.render;var Ae=D.ref;return ds(D,Y),q=cg(S,D,T,q,Ae,Y),S!==null&&!jo?(D.updateQueue=S.updateQueue,D.effectTag&=-517,S.expirationTime<=Y&&(S.expirationTime=0),si(S,D,Y)):(D.effectTag|=1,ws(S,D,q,Y),D.child)}function Qm(S,D,T,q,Y,Ae){if(S===null){var De=T.type;return typeof De=="function"&&!Qw(De)&&De.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(D.tag=15,D.type=De,Fm(S,D,De,q,Y,Ae)):(S=qm(T.type,null,q,null,D.mode,Ae),S.ref=D.ref,S.return=D,D.child=S)}return De=S.child,YD)&&HA.set(S,D)))}}function Dg(S,D){S.expirationTimeS?D:S)}function fo(S){if(S.lastExpiredTime!==0)S.callbackExpirationTime=1073741823,S.callbackPriority=99,S.callbackNode=pu(Sw.bind(null,S));else{var D=_m(S),T=S.callbackNode;if(D===0)T!==null&&(S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90);else{var q=ga();if(D===1073741823?q=99:D===1||D===2?q=95:(q=10*(1073741821-D)-10*(1073741821-q),q=0>=q?99:250>=q?98:5250>=q?97:95),T!==null){var Y=S.callbackPriority;if(S.callbackExpirationTime===D&&Y>=q)return;T!==PA&&Ce(T)}S.callbackExpirationTime=D,S.callbackPriority=q,D=D===1073741823?pu(Sw.bind(null,S)):gc(q,Wv.bind(null,S),{timeout:10*(1073741821-D)-Li()}),S.callbackNode=D}}}function Wv(S,D){if(Um=0,D)return D=ga(),jm(S,D),fo(S),null;var T=_m(S);if(T!==0){if(D=S.callbackNode,(yr&(rs|qs))!==En)throw Error(n(327));if(Bp(),S===gi&&T===ns||Su(S,T),Or!==null){var q=yr;yr|=rs;var Y=GA(S);do try{pF();break}catch(vt){jA(S,vt)}while(1);if(la(),yr=q,Cp.current=Y,Yi===Nm)throw D=Lm,Su(S,T),KA(S,T),fo(S),D;if(Or===null)switch(Y=S.finishedWork=S.current.alternate,S.finishedExpirationTime=T,q=Yi,gi=null,q){case Bu:case Nm:throw Error(n(345));case Bi:jm(S,2=T){S.lastPingedTime=T,Su(S,T);break}}if(Ae=_m(S),Ae!==0&&Ae!==T)break;if(q!==0&&q!==T){S.lastPingedTime=q;break}S.timeoutHandle=Te(Pu.bind(null,S),Y);break}Pu(S);break;case vl:if(KA(S,T),q=S.lastSuspendedTime,T===q&&(S.nextKnownPendingLevel=bw(Y)),UA&&(Y=S.lastPingedTime,Y===0||Y>=T)){S.lastPingedTime=T,Su(S,T);break}if(Y=_m(S),Y!==0&&Y!==T)break;if(q!==0&&q!==T){S.lastPingedTime=q;break}if(MA!==1073741823?q=10*(1073741821-MA)-Li():Ya===1073741823?q=0:(q=10*(1073741821-Ya)-5e3,Y=Li(),T=10*(1073741821-T)-Y,q=Y-q,0>q&&(q=0),q=(120>q?120:480>q?480:1080>q?1080:1920>q?1920:3e3>q?3e3:4320>q?4320:1960*ww(q/1960))-q,T=q?q=0:(Y=De.busyDelayMs|0,Ae=Li()-(10*(1073741821-Ae)-(De.timeoutMs|0||5e3)),q=Ae<=Y?0:Y+q-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Sc&&(Yi=Bi),Ae=Eg(Ae,Y),wt=q;do{switch(wt.tag){case 3:De=Ae,wt.effectTag|=4096,wt.expirationTime=D;var Ve=Gv(wt,De,D);It(wt,Ve);break e;case 1:De=Ae;var ft=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof ft.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,De,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=zv(Or)}catch(Pn){D=Pn;continue}break}while(1)}function GA(){var S=Cp.current;return Cp.current=wu,S===null?wu:S}function Pw(S,D){Swp&&(wp=S)}function fF(){for(;Or!==null;)Or=Jv(Or)}function pF(){for(;Or!==null&&!Rt();)Or=Jv(Or)}function Jv(S){var D=Zv(S.alternate,S,ns);return S.memoizedProps=S.pendingProps,D===null&&(D=zv(S)),Iw.current=null,D}function zv(S){Or=S;do{var D=Or.alternate;if(S=Or.return,(Or.effectTag&2048)===0){e:{var T=D;D=Or;var q=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Ma(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(T===null||T.child===null)&&qa(D)&&pa(D),Bl(D);break;case 5:ag(D);var Ae=ca(mc.current);if(q=D.type,T!==null&&D.stateNode!=null)ts(T,D,q,Y,Ae),T.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(T=ca(uo.current),qa(D)){if(Y=D,!y)throw Error(n(175));T=lp(Y.stateNode,Y.type,Y.memoizedProps,Ae,T,Y),Y.updateQueue=T,T=T!==null,T&&pa(D)}else{var De=At(q,Y,Ae,T,D);vc(De,D,!1,!1),D.stateNode=De,at(De,q,Y,Ae,T)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(T&&D.stateNode!=null)Gr(T,D,T.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(T=ca(mc.current),Ae=ca(uo.current),qa(D)){if(T=D,!y)throw Error(n(176));(T=cp(T.stateNode,T.memoizedProps,T))&&pa(D)}else D.stateNode=He(Y,T,Ae,D)}break;case 11:break;case 13:if(Vn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=q;break e}Y=Y!==null,Ae=!1,T===null?D.memoizedProps.fallback!==void 0&&qa(D):(q=T.memoizedState,Ae=q!==null,Y||q===null||(q=T.child.sibling,q!==null&&(De=D.firstEffect,De!==null?(D.firstEffect=q,q.nextEffect=De):(D.firstEffect=D.lastEffect=q,q.nextEffect=null),q.effectTag=8))),Y&&!Ae&&(D.mode&2)!==0&&(T===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),wp!==0&&gi!==null&&(KA(gi,ns),eD(gi,wp)))),P&&Y&&(D.effectTag|=4),w&&(Y||Ae)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Ma(D);break;case 19:if(Vn($n,D),Y=D.memoizedState,Y===null)break;if(Ae=(D.effectTag&64)!==0,De=Y.rendering,De===null){if(Ae)Dc(Y,!1);else if(Yi!==Bu||T!==null&&(T.effectTag&64)!==0)for(T=D.child;T!==null;){if(De=fp(T),De!==null){for(D.effectTag|=64,Dc(Y,!1),T=De.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,T=q,Y=D.child;Y!==null;)Ae=Y,q=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,De=Ae.alternate,De===null?(Ae.childExpirationTime=0,Ae.expirationTime=q,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=De.childExpirationTime,Ae.expirationTime=De.expirationTime,Ae.child=De.child,Ae.memoizedProps=De.memoizedProps,Ae.memoizedState=De.memoizedState,Ae.updateQueue=De.updateQueue,q=De.dependencies,Ae.dependencies=q===null?null:{expirationTime:q.expirationTime,firstContext:q.firstContext,responders:q.responders}),Y=Y.sibling;On($n,$n.current&1|2,D),D=D.child;break e}T=T.sibling}}else{if(!Ae)if(T=fp(De),T!==null){if(D.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!De.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=q),De>Y&&(Y=De),Ae=Ae.sibling;T.childExpirationTime=Y}if(D!==null)return D;S!==null&&(S.effectTag&2048)===0&&(S.firstEffect===null&&(S.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(S.lastEffect!==null&&(S.lastEffect.nextEffect=Or.firstEffect),S.lastEffect=Or.lastEffect),1S?D:S}function Pu(S){var D=_o();return lo(99,hF.bind(null,S,D)),null}function hF(S,D){do Bp();while(Bg!==null);if((yr&(rs|qs))!==En)throw Error(n(327));var T=S.finishedWork,q=S.finishedExpirationTime;if(T===null)return null;if(S.finishedWork=null,S.finishedExpirationTime=0,T===S.current)throw Error(n(177));S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90,S.nextKnownPendingLevel=0;var Y=bw(T);if(S.firstPendingTime=Y,q<=S.lastSuspendedTime?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:q<=S.firstSuspendedTime&&(S.firstSuspendedTime=q-1),q<=S.lastPingedTime&&(S.lastPingedTime=0),q<=S.lastExpiredTime&&(S.lastExpiredTime=0),S===gi&&(Or=gi=null,ns=0),1=T?ln(S,D,T):(On($n,$n.current&1,D),D=si(S,D,T),D!==null?D.sibling:null);On($n,$n.current&1,D);break;case 19:if(q=D.childExpirationTime>=T,(S.effectTag&64)!==0){if(q)return ja(S,D,T);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),On($n,$n.current,D),!q)return null}return si(S,D,T)}jo=!1}}else jo=!1;switch(D.expirationTime=0,D.tag){case 2:if(q=D.type,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,Y=Oe(D,Mn.current),ds(D,T),Y=cg(null,D,q,S,Y,T),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,yw(),ii(q)){var Ae=!0;Ac(D)}else Ae=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var De=q.getDerivedStateFromProps;typeof De=="function"&&er(D,q,De,S),Y.updater=$r,D.stateNode=Y,Y._reactInternalFiber=D,qo(D,q,S,T),D=yp(null,D,q,!0,Ae,T)}else D.tag=0,ws(null,D,Y,T),D=D.child;return D;case 16:if(Y=D.elementType,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,me(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,Ae=D.tag=wF(Y),S=Ci(Y,S),Ae){case 0:D=LA(null,D,Y,S,T);break;case 1:D=mp(null,D,Y,S,T);break;case 11:D=Ii(null,D,Y,S,T);break;case 14:D=Qm(null,D,Y,Ci(Y.type,S),q,T);break;default:throw Error(n(306,Y,""))}return D;case 0:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),LA(S,D,q,Y,T);case 1:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),mp(S,D,q,Y,T);case 3:if(yg(D),q=D.updateQueue,q===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,ye(D,q,D.pendingProps,null,T),q=D.memoizedState.element,q===Y)mg(),D=si(S,D,T);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(T=sg(D,null,q,T),D.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else ws(S,D,q,T),mg();D=D.child}return D;case 5:return Pm(D),S===null&&NA(D),q=D.type,Y=D.pendingProps,Ae=S!==null?S.memoizedProps:null,De=Y.children,ke(q,Y)?De=null:Ae!==null&&ke(q,Ae)&&(D.effectTag|=16),Go(S,D),D.mode&4&&T!==1&&xe(q,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(S,D,De,T),D=D.child),D;case 6:return S===null&&NA(D),null;case 13:return ln(S,D,T);case 4:return og(D,D.stateNode.containerInfo),q=D.pendingProps,S===null?D.child=gu(D,null,q,T):ws(S,D,q,T),D.child;case 11:return q=D.type,Y=D.pendingProps,Y=D.elementType===q?Y:Ci(q,Y),Ii(S,D,q,Y,T);case 7:return ws(S,D,D.pendingProps,T),D.child;case 8:return ws(S,D,D.pendingProps.children,T),D.child;case 12:return ws(S,D,D.pendingProps.children,T),D.child;case 10:e:{if(q=D.type._context,Y=D.pendingProps,De=D.memoizedProps,Ae=Y.value,Ho(D,Ae),De!==null){var vt=De.value;if(Ae=hs(vt,Ae)?0:(typeof q._calculateChangedBits=="function"?q._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(De.children===Y.children&&!_i.current){D=si(S,D,T);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){De=vt.child;for(var xt=wt.firstContext;xt!==null;){if(xt.context===q&&(xt.observedBits&Ae)!==0){vt.tag===1&&(xt=ys(T,null),xt.tag=2,tt(vt,xt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var T=D.inject(S);xw=function(q){try{D.onCommitFiberRoot(T,q,void 0,(q.current.effectTag&64)===64)}catch{}},kw=function(q){try{D.onCommitFiberUnmount(T,q)}catch{}}}catch{}return!0}function CF(S,D,T,q){this.tag=S,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=q,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(S,D,T,q){return new CF(S,D,T,q)}function Qw(S){return S=S.prototype,!(!S||!S.isReactComponent)}function wF(S){if(typeof S=="function")return Qw(S)?1:0;if(S!=null){if(S=S.$$typeof,S===L)return 11;if(S===te)return 14}return 2}function WA(S,D){var T=S.alternate;return T===null?(T=Dl(S.tag,D,S.key,S.mode),T.elementType=S.elementType,T.type=S.type,T.stateNode=S.stateNode,T.alternate=S,S.alternate=T):(T.pendingProps=D,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=S.childExpirationTime,T.expirationTime=S.expirationTime,T.child=S.child,T.memoizedProps=S.memoizedProps,T.memoizedState=S.memoizedState,T.updateQueue=S.updateQueue,D=S.dependencies,T.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},T.sibling=S.sibling,T.index=S.index,T.ref=S.ref,T}function qm(S,D,T,q,Y,Ae){var De=2;if(q=S,typeof S=="function")Qw(S)&&(De=1);else if(typeof S=="string")De=5;else e:switch(S){case E:return bu(T.children,Y,Ae,D);case R:De=8,Y|=7;break;case I:De=8,Y|=1;break;case v:return S=Dl(12,T,D,Y|8),S.elementType=v,S.type=v,S.expirationTime=Ae,S;case U:return S=Dl(13,T,D,Y),S.type=U,S.elementType=U,S.expirationTime=Ae,S;case J:return S=Dl(19,T,D,Y),S.elementType=J,S.expirationTime=Ae,S;default:if(typeof S=="object"&&S!==null)switch(S.$$typeof){case x:De=10;break e;case C:De=9;break e;case L:De=11;break e;case te:De=14;break e;case ae:De=16,q=null;break e}throw Error(n(130,S==null?S:typeof S,""))}return D=Dl(De,T,D,Y),D.elementType=S,D.type=q,D.expirationTime=Ae,D}function bu(S,D,T,q){return S=Dl(7,S,q,D),S.expirationTime=T,S}function Fw(S,D,T){return S=Dl(6,S,null,D),S.expirationTime=T,S}function Rw(S,D,T){return D=Dl(4,S.children!==null?S.children:[],S.key,D),D.expirationTime=T,D.stateNode={containerInfo:S.containerInfo,pendingChildren:null,implementation:S.implementation},D}function IF(S,D,T){this.tag=D,this.current=null,this.containerInfo=S,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=qe,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(S,D){var T=S.firstSuspendedTime;return S=S.lastSuspendedTime,T!==0&&T>=D&&S<=D}function KA(S,D){var T=S.firstSuspendedTime,q=S.lastSuspendedTime;TD||T===0)&&(S.lastSuspendedTime=D),D<=S.lastPingedTime&&(S.lastPingedTime=0),D<=S.lastExpiredTime&&(S.lastExpiredTime=0)}function eD(S,D){D>S.firstPendingTime&&(S.firstPendingTime=D);var T=S.firstSuspendedTime;T!==0&&(D>=T?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:D>=S.lastSuspendedTime&&(S.lastSuspendedTime=D+1),D>S.nextKnownPendingLevel&&(S.nextKnownPendingLevel=D))}function jm(S,D){var T=S.lastExpiredTime;(T===0||T>D)&&(S.lastExpiredTime=D)}function tD(S){var D=S._reactInternalFiber;if(D===void 0)throw typeof S.render=="function"?Error(n(188)):Error(n(268,Object.keys(S)));return S=Ee(D),S===null?null:S.stateNode}function rD(S,D){S=S.memoizedState,S!==null&&S.dehydrated!==null&&S.retryTime{"use strict";SEe.exports=DEe()});var xEe=_((yKt,bEe)=>{"use strict";var Hyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};bEe.exports=Hyt});var REe=_((EKt,FEe)=>{"use strict";var qyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),kEe=function(){Wk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){b6(this,t),this.width=e,this.height=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),QEe=function(){function t(e,r){b6(this,t),this.unit=e,this.value=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();FEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),x=1;x1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),qyt({Config:e.Config,Node:e.Node,Layout:t("Layout",jyt),Size:t("Size",kEe),Value:t("Value",QEe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var TEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(x){Runtime.warnOnce("Blob constructor present but fails: "+x+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var R=C.getContext("2d");R.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(R){h||(h=!0,Module.preloadedAudios[u]=R,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var x=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ae="=",fe="",ce=0,me=0,he=0;he=6;){var Be=ce>>me-6&63;me-=6,fe+=te[Be]}return me==2?(fe+=te[(ce&3)<<4],fe+=ae+ae):me==4&&(fe+=te[(ce&15)<<2],fe+=ae),fe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=x,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,x){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var R;return x?R=E.replace("X",p).replace("Y",v):R=p.replace("X",E).replace("Y",v),R.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,x,C,R){x===void 0&&(x="X"),R===void 0&&(R=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(x=r(C[2],C[0],x,te[0],"?",!0));var ae;J==0&&(ae="Unbound"),J>=10&&(ae="Corrupt"),R>20&&(ae="Deeply nested"),ae&&o(ae,p,x,J,v||"?");var fe=U.paramList[0],ce=a(fe,h,E,I,v,x,te,R+1),me,he={flags:te[0],id:p,name:"",paramList:[ce]},Be=[],we="?";switch(U.placeholderFlag){case 1:me=ce.spec;break;case 2:if((ce.flags&15360)==1024&&ce.spec.ptrSize==1){he.flags=7168;break}case 3:case 6:case 5:me=ce.spec,ce.flags&15360;break;case 8:we=""+U.paramList[1],he.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var x=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[x/4],I=HEAPU32[x/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},R={__nbindFlags:E,__nbindPtr:I};v&&(R.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(R);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,x=e.ABORT|0,C=e.STACKTOP|0,R=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,ae=0,fe=0,ce=t.NaN,me=t.Infinity,he=0,Be=0,we=0,g=0,Ee=0,Se=0,le=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,Fe=t.Math.cos,At=t.Math.sin,H=t.Math.tan,at=t.Math.acos,Re=t.Math.asin,ke=t.Math.atan,xe=t.Math.atan2,He=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,qe=t.Math.imul,b=t.Math.min,w=t.Math.max,P=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Pe=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,bt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,br=e.invoke_diii,Wr=e.invoke_di,Kn=e.invoke_iid,Ns=e.invoke_iii,Ti=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Pi=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,lp=e.invoke_v,cp=e.invoke_viid,Os=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Ms=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Vn=e._removeAccessorPrefix,On=e._typeModule,Ni=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ma=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,DA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Rt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,SA=e._emscripten_get_now,up=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,bA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function qi(s,l){s=s|0,l=l|0,C=s,R=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,Se=s}function Ua(){return Se|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,pt(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Eg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Rm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Ip(l,d,d,s+8|0),Bg(s,l),_A(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||TR[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Sn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||TR[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0;et=C,C=C+64|0,j=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Me=et+20|0,Qe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}HA(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Ip(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,Ip(se,f,f>>>2,n[Qe+16>>2]|0),n[Ge>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[Ge>>2],n[j>>2]=n[Me>>2],Dw(se,k,j),f=n[Qe>>2]|0,n[Qe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,_A(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=vg(s,Qe,l)|0,_A(Qe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ce),s=n[s+944>>2]|0}while((s|0)!=0)}function pt(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ht(s){return s=s|0,n[s+944>>2]|0}function Tt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function $r(s,l){s=s|0,l=l|0,QUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function ji(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function bi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function qo(s){return s=s|0,n[s+980>>2]|0}function kA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function QA(s){return s=s|0,n[s+4>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function FA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function og(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function ag(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function lg(s){return s=s|0,n[s+36>>2]|0}function RA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ce),n[c>>2]=3,Le(s))}function xi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function cg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function pp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ce),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function ug(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function Ag(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ce),n[l>>2]=3,Le(s))}function fg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function hp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function bm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function gg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ew(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function km(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function dg(s){return s=s|0,y(h[s+408>>2])}function NA(s){return s=s|0,y(h[s+412>>2])}function gp(s){return s=s|0,y(h[s+416>>2])}function qa(s){return s=s|0,y(h[s+420>>2])}function mg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function dp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function jo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ma(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),e3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(bR(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function LA(s,l,c,f,d,m,B,k,Q,M,O,j,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),j=y(j),se=se|0;var Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze;return Q>2]),Me!=y(0))?(et=y(Go(l,Me,0,0)),Xe=y(Go(f,Me,0,0)),Qe=y(Go(m,Me,0,0)),Me=y(Go(k,Me,0,0))):(Qe=m,et=l,Me=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Qe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Me,Xe)|0:se=0,!Ge&&(lt=y(l-O),!(mp(s,lt,Q)|0))&&!(yp(s,lt,d,Q)|0)?Ge=yg(s,lt,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-j),!(mp(c,Ue,M)|0))&&!(yp(c,Ue,B,M)|0)?se=yg(c,Ue,B,k,M)|0:se=1,se=Ge&se),se|0}function mp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function yp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function yg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var j=0,se=0,Ge=0,Me=0,Qe=Ze,et=Ze,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Mr=ir+104|0,Ue=ir+72|0,Me=ir+56|0,Lt=ir+8|0,lt=ir,je=(n[2279]|0)+1|0,n[2279]=je,Sr=s+984|0,(o[Sr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Qe=y(ln(s,2,B)),et=y(ln(s,0,B)),j=s+916|0,mo=y(h[j>>2]),go=y(h[s+920>>2]),xn=y(h[s+932>>2]),LA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,xn,y(h[s+936>>2]),Qe,et,O)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(j=s+524+(se*24|0)|0,xn=y(h[j>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),LA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,xn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Qe,et,O)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(j=s+916|0,!(Ii(y(h[j>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}j=(n[s+928>>2]|0)==(m|0)?j:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(j=s+524+(se*24|0)|0,Ii(y(h[j>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(j=0,Xe=28):(j=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((j|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Me=j+16|0,n[s+908>>2]=n[Me>>2],Ge=j+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[lt>>2]=OA(je)|0,n[lt+4>>2]=je,Ao(s,4,2972,lt),se=n[s+972>>2]|0,se|0&&tf[se&127](s),d=ja(d,Q)|0,m=ja(m,Q)|0,ya=+y(h[Me>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=M,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=OA(je)|0,n[Me>>2]=se,n[Me+4>>2]=je,n[Me+8>>2]=Nr?3047:11699,Ao(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=ja(d,Q)|0,Xe=ja(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=M,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Lt=OA(se)|0,n[Mr>>2]=Lt,n[Mr+4>>2]=se,n[Mr+8>>2]=Nr?3047:11699,Ao(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=ja(d,Q)|0,Mr=ja(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Mr,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=M,Ao(s,4,3092,or)),n[s+516>>2]=f,j||(se=s+520|0,j=n[se>>2]|0,(j|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,j=0),Q?j=s+916|0:(n[se>>2]=j+1,j=s+524+(j*24|0)|0),h[j>>2]=l,h[j+4>>2]=c,n[j+8>>2]=d,n[j+12>>2]=m,n[j+16>>2]=n[s+908>>2],n[j+20>>2]=n[s+912>>2],j=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Sr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(j|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Cg(f,s,l,c,d),C=m}function OA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function ja(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,j=0,se=0,Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze,je=Ze,Lt=0,Mr=0,or=0,Xt=Ze,Sr=Ze,Nr=0,ir=Ze,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=Ze,_p=Ze,Tu=Ze,Nu=Ze,kc=Ze,js=0,za=0,Wo=0,kl=0,nf=0,sf=Ze,Lu=Ze,of=Ze,af=Ze,Gs=Ze,vs=Ze,Ql=0,Rn=Ze,lf=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,cf=0,uf=0,Rc=Ze,Ys=Ze,Fl=0,Af=0,ff=0,pf=0,xr=Ze,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0,Jt=Ze,hf=0,li=0;Rl=C,C=C+16|0,js=Rl+12|0,za=Rl+8|0,Wo=Rl+4|0,kl=Rl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Rr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Ig(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),xl=s+508|0,o[xl>>0]=0,Rr=fr(n[s+4>>2]|0,Ds)|0,ur=ww(Rr,Ds)|0,Jn=pe(Rr)|0,Mp=n[s+8>>2]|0,Af=s+28|0,xc=(n[Af>>2]|0)!=0,Co=Jn?B:k,Rc=Jn?k:B,Up=y(Cp(s,Rr,B)),_p=y(Iw(s,Rr,B)),Me=y(Cp(s,ur,B)),Fc=y(En(s,Rr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,xr=Jn?Fc:Ys,lt=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Qe=y(y(Gr(s+364|0,B))-xr),et=y(y(Gr(s+380|0,B))-xr),Ue=y(y(Gr(s+372|0,k))-lt),je=y(y(Gr(s+388|0,k))-lt),Tu=Jn?Qe:Ue,Nu=Jn?et:je,Qc=y(l-Qc),l=y(Qc-xr),_t(l)|0?xr=l:xr=y(_n(y(Tg(l,et)),Qe)),lf=y(c-Xe),l=y(lf-lt),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,je)),Ue)),Qe=Jn?xr:Eo,Rn=Jn?Eo:xr;e:do if((or|0)==1)for(f=0,j=0;;){if(O=gs(s,j)|0,!f)y(rs(O))>y(0)&&y(qs(O))>y(0)?f=O:f=0;else if(Tm(O)|0){Ge=0;break e}if(j=j+1|0,j>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Mr=Ge+504|0,f=0,O=0,l=y(0),se=0;do{if(j=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[j+36>>2]|0)==1)Bu(j),o[j+985>>0]=1,o[j+984>>0]=0;else{Bl(j),Q&&Ep(j,mt(j,Ds)|0,Qe,Rn,xr);do if((n[j+24>>2]|0)!=1)if((j|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Nm(s,j,xr,d,Eo,xr,Eo,m,Ds,M);break}else O|0&&(n[O+960>>2]=j),n[j+960>>2]=0,O=j,f=(f|0)==0?j:f;while(0);vs=y(h[j+504>>2]),l=y(l+y(vs+y(ln(j,Rr,xr))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Qe,Ql=xc&((or|0)==2&mo)?1:or,xn=(Fl|0)==1,ya=xn&(Q^1),Fp=(Ql|0)==1,Rp=(Ql|0)==2,bl=976+(Rr<<2)|0,Tp=(Fl|2|0)==2,Op=xn&(xc^1),Fu=1040+(ur<<2)|0,Ru=1040+(Rr<<2)|0,Np=976+(ur<<2)|0,Lp=(Fl|0)!=1,mo=xc&((or|0)!=0&mo),go=s+976|0,xn=xn^1,l=Qe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Mr=n[wo>>2]|0,se=0,je=y(0),Ue=y(0),et=y(0),Qe=y(0),j=0,O=0,Ge=Nr;;){if(Lt=n[Mr+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Rr,xr)),Xr=n[bl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),lt=y(h[Lt+504>>2]),c=y(Tg(c,lt)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),xc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=je,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(je+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Qe=y(Qe-y(lt*y(qs(Lt))))),O|0&&(n[O+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,O=Lt,j=(j|0)==0?Lt:j}else Xe=je,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)je=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Qe=y(0),j=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&QeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Sr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Sry(0),Ue=y(Sr/Xt),et=y(0),Xe=y(0),l=y(0),O=j;do c=y(Gr(O+380+(se<<3)|0,Co)),Qe=y(Gr(O+364+(se<<3)|0,Co)),Qe=y(Tg(c,y(_n(Qe,y(h[O+504>>2]))))),Ge?(c=y(Qe*y(qs(O))),c!=y(-0)&&(Jt=y(Qe-y(lt*c)),sf=y(Bi(O,Rr,Jt,ir,xr)),Jt!=sf)&&(et=y(et-y(sf-Qe)),l=y(l+c))):Lt&&(Lu=y(rs(O)),Lu!=y(0))&&(Jt=y(Qe+y(Ue*Lu)),of=y(Bi(O,Rr,Jt,ir,xr)),Jt!=of)&&(et=y(et-y(of-Qe)),Xe=y(Xe-Lu)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(je+l),Qe=y(Sr+et),nf)l=y(0);else{lt=y(Xt+Xe),Ge=n[bl>>2]|0,Lt=Qey(0),lt=y(Qe/lt),l=y(0);do{Jt=y(Gr(j+380+(Ge<<3)|0,Co)),et=y(Gr(j+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[j+504>>2]))))),Lt?(Jt=y(et*y(qs(j))),Qe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Qe),Qe=y(Bi(j,Rr,y(et+(Mr?Qe:Jt)),ir,xr))):Qe=et):se&&(af=y(rs(j)),af!=y(0))?Qe=y(Bi(j,Rr,y(et+y(lt*af)),ir,xr)):Qe=et,l=y(l-y(Qe-et)),Xe=y(ln(j,Rr,xr)),c=y(ln(j,ur,xr)),Qe=y(Qe+Xe),h[za>>2]=Qe,n[kl>>2]=1,et=y(h[j+396>>2]);e:do if(_t(et)|0){O=_t(Rn)|0;do if(!O){if(mo|(ts(j,ur,Rn)|0|xn)||(ha(s,j)|0)!=4||(n[(vl(j,ur)|0)+4>>2]|0)==3||(n[(Sc(j,ur)|0)+4>>2]|0)==3)break;h[js>>2]=Rn,n[Wo>>2]=1;break e}while(0);if(ts(j,ur,Rn)|0){O=n[j+992+(n[Np>>2]<<2)>>2]|0,Jt=y(c+y(Gr(O,Rn))),h[js>>2]=Jt,O=Lp&(n[O+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|O)^1)&1;break}else{h[js>>2]=Rn,n[Wo>>2]=O?0:2;break}}else Jt=y(Qe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[js>>2]=y(c+(Jn?Xt:Jt));while(0);yr(j,Rr,ir,xr,kl,za),yr(j,ur,Rn,xr,Wo,js);do if(!(ts(j,ur,Rn)|0)&&(ha(s,j)|0)==4){if((n[(vl(j,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Sc(j,ur)|0)+4>>2]|0)!=3}else O=0;while(0);Jt=y(h[za>>2]),Xt=y(h[js>>2]),hf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(j,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?hf:li,Jn?li:hf,xr,Eo,Q&(O^1),3488,M)|0,o[xl>>0]=o[xl>>0]|o[j+508>>0],j=n[j+960>>2]|0}while((j|0)!=0)}}else l=y(0);if(l=y(Sr+l),li=l>0]=li|u[xl>>0],Rp&l>y(0)?(O=n[bl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(O<<3)|0,Co)),Gs>=y(0))?Qe=y(_n(y(0),y(Gs-y(ir-l)))):Qe=y(0)):Qe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,O=0;do j=n[Ge+(se<<2)>>2]|0,n[j+24>>2]|0||(O=((n[(vl(j,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Sc(j,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));O?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(_n(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Up+Xe),Lt){et=y(Qe/y(O|0)),se=n[wo>>2]|0,j=Nr,Qe=y(0);do{O=n[se+(j<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;Jt=y(Or(O,Rr,ir)),Jt=y(Jt+y(Cr(s,Rr))),Jt=y(Jt+y(K(O,Rr,xr))),h[O+400+(n[Ru>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Sc(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(O,Rr,xr))),Qe=Rn,l=y(l+y(Jt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(ns(O,Rr,xr)))),Qe=y(_n(Qe,y(ns(O,ur,xr))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Rr))),li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);j=j+1|0}while((j|0)!=(or|0))}else Qe=y(0);if(c=y(_p+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Qe),Rc,B))-Ys):Xe=Rn,et=y(y(Bi(s,ur,y(Ys+(Op?Rn:Qe)),Rc,B))-Ys),Lt&Q){j=Nr;do{se=n[(n[wo>>2]|0)+(j<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Or(se,ur,Rn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(K(se,ur,xr))),O=n[Fu>>2]|0,h[se+400+(O<<2)>>2]=Jt,!(_t(Jt)|0))break}else O=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(Jt+y(K(se,ur,xr)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Sc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Rn)|0){l=Me;break}hf=n[se+908+(n[bl>>2]<<2)>>2]|0,n[js>>2]=hf,l=y(h[se+396>>2]),li=_t(l)|0,Qe=(n[v>>2]=hf,y(h[v>>2])),li?l=et:(Sr=y(ln(se,ur,xr)),Jt=y(Qe/l),l=y(l*Qe),l=y(Sr+(Jn?Jt:l))),h[za>>2]=l,h[js>>2]=y(y(ln(se,Rr,xr))+Qe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Rr,ir,xr,Wo,js),yr(se,ur,Rn,xr,kl,za),l=y(h[js>>2]),Sr=y(h[za>>2]),Jt=Jn?l:Sr,l=Jn?Sr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,xr,Eo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,xr)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Sc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Sc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);j=j+1|0}while((j|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(_t(Rn)|0)){l=y(Rn-vs);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Rn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Rn>vs){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Rn>vs&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,Ge=0,j=0;;){e:do if(j>>>0>>0)for(Qe=y(0),et=y(0),l=y(0),se=j;;){O=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(Ge|0))break e;if(Lm(O,ur)|0&&(Jt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(O,ur,xr)))))),(ha(s,O)|0)!=5)break;Gs=y(Ya(O)),Gs=y(Gs+y(K(O,0,xr))),Jt=y(h[O+912>>2]),Jt=y(y(Jt+y(ln(O,0,xr)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Qe,Jt)),Qe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=j;while(0);if(lt=y(Ue+l),c=Me,Me=y(Me+lt),j>>>0>>0){Xe=y(c+et),O=j;do{j=n[(n[wo>>2]|0)+(O<<2)>>2]|0;e:do if((n[j+36>>2]|0)!=1&&(n[j+24>>2]|0)==0)switch(ha(s,j)|0){case 1:{Jt=y(c+y(K(j,ur,xr))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Me-y(re(j,ur,xr)))-y(h[j+908+(n[Mr>>2]<<2)>>2])),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(lt-y(h[j+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(K(j,ur,xr))),h[j+400+(n[Lt>>2]<<2)>>2]=Jt,ts(j,ur,Rn)|0||(Jn?(Qe=y(h[j+908>>2]),l=y(Qe+y(ln(j,Rr,xr))),et=lt):(et=y(h[j+912>>2]),et=y(et+y(ln(j,ur,xr))),l=lt,Qe=y(h[j+908>>2])),Ii(l,Qe)|0&&Ii(et,y(h[j+912>>2]))|0))break e;fa(j,l,et,Ds,1,1,xr,Eo,1,3501,M)|0;break e}case 5:{h[j+404>>2]=y(y(Xe-y(Ya(j)))+y(Or(j,0,Rn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;j=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,lf,k,B)),(Ql|0)!=0&&(cf=n[s+32>>2]|0,uf=(Ql|0)==2,!(uf&(cf|0)!=2))?uf&(cf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Rr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Rr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(ff=n[s+32>>2]|0,pf=(Fl|0)==2,!(pf&(ff|0)!=2))?pf&(ff|0)==2&&(l=y(Ys+Rn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Rc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Rc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[Af>>2]|0)==2){j=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do Ge=gs(s,O)|0,n[Ge+24>>2]|0||(hf=n[j>>2]|0,Jt=y(h[s+908+(hf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(hf<<2)>>2]))),O=O+1|0;while((O|0)!=(Ws|0))}if(f|0){O=Jn?Ql:d;do Om(s,f,xr,O,Eo,Ds,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,j=(ur|2|0)==3,O|j){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&wp(s,se,Rr),j&&wp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Rl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(Ep(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&Qm(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ce)}return y(l)}function Ep(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=ww(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,M=0,O=Ze,j=0,se=Ze,Ge=Ze,Me=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),j=s+416|0,Ge=y(h[j>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Qe+c),O=y(Me+f),f=y(se+Ge),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Qe,l,0,Q)),h[m>>2]=y(Go(Me,l,0,Q)),c=y(bR(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(bR(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Qe=y(Go(f,l,Q&m,Q&(m^1))),h[j>>2]=y(Qe-y(Go(se,l,0,Q))),Qe=y(Go(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Qe-y(Go(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function Cw(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=i7(n[489]|0,f,d)|0;break}default:s=zUe(f,d)|0}return s|0}function Eg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Cg(s,0,l,c,m),C=d}function Cg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,D7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Rt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Rm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(wg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function wg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function pe(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Ig(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze,j=Ze,se=Ze,Ge=0,Me=0,Qe=0;Qe=C,C=C+16|0,Ge=Qe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(ln(s,2,l)),O=y(ln(s,0,l)),_t(l)|0?j=l:j=y(_n(y(0),y(y(l-M)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(S7[n[Me>>2]&1](Ge,s,j,f,se,d),j=y(k+y(h[Ge>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?j:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Qe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),M=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function ww(s,l){return s=s|0,l=l|0,UA(s)|0?s=fr(2,l)|0:s=0,s|0}function Cp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function Iw(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Cp(s,l,c)),y(f+y(Iw(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(qs(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function qs(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(Xm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Nm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,j=Ze,se=0,Ge=0,Me=Ze,Qe=Ze,et=0,Xe=Ze,lt=0,Ue=Ze,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0;xn=C,C=C+16|0,Mr=xn+12|0,or=xn+8|0,Xt=xn+4|0,Sr=xn,ir=fr(n[s+4>>2]|0,Q)|0,je=pe(ir)|0,j=y(Gr(Bw(l)|0,je?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(j)|0)&&!(_t(je?c:d)|0)){if(O=l+504|0,!(_t(y(h[O>>2]))|0)&&(!(vw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(j,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(lt=je^1,!(lt|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(je|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ce),h[or>>2]=y(ce),n[Xt>>2]=0,n[Sr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Me=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,Ge=1):(Ge=0,Me=y(ce)),Nr?(j=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=j,n[Sr>>2]=1,O=1):(O=0,j=y(ce)),se=n[s+32>>2]|0,je&(se|0)==2?se=2:_t(Me)|0&&!(_t(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,Ge=2,Me=c),!((se|0)==2<)&&_t(j)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Sr>>2]=2,O=2,j=d),Qe=y(h[l+396>>2]),et=_t(Qe)|0;do if(et)se=Ge;else{if((Ge|0)==1<){h[or>>2]=y(y(Me-Xe)/Qe),n[Sr>>2]=1,O=1,se=1;break}je&(O|0)==1?(h[Mr>>2]=y(Qe*y(j-Ue)),n[Xt>>2]=1,O=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(je|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Qe),n[Sr>>2]=1,O=1),!(Nr|lt|((k|0)!=1|(_t(d)|0))|(Ge|(O|0)==1))&&(h[or>>2]=d,n[Sr>>2]=1,!et)&&(h[Mr>>2]=y(Qe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Sr,or),c=y(h[Mr>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Sr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=xn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&UA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Sc(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(UA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Lm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(w7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return UA(l)|0?(l=1,m=3):pe(l)|0?(l=0,m=3):(f=y(ce),d=y(ce)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Me=ww(et,m)|0,Qe=pe(et)|0,j=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(j+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(ce),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),lt=y(Cr(s,0)),lt=y(Q-y(lt+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(lt-y(Q+y(vu(l,0,d)))),d,c))):Q=y(ce),M=_t(k)|0,O=_t(Q)|0;do if(M^O&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(M){k=y(j+y(y(Q-se)*Ge));break}else{lt=y(se+y(y(k-j)/Ge)),Q=O?lt:Q;break}while(0);O=_t(k)|0,M=_t(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,fa(l,k,Q,m,Qe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,et))),lt=y(lt-y(re(l,et,c))),lt=y(lt-y(vu(l,et,Qe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt)}while(0);sr(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,Me))),lt=y(lt-y(re(l,Me,c))),lt=y(lt-y(vu(l,Me,Qe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt):Xe=30;do if((Xe|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt)}while(0)}function wp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function UA(s){return s=s|0,(s|1|0)==1|0}function Bw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function vw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Ip(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Bg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _A(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HA(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function vg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function Dw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Um(){dc()}function ga(){var s=0;return s=Kt(4)|0,qA(s),s|0}function qA(s){s=s|0,n[s>>2]=ys()|0}function Pc(s){s=s|0,s|0&&(Dg(s),gt(s))}function Dg(s){s=s|0,tt(n[s>>2]|0)}function _m(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,vw(n[s>>2]|0,l)|0}function Sw(){var s=0;return s=Kt(8)|0,Kv(s,0),s|0}function Kv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,bi(l,s)}function AF(s){s=s|0;var l=0;return l=Kt(8)|0,Kv(l,s),l|0}function Vv(s){s=s|0,s|0&&(Su(s),gt(s))}function Su(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,GA(s)}function GA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,qo(s)|0}function Hm(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function fF(s,l){s=s|0,l=l|0,$r(n[s>>2]|0,n[l>>2]|0)}function pF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function bw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Pu(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function hF(s,l){s=s|0,l=l|0,FA(n[s>>2]|0,l)}function gF(s,l){s=s|0,l=l|0,kA(n[s>>2]|0,l)}function Bp(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function YA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function mF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,ag(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,RA(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function EF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function CF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function Qw(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function WA(s){s=s|0,pp(n[s>>2]|0)}function qm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function bu(s,l){s=s|0,l=+l,ug(n[s>>2]|0,y(l))}function Fw(s){s=s|0,Ag(n[s>>2]|0)}function Rw(s,l){s=s|0,l=+l,hp(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,bm(n[s>>2]|0,y(l))}function KA(s,l){s=s|0,l=+l,pg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,Ew(n[s>>2]|0,y(l))}function Gm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function BF(s,l,c){s=s|0,l=l|0,c=+c,xi(n[s>>2]|0,l,y(c))}function S(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,og(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),q(s,d),C=f}function q(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Ae(s){return s=s|0,sg(n[s>>2]|0)|0}function De(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,QA(n[s>>2]|0)|0}function xt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ig(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),q(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,lg(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),q(s,f),C=c}function Yo(s){return s=s|0,+ +y(ji(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ve(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),q(s,f),C=c}function ft(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,fg(f,n[l>>2]|0),q(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),q(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),q(s,f),C=c}function Pn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,gg(f,n[l>>2]|0),q(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,km(f,n[l>>2]|0),q(s,f),C=c}function bn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(cg(n[s>>2]|0,l))}function tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),q(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function vF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function eve(s){return s=s|0,wi(n[s>>2]|0)|0}function tve(s){return s=s|0,s=ht(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function rve(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function nve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,zG(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function zG(s,l){s=s|0,l=l|0,gve(s,l)}function ive(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,sve(k,qo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function sve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[Q>>3]=d,n[k>>2]=m,ove(s,n[l+4>>2]|0,O,M,Q,k),C=B}function ove(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Ka(k),l=da(l)|0,ave(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Va(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Sl(lve()|0)|0,c=+JA(c),f=DF(f)|0,d=+JA(d),cve(s,hi(0,B|0,l|0,+c,f|0,+d,DF(m)|0)|0)}function lve(){var s=0;return o[7608]|0||(pve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Sl(s){return s=s|0,n[s+8>>2]|0}function JA(s){return s=+s,+ +SF(s)}function DF(s){return s=s|0,ZG(s)|0}function cve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(uve(c,0),ii(f|0,c|0)|0,Ave(s,c),fve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function uve(s,l){s=s|0,l=l|0,XG(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function Ave(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function fve(s){s=s|0,o[s+24>>0]=0}function XG(s,l){s=s|0,l=l|0,n[s>>2]=l}function ZG(s){return s=s|0,s|0}function SF(s){return s=+s,+s}function pve(s){s=s|0,Pl(s,hve()|0,4)}function hve(){return 1064}function Pl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=up(l|0,c+1|0)|0}function gve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function dve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function mve(s){s=s|0,Tt(n[s>>2]|0)}function yve(s){return s=s|0,er(n[s>>2]|0)|0}function Eve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Cve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function wve(s){return s=s|0,+ +y(dg(n[s>>2]|0))}function Ive(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function Bve(s){return s=s|0,+ +y(NA(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(gp(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(qa(n[s>>2]|0))}function Sve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(dg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(NA(n[l>>2]|0)),E[s+32>>3]=+y(gp(n[l>>2]|0)),E[s+40>>3]=+y(qa(n[l>>2]|0))}function Pve(s,l){return s=s|0,l=l|0,+ +y(mg(n[s>>2]|0,l))}function bve(s,l){return s=s|0,l=l|0,+ +y(dp(n[s>>2]|0,l))}function xve(s,l){return s=s|0,l=l|0,+ +y(jo(n[s>>2]|0,l))}function kve(){return Sn()|0}function Qve(){Fve(),Rve(),Tve(),Nve(),Lve(),Ove()}function Fve(){LNe(11713,4938,1)}function Rve(){tNe(10448)}function Tve(){LTe(10408)}function Nve(){sTe(10324)}function Lve(){pFe(10096)}function Ove(){Mve(9132)}function Mve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=0,_p=0,Tu=0,Nu=0,kc=0,js=0,za=0,Wo=0,kl=0,nf=0,sf=0,Lu=0,of=0,af=0,Gs=0,vs=0,Ql=0,Rn=0,lf=0,Eo=0,Qc=0,Co=0,Fc=0,cf=0,uf=0,Rc=0,Ys=0,Fl=0,Af=0,ff=0,pf=0,xr=0,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0;l=C,C=C+672|0,c=l+656|0,Rl=l+648|0,ur=l+640|0,Rr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,xr=l+592|0,pf=l+584|0,ff=l+576|0,Af=l+568|0,Fl=l+560|0,Ys=l+552|0,Rc=l+544|0,uf=l+536|0,cf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,lf=l+488|0,Rn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,af=l+448|0,of=l+440|0,Lu=l+432|0,sf=l+424|0,nf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,js=l+384|0,kc=l+376|0,Nu=l+368|0,Tu=l+360|0,_p=l+352|0,Up=l+344|0,xc=l+336|0,Mp=l+328|0,xl=l+320|0,Xr=l+312|0,Op=l+304|0,Lp=l+296|0,Np=l+288|0,Ru=l+280|0,Fu=l+272|0,Tp=l+264|0,bl=l+256|0,Rp=l+248|0,Fp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,xn=l+200|0,ir=l+192|0,Nr=l+184|0,Sr=l+176|0,Xt=l+168|0,or=l+160|0,Mr=l+152|0,Lt=l+144|0,je=l+136|0,Ue=l+128|0,lt=l+120|0,Xe=l+112|0,et=l+104|0,Qe=l+96|0,Me=l+88|0,Ge=l+80|0,se=l+72|0,j=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Uve(s,3646),_ve(s,3651,2)|0,Hve(s,3665,2)|0,qve(s,3682,18)|0,n[Rl>>2]=19,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],jve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],xu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Sg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Sg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],xu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],xu(s,3769,c)|0,n[xr>>2]=5,n[xr+4>>2]=0,n[c>>2]=n[xr>>2],n[c+4>>2]=n[xr+4>>2],xu(s,3783,c)|0,n[pf>>2]=6,n[pf+4>>2]=0,n[c>>2]=n[pf>>2],n[c+4>>2]=n[pf+4>>2],xu(s,3796,c)|0,n[ff>>2]=7,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],xu(s,3813,c)|0,n[Af>>2]=8,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],xu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Sg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Sg(s,3853,c)|0,n[Rc>>2]=9,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],xu(s,3870,c)|0,n[uf>>2]=10,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],xu(s,3884,c)|0,n[cf>>2]=11,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],xu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[lf>>2]=5,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],Is(s,3960,c)|0,n[Rn>>2]=6,n[Rn+4>>2]=0,n[c>>2]=n[Rn>>2],n[c+4>>2]=n[Rn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[af>>2]=9,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,4022,c)|0,n[of>>2]=21,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[sf>>2]=11,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Is(s,4065,c)|0,n[nf>>2]=12,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[js>>2]=16,n[js+4>>2]=0,n[c>>2]=n[js>>2],n[c+4>>2]=n[js+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Tu>>2]=5,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],Sg(s,4196,c)|0,n[_p>>2]=6,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Sg(s,4206,c)|0,n[Up>>2]=7,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Sg(s,4217,c)|0,n[xc>>2]=3,n[xc+4>>2]=0,n[c>>2]=n[xc>>2],n[c+4>>2]=n[xc+4>>2],zA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],PF(s,4251,c)|0,n[xl>>2]=4,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],zA(s,4279,c)|0,n[Op>>2]=6,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],zA(s,4293,c)|0,n[Lp>>2]=7,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],zA(s,4306,c)|0,n[Np>>2]=8,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],zA(s,4323,c)|0,n[Ru>>2]=9,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],zA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],PF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[bl>>2]=1,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],XA(s,4376,c)|0,n[Rp>>2]=2,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],XA(s,4388,c)|0,n[Fp>>2]=13,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[xn>>2]=18,n[xn+4>>2]=0,n[c>>2]=n[xn>>2],n[c+4>>2]=n[xn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],XA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Sr>>2]=10,n[Sr+4>>2]=0,n[c>>2]=n[Sr>>2],n[c+4>>2]=n[Sr+4>>2],zA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],zA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],PF(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],Gve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],Yve(s,4542,c)|0,n[je>>2]=12,n[je+4>>2]=0,n[c>>2]=n[je>>2],n[c+4>>2]=n[je+4>>2],Wve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Kve(s,4568,c)|0,n[lt>>2]=2,n[lt+4>>2]=0,n[c>>2]=n[lt>>2],n[c+4>>2]=n[lt+4>>2],Vve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],Jve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],Tw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],zve(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Xve(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],XA(s,4653,c)|0,n[j>>2]=5,n[j+4>>2]=0,n[c>>2]=n[j>>2],n[c+4>>2]=n[j+4>>2],XA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],XA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],XA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],XA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],XA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],Zve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Uve(s,l){s=s|0,l=l|0;var c=0;c=iFe()|0,n[s>>2]=c,sFe(c,l),xp(n[s>>2]|0)}function _ve(s,l,c){return s=s|0,l=l|0,c=c|0,GQe(s,pn(l)|0,c,0),s|0}function Hve(s,l,c){return s=s|0,l=l|0,c=c|0,bQe(s,pn(l)|0,c,0),s|0}function qve(s,l,c){return s=s|0,l=l|0,c=c|0,hQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Zke(s,l,d),C=f,s|0}function jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rke(s,l,d),C=f,s|0}function xu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mke(s,l,d),C=f,s|0}function Sg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,l,d),C=f,s|0}function PF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rbe(s,l,d),C=f,s|0}function XA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mbe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tbe(s,l,d),C=f,s|0}function Gve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UPe(s,l,d),C=f,s|0}function Yve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],BPe(s,l,d),C=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lPe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],KSe(s,l,d),C=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],kSe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XDe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],RDe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ve(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function eDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=bF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,rDe(m,f)|0,f),C=d}function bF(){var s=0,l=0;if(o[7616]|0||(t5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t5(9136)}return 9136}function tDe(s){return s=s|0,0}function rDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=bF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],e5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,j=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,Ge=B,n[j>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],nDe(s+24|0,se,j,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function nDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=iDe(l)|0,l=Kt(24)|0,$G(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function iDe(s){return s=s|0,n[s>>2]|0}function $G(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function e5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,aDe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],e5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lDe(s,k),cDe(k),C=M;return}}function oDe(s){return s=s|0,357913941}function aDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function t5(s){s=s|0,fDe(s)}function uDe(s){s=s|0,ADe(s+24|0)}function Tr(s){return s=s|0,n[s>>2]|0}function ADe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Kr(){return 9228}function pDe(){return 1140}function hDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=gDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=dDe(l,f)|0,C=c,l|0}function Vr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gDe(s){return s=s|0,(n[(bF()|0)+24>>2]|0)+(s*12|0)|0}function dDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=mDe(f)|0,C=d,f|0}function mDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(r5()|0)|0,f?(kF(l,f),QF(c,l),yDe(s,c),s=FF(l)|0):s=EDe(s)|0,C=d,s|0}function r5(){var s=0;return o[7632]|0||(xDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function xF(s){return s=s|0,n[s+36>>2]|0}function kF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function QF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function yDe(s,l){s=s|0,l=l|0,BDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function EDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],n5(k,B,c),n[d>>2]=k,C=Q,m|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function CDe(s){s=s|0,zm(s),gt(s)}function wDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function IDe(s){s=s|0,gt(s)}function BDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=vDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function vDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Ka(Q),s=da(s)|0,B=DDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Va(Q),C=k,B|0}function DDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Sl(SDe()|0)|0,l=+JA(l),c=+JA(c),f=+JA(f),d=+JA(d),m=+JA(m),Ms(0,k|0,s|0,+l,+c,+f,+d,+m,+ +JA(B))|0}function SDe(){var s=0;return o[7624]|0||(PDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function PDe(s){s=s|0,Pl(s,bDe()|0,6)}function bDe(){return 1112}function xDe(s){s=s|0,vp(s)}function kDe(s){s=s|0,i5(s+24|0),s5(s+16|0)}function i5(s){s=s|0,FDe(s)}function s5(s){s=s|0,QDe(s)}function QDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function FDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function vp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function RDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TDe(s,c,d,0),C=f}function TDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=RF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=NDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,LDe(m,f)|0,f),C=d}function RF(){var s=0,l=0;if(o[7640]|0||(a5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a5(9232)}return 9232}function NDe(s){return s=s|0,0}function LDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=RF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ODe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=MDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,UDe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_De(s,k),HDe(k),C=M;return}}function MDe(s){return s=s|0,357913941}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _De(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function HDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a5(s){s=s|0,GDe(s)}function qDe(s){s=s|0,jDe(s+24|0)}function jDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function GDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,YDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YDe(){return 1144}function WDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=KDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],VDe(l,B,c,f,d),C=m}function KDe(s){return s=s|0,(n[(RF()|0)+24>>2]|0)+(s*12|0)|0}function VDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),ZA(Q,d),Q=$A(Q,d)|0,I7[m&1](s,c,f,Q),C=M}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +zDe(l)}function ZA(s,l){s=s|0,l=l|0}function $A(s,l){return s=s|0,l=l|0,JDe(l)|0}function JDe(s){return s=s|0,s|0}function zDe(s){return s=+s,+s}function XDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZDe(s,c,d,1),C=f}function ZDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=$De(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,eSe(m,f)|0,f),C=d}function TF(){var s=0,l=0;if(o[7648]|0||(c5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(9268)}return 9268}function $De(s){return s=s|0,0}function eSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=TF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(tSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function tSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=rSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,nSe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,iSe(s,k),sSe(k),C=M;return}}function rSe(s){return s=s|0,357913941}function nSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function iSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function sSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,lSe(s)}function oSe(s){s=s|0,aSe(s+24|0)}function aSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function lSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,cSe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cSe(){return 1160}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(TF()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),u5(Lg[c&31](s)|0)|0}function u5(s){return s=s|0,s&1|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,0),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=gSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7656]|0||(f5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9304)}return 9304}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=NF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,ESe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=M;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,DSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DSe(){return 1164}function SSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=PSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(l,d,c),C=f}function PSe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function bSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Dp(d,c),c=Sp(d,c)|0,rf[f&31](s,c),Pp(d),C=m}function Dp(s,l){s=s|0,l=l|0,xSe(s,l)}function Sp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function xSe(s,l){s=s|0,l=l|0,LF(s,l)}function LF(s,l){s=s|0,l=l|0,n[s>>2]=l}function kSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QSe(s,c,d,0),C=f}function QSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=OF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=FSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,RSe(m,f)|0,f),C=d}function OF(){var s=0,l=0;if(o[7664]|0||(h5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h5(9340)}return 9340}function FSe(s){return s=s|0,0}function RSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=OF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(TSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function TSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=NSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,LSe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,OSe(s,k),MSe(k),C=M;return}}function NSe(s){return s=s|0,357913941}function LSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function OSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function MSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h5(s){s=s|0,HSe(s)}function USe(s){s=s|0,_Se(s+24|0)}function _Se(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function HSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,qSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qSe(){return 1180}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=GSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=YSe(l,d,c)|0,C=f,c|0}function GSe(s){return s=s|0,(n[(OF()|0)+24>>2]|0)+(s*12|0)|0}function YSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),bg(d,c),d=xg(d,c)|0,d=sD(RR[f&15](s,d)|0)|0,C=m,d|0}function bg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,WSe(l)|0}function sD(s){return s=s|0,s|0}function WSe(s){return s=s|0,s|0}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VSe(s,c,d,0),C=f}function VSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=JSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,zSe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7672]|0||(d5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d5(9376)}return 9376}function JSe(s){return s=s|0,0}function zSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=MF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(XSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function XSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ZSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,$Se(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ePe(s,k),tPe(k),C=M;return}}function ZSe(s){return s=s|0,357913941}function $Se(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ePe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function tPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d5(s){s=s|0,iPe(s)}function rPe(s){s=s|0,nPe(s+24|0)}function nPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function iPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,m5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m5(){return 1196}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=oPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=aPe(l,f)|0,C=c,l|0}function oPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function aPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Lg[c&31](s)|0)|0}function lPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cPe(s,c,d,1),C=f}function cPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,APe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7680]|0||(E5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9412)}return 9412}function uPe(s){return s=s|0,0}function APe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=UF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,hPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,gPe(s,k),dPe(k),C=M;return}}function pPe(s){return s=s|0,357913941}function hPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,EPe(s)}function mPe(s){s=s|0,yPe(s+24|0)}function yPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function EPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1200}function CPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=wPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=IPe(l,f)|0,C=c,l|0}function wPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function IPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Lg[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function BPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vPe(s,c,d,0),C=f}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=DPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,SPe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7688]|0||(I5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9448)}return 9448}function DPe(s){return s=s|0,0}function SPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=_F()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(PPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function PPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,xPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kPe(s,k),QPe(k),C=M;return}}function bPe(s){return s=s|0,357913941}function xPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function QPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,TPe(s)}function FPe(s){s=s|0,RPe(s+24|0)}function RPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function TPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,B5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1204}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=LPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OPe(l,d,c),C=f}function LPe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function OPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),HF(d,c),d=qF(d,c)|0,rf[f&31](s,d),C=m}function HF(s,l){s=s|0,l=l|0}function qF(s,l){return s=s|0,l=l|0,MPe(l)|0}function MPe(s){return s=s|0,s|0}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Pe(s,c,d,0),C=f}function _Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=HPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,qPe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7696]|0||(D5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9484)}return 9484}function HPe(s){return s=s|0,0}function qPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=jF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=GPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,YPe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,WPe(s,k),KPe(k),C=M;return}}function GPe(s){return s=s|0,357913941}function YPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function WPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function KPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,zPe(s)}function VPe(s){s=s|0,JPe(s+24|0)}function JPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,XPe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XPe(){return 1212}function ZPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=$Pe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ebe(l,m,c,f),C=d}function $Pe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function ebe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),HF(m,c),m=qF(m,c)|0,bg(B,f),B=xg(B,f)|0,Hw[d&15](s,m,B),C=k}function tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rbe(s,c,d,1),C=f}function rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=GF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ibe(m,f)|0,f),C=d}function GF(){var s=0,l=0;if(o[7704]|0||(P5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));P5(9520)}return 9520}function nbe(s){return s=s|0,0}function ibe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=GF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=obe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,abe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lbe(s,k),cbe(k),C=M;return}}function obe(s){return s=s|0,357913941}function abe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function P5(s){s=s|0,fbe(s)}function ube(s){s=s|0,Abe(s+24|0)}function Abe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pbe(){return 1224}function hbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=gbe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+dbe(l,m,c),C=d,+f}function gbe(s){return s=s|0,(n[(GF()|0)+24>>2]|0)+(s*12|0)|0}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,B=+SF(+v7[f&7](s,d)),C=m,+B}function mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ybe(s,c,d,1),C=f}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ebe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cbe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7712]|0||(x5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9556)}return 9556}function Ebe(s){return s=s|0,0}function Cbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=YF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ibe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Bbe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vbe(s,k),Dbe(k),C=M;return}}function Ibe(s){return s=s|0,357913941}function Bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,bbe(s)}function Sbe(s){s=s|0,Pbe(s+24|0)}function Pbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,xbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xbe(){return 1232}function kbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Qbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Fbe(l,d),C=f,+c}function Qbe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function Fbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +SF(+B7[c&15](s))}function Rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tbe(s,c,d,1),C=f}function Tbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lbe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7720]|0||(Q5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q5(9592)}return 9592}function Nbe(s){return s=s|0,0}function Lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=WF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Obe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mbe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Ube(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_be(s,k),Hbe(k),C=M;return}}function Mbe(s){return s=s|0,357913941}function Ube(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _be(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q5(s){s=s|0,Gbe(s)}function qbe(s){s=s|0,jbe(s+24|0)}function jbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Gbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,Ybe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Ybe(){return 1276}function Wbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Kbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Vbe(l,f)|0,C=c,l|0}function Kbe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=F5(f)|0,C=d,f|0}function F5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(R5()|0)|0,f?(kF(l,f),QF(c,l),Jbe(s,c),s=FF(l)|0):s=zbe(s)|0,C=d,s|0}function R5(){var s=0;return o[7736]|0||(oxe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Jbe(s,l){s=s|0,l=l|0,exe(l,s,s+8|0)|0}function zbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(s,m,d),n[f>>2]=s,C=c,l|0}function KF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function Xbe(s){s=s|0,zm(s),gt(s)}function Zbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function $be(s){s=s|0,gt(s)}function exe(s,l,c){return s=s|0,l=l|0,c=c|0,l=txe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function txe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Ka(d),s=da(s)|0,c=rxe(s,n[l>>2]|0,+E[c>>3])|0,Va(d),C=f,c|0}function rxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Sl(nxe()|0)|0,l=DF(l)|0,ml(0,f|0,s|0,l|0,+ +JA(c))|0}function nxe(){var s=0;return o[7728]|0||(ixe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function ixe(s){s=s|0,Pl(s,sxe()|0,2)}function sxe(){return 1264}function oxe(s){s=s|0,vp(s)}function axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,c,d,1),C=f}function lxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=cxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,uxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7744]|0||(N5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));N5(9684)}return 9684}function cxe(s){return s=s|0,0}function uxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=VF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Axe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=fxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,pxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,hxe(s,k),gxe(k),C=M;return}}function fxe(s){return s=s|0,357913941}function pxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function gxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function N5(s){s=s|0,yxe(s)}function dxe(s){s=s|0,mxe(s+24|0)}function mxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function yxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,Exe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Exe(){return 1280}function Cxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=wxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Ixe(l,d,c)|0,C=f,c|0}function wxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(m,c),m=$A(m,c)|0,Hw[f&15](d,s,m),m=F5(d)|0,C=B,m|0}function Bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,c,d,1),C=f}function vxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Dxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Sxe(m,f)|0,f),C=d}function JF(){var s=0,l=0;if(o[7752]|0||(O5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9720)}return 9720}function Dxe(s){return s=s|0,0}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=JF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],L5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function L5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,xxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],L5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kxe(s,k),Qxe(k),C=M;return}}function bxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Qxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Txe(s)}function Fxe(s){s=s|0,Rxe(s+24|0)}function Rxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1288}function Lxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Oxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Mxe(l,f)|0,C=c,l|0}function Oxe(s){return s=s|0,(n[(JF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ZG(Lg[c&31](s)|0)|0}function Uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_xe(s,c,d,0),C=f}function _xe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Hxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,qxe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7760]|0||(U5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U5(9756)}return 9756}function Hxe(s){return s=s|0,0}function qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=zF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Gxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Yxe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Wxe(s,k),Kxe(k),C=M;return}}function Gxe(s){return s=s|0,357913941}function Yxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Wxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U5(s){s=s|0,zxe(s)}function Vxe(s){s=s|0,Jxe(s+24|0)}function Jxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Xxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Xxe(){return 1292}function Zxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=$xe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eke(l,d,c),C=f}function $xe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function eke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),C7[f&31](s,c),C=m}function tke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rke(s,c,d,0),C=f}function rke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ike(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7768]|0||(H5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H5(9792)}return 9792}function nke(s){return s=s|0,0}function ike(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=XF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ske(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ske(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,ake(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lke(s,k),cke(k),C=M;return}}function oke(s){return s=s|0,357913941}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H5(s){s=s|0,fke(s)}function uke(s){s=s|0,Ake(s+24|0)}function Ake(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pke(){return 1300}function hke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dke(l,m,c,f),C=d}function gke(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function dke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,ku(B,f),f=+Qu(B,f),b7[d&15](s,m,f),C=k}function mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yke(s,c,d,0),C=f}function yke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Eke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cke(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7776]|0||(j5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9828)}return 9828}function Eke(s){return s=s|0,0}function Cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=ZF()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ike(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Bke(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vke(s,k),Dke(k),C=M;return}}function Ike(s){return s=s|0,357913941}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,bke(s)}function Ske(s){s=s|0,Pke(s+24|0)}function Pke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,xke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xke(){return 1312}function kke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Qke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Fke(l,d,c),C=f}function Qke(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function Fke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,rf[f&31](s,d),C=m}function Rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tke(s,c,d,0),C=f}function Tke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7784]|0||(Y5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y5(9864)}return 9864}function Nke(s){return s=s|0,0}function Lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=$F()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],G5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Oke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,Uke(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],G5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_ke(s,k),Hke(k),C=M;return}}function Mke(s){return s=s|0,357913941}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _ke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y5(s){s=s|0,Gke(s)}function qke(s){s=s|0,jke(s+24|0)}function jke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Gke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Yke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Yke(){return 1320}function Wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Kke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vke(l,d,c),C=f}function Kke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Jke(d,c),d=zke(d,c)|0,rf[f&31](s,d),C=m}function Jke(s,l){s=s|0,l=l|0}function zke(s,l){return s=s|0,l=l|0,Xke(l)|0}function Xke(s){return s=s|0,s|0}function Zke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(s,c,d,0),C=f}function $ke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=eQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tQe(m,f)|0,f),C=d}function eR(){var s=0,l=0;if(o[7792]|0||(K5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9900)}return 9900}function eQe(s){return s=s|0,0}function tQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=eR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rQe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nQe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,iQe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sQe(s,k),oQe(k),C=M;return}}function nQe(s){return s=s|0,357913941}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,cQe(s)}function aQe(s){s=s|0,lQe(s+24|0)}function lQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,22,l,uQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uQe(){return 1344}function AQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=fQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],pQe(l,f),C=c}function fQe(s){return s=s|0,(n[(eR()|0)+24>>2]|0)+(s*12|0)|0}function pQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&127](s)}function hQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tR()|0,s=gQe(c)|0,hn(m,l,d,s,dQe(c,f)|0,f)}function tR(){var s=0,l=0;if(o[7800]|0||(J5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J5(9936)}return 9936}function gQe(s){return s=s|0,s|0}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=tR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(V5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(mQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function mQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=yQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,EQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,V5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,CQe(s,d),wQe(d),C=k;return}}function yQe(s){return s=s|0,536870911}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function CQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J5(s){s=s|0,vQe(s)}function IQe(s){s=s|0,BQe(s+24|0)}function BQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function vQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,23,l,B5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DQe(s,l){s=s|0,l=l|0,PQe(n[(SQe(s)|0)>>2]|0,l)}function SQe(s){return s=s|0,(n[(tR()|0)+24>>2]|0)+(s<<3)|0}function PQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,HF(f,l),l=qF(f,l)|0,tf[s&127](l),C=c}function bQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rR()|0,s=xQe(c)|0,hn(m,l,d,s,kQe(c,f)|0,f)}function rR(){var s=0,l=0;if(o[7808]|0||(X5(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X5(9972)}return 9972}function xQe(s){return s=s|0,s|0}function kQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(QQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function QQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=FQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,RQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TQe(s,d),NQe(d),C=k;return}}function FQe(s){return s=s|0,536870911}function RQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function NQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X5(s){s=s|0,MQe(s)}function LQe(s){s=s|0,OQe(s+24|0)}function OQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,9,l,UQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function UQe(){return 1348}function _Qe(s,l){return s=s|0,l=l|0,qQe(n[(HQe(s)|0)>>2]|0,l)|0}function HQe(s){return s=s|0,(n[(rR()|0)+24>>2]|0)+(s<<3)|0}function qQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Z5(f,l),l=$5(f,l)|0,l=sD(Lg[s&31](l)|0)|0,C=c,l|0}function Z5(s,l){s=s|0,l=l|0}function $5(s,l){return s=s|0,l=l|0,jQe(l)|0}function jQe(s){return s=s|0,s|0}function GQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nR()|0,s=YQe(c)|0,hn(m,l,d,s,WQe(c,f)|0,f)}function nR(){var s=0,l=0;if(o[7816]|0||(t9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t9(10008)}return 10008}function YQe(s){return s=s|0,s|0}function WQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(KQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function KQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=VQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,zQe(s,d),XQe(d),C=k;return}}function VQe(s){return s=s|0,536870911}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function zQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function XQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t9(s){s=s|0,eFe(s)}function ZQe(s){s=s|0,$Qe(s+24|0)}function $Qe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function eFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,15,l,m5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function tFe(s){return s=s|0,nFe(n[(rFe(s)|0)>>2]|0)|0}function rFe(s){return s=s|0,(n[(nR()|0)+24>>2]|0)+(s<<3)|0}function nFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function iFe(){var s=0;return o[7832]|0||(fFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function sFe(s,l){s=s|0,l=l|0,n[s>>2]=oFe()|0,n[s+4>>2]=aFe()|0,n[s+12>>2]=l,n[s+8>>2]=lFe()|0,n[s+32>>2]=2}function oFe(){return 11709}function aFe(){return 1188}function lFe(){return aD()|0}function cFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(uFe(c),gt(c)):l|0&&(Su(l),gt(l))}function bp(s,l){return s=s|0,l=l|0,l&s|0}function uFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=AFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function AFe(){return 0}function fFe(s){s=s|0,vp(s)}function pFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,hFe(s,4827),gFe(s,4834,3)|0,dFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],mFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],yFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],EFe(s,4891,c)|0,C=l}function hFe(s,l){s=s|0,l=l|0;var c=0;c=XRe()|0,n[s>>2]=c,ZRe(c,l),xp(n[s>>2]|0)}function gFe(s,l,c){return s=s|0,l=l|0,c=c|0,NRe(s,pn(l)|0,c,0),s|0}function dFe(s,l,c){return s=s|0,l=l|0,c=c|0,CRe(s,pn(l)|0,c,0),s|0}function mFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tRe(s,l,d),C=f,s|0}function yFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LFe(s,l,d),C=f,s|0}function EFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CFe(s,l,d),C=f,s|0}function CFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wFe(s,c,d,1),C=f}function wFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=iR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=IFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,BFe(m,f)|0,f),C=d}function iR(){var s=0,l=0;if(o[7840]|0||(n9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n9(10100)}return 10100}function IFe(s){return s=s|0,0}function BFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=iR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(vFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function r9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=DFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,SFe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,PFe(s,k),bFe(k),C=M;return}}function DFe(s){return s=s|0,357913941}function SFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function PFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n9(s){s=s|0,QFe(s)}function xFe(s){s=s|0,kFe(s+24|0)}function kFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function QFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,FFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FFe(){return 1364}function RFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=TFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NFe(l,d,c)|0,C=f,c|0}function TFe(s){return s=s|0,(n[(iR()|0)+24>>2]|0)+(s*12|0)|0}function NFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,d=u5(RR[f&15](s,d)|0)|0,C=m,d|0}function LFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OFe(s,c,d,0),C=f}function OFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=MFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,UFe(m,f)|0,f),C=d}function sR(){var s=0,l=0;if(o[7848]|0||(s9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s9(10136)}return 10136}function MFe(s){return s=s|0,0}function UFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=sR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_Fe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=HFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,qFe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jFe(s,k),GFe(k),C=M;return}}function HFe(s){return s=s|0,357913941}function qFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s9(s){s=s|0,KFe(s)}function YFe(s){s=s|0,WFe(s+24|0)}function WFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function KFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,9,l,VFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VFe(){return 1372}function JFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=zFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XFe(l,d,c),C=f}function zFe(s){return s=s|0,(n[(sR()|0)+24>>2]|0)+(s*12|0)|0}function XFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZFe(d,c),B=y($Fe(d,c)),E7[f&1](s,B),C=m}function ZFe(s,l){s=s|0,l=+l}function $Fe(s,l){return s=s|0,l=+l,y(eRe(l))}function eRe(s){return s=+s,y(s)}function tRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rRe(s,c,d,0),C=f}function rRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,iRe(m,f)|0,f),C=d}function oR(){var s=0,l=0;if(o[7856]|0||(a9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(10172)}return 10172}function nRe(s){return s=s|0,0}function iRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=oR()|0,M=j+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oRe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,j=se<<1,aRe(k,se>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lRe(s,k),cRe(k),C=M;return}}function oRe(s){return s=s|0,357913941}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,fRe(s)}function uRe(s){s=s|0,ARe(s+24|0)}function ARe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pRe(){return 1380}function hRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dRe(l,m,c,f),C=d}function gRe(s){return s=s|0,(n[(oR()|0)+24>>2]|0)+(s*12|0)|0}function dRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,mRe(B,f),B=yRe(B,f)|0,Hw[d&15](s,m,B),C=k}function mRe(s,l){s=s|0,l=l|0}function yRe(s,l){return s=s|0,l=l|0,ERe(l)|0}function ERe(s){return s=s|0,(s|0)!=0|0}function CRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=aR()|0,s=wRe(c)|0,hn(m,l,d,s,IRe(c,f)|0,f)}function aR(){var s=0,l=0;if(o[7864]|0||(c9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(10208)}return 10208}function wRe(s){return s=s|0,s|0}function IRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=aR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(l9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(BRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function BRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=vRe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,DRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,l9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,SRe(s,d),PRe(d),C=k;return}}function vRe(s){return s=s|0,536870911}function DRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function SRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,kRe(s)}function bRe(s){s=s|0,xRe(s+24|0)}function xRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function kRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,24,l,QRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function QRe(){return 1392}function FRe(s,l){s=s|0,l=l|0,TRe(n[(RRe(s)|0)>>2]|0,l)}function RRe(s){return s=s|0,(n[(aR()|0)+24>>2]|0)+(s<<3)|0}function TRe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Z5(f,l),l=$5(f,l)|0,tf[s&127](l),C=c}function NRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lR()|0,s=LRe(c)|0,hn(m,l,d,s,ORe(c,f)|0,f)}function lR(){var s=0,l=0;if(o[7872]|0||(A9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A9(10244)}return 10244}function LRe(s){return s=s|0,s|0}function ORe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(MRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function u9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function MRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=URe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,_Re(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,HRe(s,d),qRe(d),C=k;return}}function URe(s){return s=s|0,536870911}function _Re(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function HRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A9(s){s=s|0,YRe(s)}function jRe(s){s=s|0,GRe(s+24|0)}function GRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,16,l,WRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WRe(){return 1400}function KRe(s){return s=s|0,JRe(n[(VRe(s)|0)>>2]|0)|0}function VRe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s<<3)|0}function JRe(s){return s=s|0,zRe(CD[s&7]()|0)|0}function zRe(s){return s=s|0,s|0}function XRe(){var s=0;return o[7880]|0||(iTe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function ZRe(s,l){s=s|0,l=l|0,n[s>>2]=$Re()|0,n[s+4>>2]=eTe()|0,n[s+12>>2]=l,n[s+8>>2]=tTe()|0,n[s+32>>2]=4}function $Re(){return 11711}function eTe(){return 1356}function tTe(){return aD()|0}function rTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(nTe(c),gt(c)):l|0&&(Dg(l),gt(l))}function nTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function iTe(s){s=s|0,vp(s)}function sTe(s){s=s|0,oTe(s,4920),aTe(s)|0,lTe(s)|0}function oTe(s,l){s=s|0,l=l|0;var c=0;c=R5()|0,n[s>>2]=c,xTe(c,l),xp(n[s>>2]|0)}function aTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,ETe()|0),s|0}function lTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,cTe()|0),s|0}function cTe(){var s=0;return o[7888]|0||(f9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Tr(10328)|0||f9(10328),10328}function kg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function f9(s){s=s|0,fTe(s),Qg(s,10)}function uTe(s){s=s|0,ATe(s+24|0)}function ATe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function fTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,dTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pTe(s,l,c){s=s|0,l=l|0,c=+c,hTe(s,l,c)}function Qg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function hTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),gTe(s,m,d),C=f}function gTe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function dTe(){return 1404}function mTe(s,l){return s=s|0,l=+l,yTe(s,l)|0}function yTe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,C=f,c|0}function ETe(){var s=0;return o[7896]|0||(p9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||p9(10364),10364}function p9(s){s=s|0,ITe(s),Qg(s,55)}function CTe(s){s=s|0,wTe(s+24|0)}function wTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ITe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BTe(s){s=s|0,vTe(s)}function vTe(s){s=s|0,DTe(s)}function DTe(s){s=s|0,h9(s+8|0),o[s+24>>0]=1}function h9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function STe(){return 1424}function PTe(){return bTe()|0}function bTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,h9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(f,m,d),n[c>>2]=f,C=l,s|0}function xTe(s,l){s=s|0,l=l|0,n[s>>2]=kTe()|0,n[s+4>>2]=QTe()|0,n[s+12>>2]=l,n[s+8>>2]=FTe()|0,n[s+32>>2]=5}function kTe(){return 11710}function QTe(){return 1416}function FTe(){return lD()|0}function RTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TTe(c),gt(c)):l|0&>(l)}function TTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=NTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function NTe(){return n[357]|0}function LTe(s){s=s|0,OTe(s,4926),MTe(s)|0}function OTe(s,l){s=s|0,l=l|0;var c=0;c=r5()|0,n[s>>2]=c,JTe(c,l),xp(n[s>>2]|0)}function MTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,UTe()|0),s|0}function UTe(){var s=0;return o[7912]|0||(g9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Tr(10412)|0||g9(10412),10412}function g9(s){s=s|0,qTe(s),Qg(s,57)}function _Te(s){s=s|0,HTe(s+24|0)}function HTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,5,l,WTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jTe(s){s=s|0,GTe(s)}function GTe(s){s=s|0,YTe(s)}function YTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function WTe(){return 1432}function KTe(){return VTe()|0}function VTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Kt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],n5(k,m,s),n[c>>2]=k,C=B,f|0}function JTe(s,l){s=s|0,l=l|0,n[s>>2]=zTe()|0,n[s+4>>2]=XTe()|0,n[s+12>>2]=l,n[s+8>>2]=ZTe()|0,n[s+32>>2]=6}function zTe(){return 11704}function XTe(){return 1436}function ZTe(){return lD()|0}function $Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(eNe(c),gt(c)):l|0&>(l)}function eNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function tNe(s){s=s|0,rNe(s,4933),nNe(s)|0,iNe(s)|0}function rNe(s,l){s=s|0,l=l|0;var c=0;c=bNe()|0,n[s>>2]=c,xNe(c,l),xp(n[s>>2]|0)}function nNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,yNe()|0),s|0}function iNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,sNe()|0),s|0}function sNe(){var s=0;return o[7920]|0||(d9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Tr(10452)|0||d9(10452),10452}function d9(s){s=s|0,lNe(s),Qg(s,1)}function oNe(s){s=s|0,aNe(s+24|0)}function aNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function lNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,fNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cNe(s,l,c){s=s|0,l=+l,c=+c,uNe(s,l,c)}function uNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),ANe(s,m,d),C=f}function ANe(s,l,c){s=s|0,l=l|0,c=c|0,m9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function m9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function fNe(){return 1472}function pNe(s,l){return s=+s,l=+l,hNe(s,l)|0}function hNe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Kt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),m9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],y9(m,k,B),n[d>>2]=m,C=f,c|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function gNe(s){s=s|0,zm(s),gt(s)}function dNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function mNe(s){s=s|0,gt(s)}function yNe(){var s=0;return o[7928]|0||(E9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Tr(10488)|0||E9(10488),10488}function E9(s){s=s|0,wNe(s),Qg(s,60)}function ENe(s){s=s|0,CNe(s+24|0)}function CNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function wNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,6,l,DNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function INe(s){s=s|0,BNe(s)}function BNe(s){s=s|0,vNe(s)}function vNe(s){s=s|0,C9(s+8|0),o[s+24>>0]=1}function C9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function DNe(){return 1492}function SNe(){return PNe()|0}function PNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,C9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],y9(f,m,d),n[c>>2]=f,C=l,s|0}function bNe(){var s=0;return o[7936]|0||(NNe(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function xNe(s,l){s=s|0,l=l|0,n[s>>2]=kNe()|0,n[s+4>>2]=QNe()|0,n[s+12>>2]=l,n[s+8>>2]=FNe()|0,n[s+32>>2]=7}function kNe(){return 11700}function QNe(){return 1484}function FNe(){return lD()|0}function RNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TNe(c),gt(c)):l|0&>(l)}function TNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function NNe(s){s=s|0,vp(s)}function LNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=ONe(c)|0,c=MNe(c,0)|0,hLe(s,l,c,cR()|0,0)}function ONe(s){return s=s|0,s|0}function MNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(I9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function cR(){var s=0,l=0;if(o[7944]|0||(w9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w9(10568)}return 10568}function w9(s){s=s|0,HNe(s)}function UNe(s){s=s|0,_Ne(s+24|0)}function _Ne(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,17,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qNe(s){return s=s|0,GNe(n[(jNe(s)|0)>>2]|0)|0}function jNe(s){return s=s|0,(n[(cR()|0)+24>>2]|0)+(s<<3)|0}function GNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function I9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,KNe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,I9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,VNe(s,d),JNe(d),C=k;return}}function WNe(s){return s=s|0,536870911}function KNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function VNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JNe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function zNe(){XNe()}function XNe(){ZNe(10604)}function ZNe(s){s=s|0,$Ne(s,4955)}function $Ne(s,l){s=s|0,l=l|0;var c=0;c=eLe()|0,n[s>>2]=c,tLe(c,l),xp(n[s>>2]|0)}function eLe(){var s=0;return o[7952]|0||(uLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function tLe(s,l){s=s|0,l=l|0,n[s>>2]=sLe()|0,n[s+4>>2]=oLe()|0,n[s+12>>2]=l,n[s+8>>2]=aLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Ym()|0,n[c>>2]=s,rLe(10608,c),C=l}function Ym(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function rLe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function nLe(s){s=s|0,iLe(s)}function iLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function sLe(){return 11715}function oLe(){return 1496}function aLe(){return aD()|0}function lLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(cLe(c),gt(c)):l|0&>(l)}function cLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function uLe(s){s=s|0,vp(s)}function ALe(s,l){s=s|0,l=l|0;var c=0,f=0;Ym()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(n7(uR(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;fLe(f,l)}while(0)}function uR(s){return s=s|0,n[s+12>>2]|0}function fLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Kt(4)|0,zG(c,l),n[s>>2]=c}function AR(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function B9(){var s=0;return o[11717]|0?s=n[2665]|0:(pLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function pLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function v9(){return 1572}function hLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,AR()|0,gLe(10656,O,M,Q,k,B),C=m}function gLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,$G(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function D9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0;if(lt=C,C=C+32|0,Me=lt+20|0,Qe=lt+8|0,et=lt+4|0,Xe=lt,l=n[l>>2]|0,l|0){Ge=Me+4|0,Q=Me+8|0,M=Qe+4|0,O=Qe+8|0,j=Qe+8|0,se=Me+8|0;do{if(B=l+4|0,k=fR(B)|0,k|0){if(d=Nw(k)|0,n[Me>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Lw(k)|0)+1|0,dLe(Me,f),f|0)for(;f=f+-1|0,bc(Qe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):pR(Me,Qe),f;)d=d+4|0;f=Ow(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?mLe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[j>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Tr(k)|0,yLe(c,s,et,Xe,Me,Qe),hR(Qe),ef(Me)}l=n[l>>2]|0}while((l|0)!=0)}C=lt}function fR(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+12>>2]|0}function Lw(s){return s=s|0,n[s+16>>2]|0}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(R9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),T9(s,c),N9(c)),C=d}function pR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=F9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,R9(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,T9(s,c),N9(c),C=B;return}}function Ow(s){return s=s|0,n[s+8>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=Q9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,OLe(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,MLe(s,c),ULe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function yLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,ELe(s,l,c,f,d,m)}function hR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ef(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ELe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,j=B+24|0,Q=B+12|0,M=B,Ka(k),s=da(s)|0,n[j>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,gR(Q,d),CLe(M,m),n[O>>2]=n[j>>2],wLe(s,O,c,f,Q,M),hR(M),ef(Q),Va(k),C=B}function gR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NLe(s,f),LLe(s,n[l>>2]|0,n[c>>2]|0,f))}function CLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(RLe(s,f),TLe(s,n[l>>2]|0,n[c>>2]|0,f))}function wLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+32|0,O=B+28|0,j=B+24|0,k=B+12|0,Q=B,M=Sl(ILe()|0)|0,n[j>>2]=n[l>>2],n[O>>2]=n[j>>2],l=Fg(O)|0,c=S9(c)|0,f=dR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],j=d+8|0,n[k+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[d>>2]=0,d=mR(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],j=m+8|0,n[Q+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[m>>2]=0,ao(0,M|0,s|0,l|0,c|0,f|0,d|0,BLe(Q)|0)|0,hR(Q),ef(k),C=B}function ILe(){var s=0;return o[7968]|0||(QLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Fg(s){return s=s|0,b9(s)|0}function S9(s){return s=s|0,P9(s)|0}function dR(s){return s=s|0,oD(s)|0}function mR(s){return s=s|0,DLe(s)|0}function BLe(s){return s=s|0,vLe(s)|0}function vLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=P9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function P9(s){return s=s|0,s|0}function DLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(x9()|0)|0,f?(kF(l,f),QF(c,l),aUe(s,c),s=FF(l)|0):s=SLe(s)|0,C=d,s|0}function x9(){var s=0;return o[7960]|0||(kLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function SLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k9(s,m,d),n[f>>2]=s,C=c,l|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function PLe(s){s=s|0,zm(s),gt(s)}function bLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function xLe(s){s=s|0,gt(s)}function kLe(s){s=s|0,vp(s)}function QLe(s){s=s|0,Pl(s,FLe()|0,5)}function FLe(){return 1676}function RLe(s,l){s=s|0,l=l|0;var c=0;if((Q9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function TLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function Q9(s){return s=s|0,1073741823}function NLe(s,l){s=s|0,l=l|0;var c=0;if((F9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function LLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function F9(s){return s=s|0,1073741823}function OLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function MLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ULe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function R9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function T9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function N9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _Le(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;if(Qe=C,C=C+32|0,O=Qe+20|0,j=Qe+12|0,M=Qe+16|0,se=Qe+4|0,Ge=Qe,Me=Qe+8|0,k=B9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;bc(O,B),HLe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=v9()|0,B=n[m>>2]|0,B|0)do bc(O,B),n[j>>2]=n[m+4>>2],qLe(l,O,j),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Ym()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,bc(O,n[(Wm(l)|0)>>2]|0),n[j>>2]=uR(l)|0,jLe(c,O,j),m=n[m>>2]|0;while((m|0)!=0);if(bc(M,0),m=AR()|0,n[O>>2]=n[M>>2],D9(O,m,d),m=n[(Ym()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,bc(j,n[(Wm(Q)|0)>>2]|0),GLe(se,L9(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do bc(Ge,n[(Wm(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):pR(O,Ge),B=n[B>>2]|0;while((B|0)!=0);YLe(f,j,O),ef(O)}n[Me>>2]=n[j>>2],M=O9(Q)|0,n[O>>2]=n[Me>>2],D9(O,M,d),s5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Qe}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,nOe(s,l,c,f)}function qLe(s,l,c){s=s|0,l=l|0,c=c|0,rOe(s,l,c)}function Wm(s){return s=s|0,s|0}function jLe(s,l,c){s=s|0,l=l|0,c=c|0,ZLe(s,l,c)}function L9(s){return s=s|0,s+16|0}function GLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=XLe(c)|0,f|0){if(f=Kt(12)|0,B=(M9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(M9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function YLe(s,l,c){s=s|0,l=l|0,c=c|0,WLe(s,l,c)}function O9(s){return s=s|0,s+24|0}function WLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Ka(d),s=da(s)|0,n[k>>2]=n[l>>2],gR(m,c),n[B>>2]=n[k>>2],KLe(s,B,m),ef(m),Va(d),C=f}function KLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Sl(VLe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,mR(d)|0)|0,ef(d),C=f}function VLe(){var s=0;return o[7976]|0||(JLe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function JLe(s){s=s|0,Pl(s,zLe()|0,2)}function zLe(){return 1732}function XLe(s){return s=s|0,n[s>>2]|0}function M9(s){return s=s|0,n[s>>2]|0}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U9(s,m,c),Va(d),C=f}function U9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Sl($Le()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Fg(m)|0,oo(0,d|0,s|0,l|0,S9(c)|0)|0,C=f}function $Le(){var s=0;return o[7984]|0||(eOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function eOe(s){s=s|0,Pl(s,tOe()|0,2)}function tOe(){return 1744}function rOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U9(s,m,c),Va(d),C=f}function nOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],iOe(s,B,c,f),Va(m),C=d}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Sl(sOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,c=Km(c)|0,pc(0,m|0,s|0,l|0,c|0,Km(f)|0)|0,C=d}function sOe(){var s=0;return o[7992]|0||(aOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Km(s){return s=s|0,oOe(s)|0}function oOe(s){return s=s|0,s&255|0}function aOe(s){s=s|0,Pl(s,lOe()|0,3)}function lOe(){return 1756}function cOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,LF(s,0),f=oUe(l)|0,n[k>>2]=0,j=k+4|0,n[j>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,uOe(Q,c,M),uD(s,Q)|0,GA(Q);break}case 8:{j=BR(l)|0,o[M>>0]=8,bc(O,n[j+4>>2]|0),AOe(Q,c,M,O,j+8|0),uD(s,Q)|0,GA(Q);break}case 9:{if(m=BR(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,bc(Q,n[d>>2]|0),f=n[j>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[j>>2]=(n[j>>2]|0)+4):pR(k,Q),l;)d=d+4|0;o[M>>0]=9,bc(O,n[m+8>>2]|0),fOe(Q,c,M,O,k),uD(s,Q)|0,GA(Q);break}default:j=BR(l)|0,o[M>>0]=f,bc(O,n[j+4>>2]|0),pOe(Q,c,M,O),uD(s,Q)|0,GA(Q)}ef(k),C=se}function uOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ka(d),l=da(l)|0,SOe(s,l,o[c>>0]|0),Va(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function AOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],IOe(s,l,c,k,d),Va(B),C=m}function fOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],gR(k,d),n[Q>>2]=n[M>>2],yOe(s,l,c,Q,k),ef(k),Va(B),C=m}function pOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],hOe(s,l,c,B),Va(m),C=d}function hOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Sl(gOe()|0)|0,c=Km(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Fg(m)|0)|0),C=d}function gOe(){var s=0;return o[8e3]|0||(dOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,LF(s,l)}function dOe(s){s=s|0,Pl(s,mOe()|0,2)}function mOe(){return 1772}function yOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+16|0,M=m+12|0,B=m,k=Sl(EOe()|0)|0,c=Km(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=Fg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,mR(B)|0)|0),ef(B),C=m}function EOe(){var s=0;return o[8008]|0||(COe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function COe(s){s=s|0,Pl(s,wOe()|0,3)}function wOe(){return 1784}function IOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Sl(BOe()|0)|0,c=Km(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Fg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,dR(d)|0)|0),C=m}function BOe(){var s=0;return o[8016]|0||(vOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function vOe(s){s=s|0,Pl(s,DOe()|0,3)}function DOe(){return 1800}function SOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Sl(POe()|0)|0,AD(s,Qn(0,f|0,l|0,Km(c)|0)|0)}function POe(){var s=0;return o[8024]|0||(bOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function bOe(s){s=s|0,Pl(s,xOe()|0,1)}function xOe(){return 1816}function kOe(){QOe(),FOe(),ROe()}function QOe(){n[2702]=p7(65536)|0}function FOe(){$Oe(10856)}function ROe(){TOe(10816)}function TOe(s){s=s|0,NOe(s,5044),LOe(s)|0}function NOe(s,l){s=s|0,l=l|0;var c=0;c=x9()|0,n[s>>2]=c,KOe(c,l),xp(n[s>>2]|0)}function LOe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,OOe()|0),s|0}function OOe(){var s=0;return o[8032]|0||(_9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Tr(10820)|0||_9(10820),10820}function _9(s){s=s|0,_Oe(s),Qg(s,25)}function MOe(s){s=s|0,UOe(s+24|0)}function UOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function _Oe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,18,l,GOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function HOe(s,l){s=s|0,l=l|0,qOe(s,l)}function qOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,bg(d,l),n[f>>2]=xg(d,l)|0,jOe(s,f),C=c}function jOe(s,l){s=s|0,l=l|0,H9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function H9(s,l){s=s|0,l=l|0,n[s>>2]=l}function GOe(){return 1824}function YOe(s){return s=s|0,WOe(s)|0}function WOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,bg(d,s),H9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=p7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function KOe(s,l){s=s|0,l=l|0,n[s>>2]=VOe()|0,n[s+4>>2]=JOe()|0,n[s+12>>2]=l,n[s+8>>2]=zOe()|0,n[s+32>>2]=9}function VOe(){return 11744}function JOe(){return 1832}function zOe(){return lD()|0}function XOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(ZOe(c),gt(c)):l|0&>(l)}function ZOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function $Oe(s){s=s|0,eMe(s,5052),tMe(s)|0,rMe(s,5058,26)|0,nMe(s,5069,1)|0,iMe(s,5077,10)|0,sMe(s,5087,19)|0,oMe(s,5094,27)|0}function eMe(s,l){s=s|0,l=l|0;var c=0;c=Z4e()|0,n[s>>2]=c,$4e(c,l),xp(n[s>>2]|0)}function tMe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,M4e()|0),s|0}function rMe(s,l,c){return s=s|0,l=l|0,c=c|0,C4e(s,pn(l)|0,c,0),s|0}function nMe(s,l,c){return s=s|0,l=l|0,c=c|0,s4e(s,pn(l)|0,c,0),s|0}function iMe(s,l,c){return s=s|0,l=l|0,c=c|0,OMe(s,pn(l)|0,c,0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,IMe(s,pn(l)|0,c,0),s|0}function q9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,aMe(s,pn(l)|0,c,0),s|0}function aMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=yR()|0,s=lMe(c)|0,hn(m,l,d,s,cMe(c,f)|0,f)}function yR(){var s=0,l=0;if(o[8040]|0||(G9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G9(10860)}return 10860}function lMe(s){return s=s|0,s|0}function cMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=yR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(j9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(uMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function j9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function uMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=AMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,fMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,j9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,pMe(s,d),hMe(d),C=k;return}}function AMe(s){return s=s|0,536870911}function fMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function pMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function G9(s){s=s|0,mMe(s)}function gMe(s){s=s|0,dMe(s+24|0)}function dMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,yMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yMe(){return 1840}function EMe(s,l,c){s=s|0,l=l|0,c=c|0,wMe(n[(CMe(s)|0)>>2]|0,l,c)}function CMe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s<<3)|0}function wMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,bg(m,l),l=xg(m,l)|0,bg(d,c),c=xg(d,c)|0,rf[s&31](l,c),C=f}function IMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ER()|0,s=BMe(c)|0,hn(m,l,d,s,vMe(c,f)|0,f)}function ER(){var s=0,l=0;if(o[8048]|0||(W9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W9(10896)}return 10896}function BMe(s){return s=s|0,s|0}function vMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=ER()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(DMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function DMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,PMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,bMe(s,d),xMe(d),C=k;return}}function SMe(s){return s=s|0,536870911}function PMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function bMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W9(s){s=s|0,FMe(s)}function kMe(s){s=s|0,QMe(s+24|0)}function QMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function FMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,RMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RMe(){return 1852}function TMe(s,l){return s=s|0,l=l|0,LMe(n[(NMe(s)|0)>>2]|0,l)|0}function NMe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s<<3)|0}function LMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,bg(f,l),l=xg(f,l)|0,l=oD(Lg[s&31](l)|0)|0,C=c,l|0}function OMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CR()|0,s=MMe(c)|0,hn(m,l,d,s,UMe(c,f)|0,f)}function CR(){var s=0,l=0;if(o[8056]|0||(V9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10932)}return 10932}function MMe(s){return s=s|0,s|0}function UMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(_Me(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function _Me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=HMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,qMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,jMe(s,d),GMe(d),C=k;return}}function HMe(s){return s=s|0,536870911}function qMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function jMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,KMe(s)}function YMe(s){s=s|0,WMe(s+24|0)}function WMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function KMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,7,l,VMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VMe(){return 1860}function JMe(s,l,c){return s=s|0,l=l|0,c=c|0,XMe(n[(zMe(s)|0)>>2]|0,l,c)|0}function zMe(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s<<3)|0}function XMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,ZMe(Q,l),$Me(k,Q,l),Dp(d,c),c=Sp(d,c)|0,n[B>>2]=n[k>>2],Hw[s&15](m,B,c),c=e4e(m)|0,GA(m),Pp(d),C=f,c|0}function ZMe(s,l){s=s|0,l=l|0}function $Me(s,l,c){s=s|0,l=l|0,c=c|0,t4e(s,c)}function e4e(s){return s=s|0,da(s)|0}function t4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(r4e(c,0),ii(f|0,c|0)|0,n4e(s,c),i4e(c)):n[s>>2]=n[l>>2],C=d}function r4e(s,l){s=s|0,l=l|0,XG(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function n4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function i4e(s){s=s|0,o[s+8>>0]=0}function s4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wR()|0,s=o4e(c)|0,hn(m,l,d,s,a4e(c,f)|0,f)}function wR(){var s=0,l=0;if(o[8064]|0||(z9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z9(10968)}return 10968}function o4e(s){return s=s|0,s|0}function a4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(l4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function J9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function l4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=c4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,u4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,A4e(s,d),f4e(d),C=k;return}}function c4e(s){return s=s|0,536870911}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function A4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function f4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function z9(s){s=s|0,g4e(s)}function p4e(s){s=s|0,h4e(s+24|0)}function h4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function g4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,1,l,d4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function d4e(){return 1872}function m4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,E4e(n[(y4e(s)|0)>>2]|0,l,c,f,d,m)}function y4e(s){return s=s|0,(n[(wR()|0)+24>>2]|0)+(s<<3)|0}function E4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,j=B,Dp(k,l),l=Sp(k,l)|0,Dp(Q,c),c=Sp(Q,c)|0,Dp(M,f),f=Sp(M,f)|0,Dp(O,d),d=Sp(O,d)|0,Dp(j,m),m=Sp(j,m)|0,y7[s&1](l,c,f,d,m),Pp(j),Pp(O),Pp(M),Pp(Q),Pp(k),C=B}function C4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IR()|0,s=w4e(c)|0,hn(m,l,d,s,I4e(c,f)|0,f)}function IR(){var s=0,l=0;if(o[8072]|0||(Z9(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Tr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z9(11004)}return 11004}function w4e(s){return s=s|0,s|0}function I4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(B4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function B4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=v4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,D4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,S4e(s,d),P4e(d),C=k;return}}function v4e(s){return s=s|0,536870911}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function P4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z9(s){s=s|0,k4e(s)}function b4e(s){s=s|0,x4e(s+24|0)}function x4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function k4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,12,l,Q4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Q4e(){return 1896}function F4e(s,l,c){s=s|0,l=l|0,c=c|0,T4e(n[(R4e(s)|0)>>2]|0,l,c)}function R4e(s){return s=s|0,(n[(IR()|0)+24>>2]|0)+(s<<3)|0}function T4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,N4e(m,l),l=L4e(m,l)|0,Dp(d,c),c=Sp(d,c)|0,rf[s&31](l,c),Pp(d),C=f}function N4e(s,l){s=s|0,l=l|0}function L4e(s,l){return s=s|0,l=l|0,O4e(l)|0}function O4e(s){return s=s|0,s|0}function M4e(){var s=0;return o[8080]|0||($9(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Tr(11040)|0||$9(11040),11040}function $9(s){s=s|0,H4e(s),Qg(s,71)}function U4e(s){s=s|0,_4e(s+24|0)}function _4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function H4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,7,l,Y4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function q4e(s){s=s|0,j4e(s)}function j4e(s){s=s|0,G4e(s)}function G4e(s){s=s|0,o[s+8>>0]=1}function Y4e(){return 1936}function W4e(){return K4e()|0}function K4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],V4e(f,m,d),n[c>>2]=f,C=l,s|0}function V4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function J4e(s){s=s|0,zm(s),gt(s)}function z4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function X4e(s){s=s|0,gt(s)}function Z4e(){var s=0;return o[8088]|0||(sUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function $4e(s,l){s=s|0,l=l|0,n[s>>2]=eUe()|0,n[s+4>>2]=tUe()|0,n[s+12>>2]=l,n[s+8>>2]=rUe()|0,n[s+32>>2]=10}function eUe(){return 11745}function tUe(){return 1940}function rUe(){return aD()|0}function nUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(iUe(c),gt(c)):l|0&>(l)}function iUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function sUe(s){s=s|0,vp(s)}function bc(s,l){s=s|0,l=l|0,n[s>>2]=l}function BR(s){return s=s|0,n[s>>2]|0}function oUe(s){return s=s|0,o[n[s>>2]>>0]|0}function aUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],lUe(l,f)|0,C=c}function lUe(s,l){s=s|0,l=l|0;var c=0;return c=cUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function cUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Ka(f),s=da(s)|0,l=uUe(s,n[l>>2]|0)|0,Va(f),C=c,l|0}function Ka(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function uUe(s,l){s=s|0,l=l|0;var c=0;return c=Sl(AUe()|0)|0,Qn(0,c|0,s|0,dR(l)|0)|0}function Va(s){s=s|0,q9(n[s>>2]|0,n[s+4>>2]|0)}function AUe(){var s=0;return o[8096]|0||(fUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function fUe(s){s=s|0,Pl(s,pUe()|0,1)}function pUe(){return 1948}function hUe(){gUe()}function gUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;if(Me=C,C=C+16|0,O=Me+4|0,j=Me,Ni(65536,10804,n[2702]|0,10812),c=B9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=v9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(dUe()|0,5167),M=Ym()|0,s=n[M>>2]|0;e:do if(s|0){do mUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(yUe(d)|0);)if(n[j>>2]=Q,n[O>>2]=n[j>>2],EUe(M,O)|0,!s)break e;if(CUe(d),Q=n[Q>>2]|0,l=e7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(L9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Wm(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=Wm(d)|0,l=wUe(d)|0,c=e7(d)|0,f=IUe(d)|0,Au(Qe|0,l|0,B|0,k|0,c|0,f|0,uR(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(AR()|0)>>2]|0,s|0)do Qe=s+4|0,M=fR(Qe)|0,d=Ow(M)|0,m=Nw(M)|0,B=(Lw(M)|0)+1|0,k=fD(M)|0,Q=t7(Qe)|0,M=Tr(M)|0,O=cD(Qe)|0,j=vR(Qe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,j|0,DR(Qe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Ym()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Wm(l)|0)>>2]|0,Ge=n[(O9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=fR(l)|0;r:do if(f|0)switch(Tr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Ow(f)|0,Q=Nw(f)|0,M=(Lw(f)|0)+1|0,O=fD(f)|0,j=Tr(f)|0,Qe=cD(l)|0,El(se|0,k|0,Q|0,M|0,O|0,0,j|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 1:{B=Ow(f)|0,k=Nw(f)|0,Q=(Lw(f)|0)+1|0,M=fD(f)|0,O=t7(l)|0,j=Tr(f)|0,Qe=cD(l)|0,El(se|0,B|0,k|0,Q|0,M|0,O|0,j|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 5:{M=Ow(f)|0,O=Nw(f)|0,j=(Lw(f)|0)+1|0,Qe=fD(f)|0,El(se|0,M|0,O|0,j|0,Qe|0,BUe(f)|0,Tr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Rt()}while(0);Ce(),C=Me}function dUe(){return 11703}function mUe(s){s=s|0,o[s+40>>0]=0}function yUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function EUe(s,l){return s=s|0,l=l|0,l=vUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function CUe(s){s=s|0,o[s+40>>0]=1}function e7(s){return s=s|0,n[s+20>>2]|0}function wUe(s){return s=s|0,n[s+8>>2]|0}function IUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function t7(s){return s=s|0,n[s+4>>2]|0}function vR(s){return s=s|0,n[s+8>>2]|0}function DR(s){return s=s|0,n[s+16>>2]|0}function BUe(s){return s=s|0,n[s+20>>2]|0}function vUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,j=n[2783]|0,c=j>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=j&~(1<>2]=s,n[c>>2]=m),je=l<<3,n[f+4>>2]=je|3,je=f+je+4|0,n[je>>2]=n[je>>2]|1,je=d,C=Lt,je|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=j&~(1<>2]=l,n[s>>2]=c,s=j),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,je=B,C=Lt,je|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(je=m+M|0,n[Q+4>>2]=je|3,je=Q+je+4|0,n[je>>2]=n[je>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=j|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),je=Q+8|0,C=Lt,je|0}else j=M}else j=M}else j=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(j=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|j|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,j=j>>>B,m=j>>>5&8,j=j>>>m,k=j>>>2&4,j=j>>>k,O=j>>>1&2,j=j>>>O,c=j>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(j>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,j=c>>>0>>0,c=j?c:f,s=j?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return je=0,C=Lt,je|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else je=n[k+8>>2]|0,n[je+12>>2]=l,n[l+8>>2]=je;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,l=14-(lt|Ue|l)+(je<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=je,n[m+12>>2]=c,n[m+24>>2]=0;break}}else je=B+M|0,n[k+4>>2]=je|3,je=k+je+4|0,n[je>>2]=n[je>>2]|1;while(0);return je=k+8|0,C=Lt,je|0}else j=M}else j=M;else j=-1;while(0);if(c=n[2785]|0,c>>>0>=j>>>0)return l=c-j|0,s=n[2788]|0,l>>>0>15?(je=s+j|0,n[2788]=je,n[2785]=l,n[je+4>>2]=l|1,n[je+l>>2]=l,n[s+4>>2]=j|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,je=s+c+4|0,n[je>>2]=n[je>>2]|1),je=s+8|0,C=Lt,je|0;if(B=n[2786]|0,B>>>0>j>>>0)return lt=B-j|0,n[2786]=lt,je=n[2789]|0,Ue=je+j|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[je+4>>2]=j|3,je=je+8|0,C=Lt,je|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=j+48|0,Q=j+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=j>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return je=0,C=Lt,je|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Qp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=Qp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Me=Ge+-1|0,l=((Me&l|0)==0?0:(Me+l&0-Ge)-l|0)+M|0,Ge=n[2891]|0,Me=l+Ge|0,l>>>0>j>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Me>>>0<=Ge>>>0|Me>>>0>Qe>>>0){l=0;break}if(s=Qp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((Qp(s|0)|0)==-1){Qp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(lt=Qp(M|0)|0,Qe=Qp(0)|0,et=Qe-lt|0,Xe=et>>>0>(j+40|0)>>>0,!((lt|0)==-1|Xe^1|lt>>>0>>0&((lt|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?et:l,m=lt,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,je=Q+8|0,je=(je&7|0)==0?0:0-je&7,Ue=Q+je|0,je=(n[2786]|0)+(B-je)|0,n[2789]=Ue,n[2786]=je,n[Ue+4>>2]=je|1,n[Ue+je+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+j|0,k=l-O-j|0,n[O+4>>2]=j|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){je=(n[2785]|0)+k|0,n[2785]=je,n[2788]=M,n[M+4>>2]=je|1,n[M+je>>2]=je;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else je=n[l+8>>2]|0,n[je+12>>2]=s,n[s+8>>2]=je;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,l=14-(lt|Ue|l)+(je<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=je,n[M+12>>2]=c,n[M+24>>2]=0;break}}else je=(n[2786]|0)+k|0,n[2786]=je,n[2789]=M,n[M+4>>2]=je|1;while(0);return je=O+8|0,C=Lt,je|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(je=s+(n[l+4>>2]|0)|0,je>>>0>Q>>>0));)l=n[l+8>>2]|0;d=je+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,je=l<>>16&4,je=je<>>16&2,c=14-(lt|Ue|c)+(je<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,je=n[Ue>>2]|0,n[je+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=je,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{je=n[2787]|0,(je|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do je=11172+(l<<1<<2)|0,n[je+12>>2]=je,n[je+8>>2]=je,l=l+1|0;while((l|0)!=32);je=m+8|0,je=(je&7|0)==0?0:0-je&7,Ue=m+je|0,je=B+-40-je|0,n[2789]=Ue,n[2786]=je,n[Ue+4>>2]=je|1,n[Ue+je+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>j>>>0)return lt=l-j|0,n[2786]=lt,je=n[2789]|0,Ue=je+j|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[je+4>>2]=j|3,je=je+8|0,C=Lt,je|0}return n[(Vm()|0)>>2]=12,je=0,C=Lt,je|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function DUe(){return 11628}function SUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=xUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0;j=C,C=C+48|0,M=j+16|0,m=j,d=j+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=gD(Li(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=j,c|0}function PUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(bUe()|0)+64|0}function bUe(){return SR()|0}function SR(){return 2084}function xUe(s){return s=s|0,s|0}function kUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=r7(s,l,c)|0,C=d,f|0}function n7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0;Qe=C,C=C+224|0,O=Qe+120|0,j=Qe+80|0,Ge=Qe,Me=Qe+136|0,f=j,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(PR(0,l,O,Ge,j)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=FUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=PR(s,l,O,Ge,j)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=PR(s,l,O,Ge,j)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&RUe(s),c=(f&32|0)==0?c:-1),C=Qe,c|0}function PR(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Sr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,lt=(s|0)!=0,Ue=Lt+40|0,je=Ue,Lt=Lt+39|0,Mr=Sr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,lt&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Qe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Qe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,j=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;j=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}lt?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=s7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=s7(or)|0,Q=n[or>>2]|0;break}if(j=Q+2|0,k=(o[j>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[j>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(O|0){m=-1;break e}lt?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=j,Q=j}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,j=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=j&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(j<<24>>24)){m=-1;break}Ge=(Qe|0)>-1;do if(j<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Qe<<2)>>2]=se,Ge=f+(Qe<<3)|0,Qe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!lt){m=0;break e}o7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!lt)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=M&-65537,Qe=(M&8192|0)==0?M:Ge;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=NUe(l,Q,Ue)|0,Ge=je-se|0,M=0,j=5642,k=(Qe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Qe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=Se,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,j=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,j=(Qe&2048|0)==0?(Qe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,M=0,j=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,M=0,j=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=LUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Sr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Sr,se=-1,Q=Sr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=MUe(s,+E[Xt>>3],B,k,Qe,Q)|0,l=et;continue e}default:M=0,j=5642,se=Ue,Q=k,k=Qe}while(0);t:do if((Xe|0)==61)Qe=Xt,Me=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,se=TUe(Me,Qe,Ue,Q&32)|0,j=(l&8|0)==0|(Me|0)==0&(Qe|0)==0,M=j?0:2,j=j?5642:5642+(Q>>4)|0,Ge=l,l=Me,Q=Qe,Xe=67;else if((Xe|0)==66)se=Jm(l,Q,Ue)|0,Ge=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=OUe(Q,0,k)|0,Me=(Qe|0)==0,l=Q,M=0,j=5642,se=Me?Q+k|0:Qe,Q=Me?k:Qe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,j=Q,l=0,k=0;M=n[j>>2]|0,!(!M||(k=a7(Nr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)j=j+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=a7(Nr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),M>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Qe=(k|0)!=0|Q,Q=((Q^1)&1)+(je-se)|0,l=Qe?se:Ue,se=Ue,Q=Qe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,Ge=(Q|0)<(Me|0)?Me:Q,Qe=Ge+M|0,B=(B|0)<(Qe|0)?Qe:B,Bs(s,32,B,Qe,k),ss(s,j,M),Bs(s,48,B,Qe,k^65536),Bs(s,48,Ge,Me,0),ss(s,l,Me),Bs(s,32,B,Qe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(o7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function FUe(s){return s=s|0,0}function RUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||KUe(l,c,s)|0}function s7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function TUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function NUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function Jm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=QR(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=kR(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=Se;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function LUe(s){return s=s|0,jUe(s,n[(qUe()|0)+188>>2]|0)|0}function OUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=qe(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Xm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function a7(s,l){return s=s|0,l=l|0,s?s=_Ue(s,l,0)|0:s=0,s|0}function MUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,je=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0;xn=C,C=C+560|0,Q=xn+8|0,et=xn,ir=xn+524|0,Nr=ir,M=xn+512|0,n[et>>2]=0,Sr=M+12|0,l7(l)|0,(Se|0)<0?(l=-l,or=1,Mr=5659):(or=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),l7(l)|0,Xt=Se&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+UUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),lt=m|32,(lt|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,j=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,(B|0)==(Sr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Sr-O|0,Sr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+j+Sr|0,Bs(s,32,c,B,d),ss(s,se,j),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Sr-Xt|0,0,0),ss(s,O,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do je=~~l>>>0,n[Q>>2]=je,Q=Q+4|0,l=(l-+(je>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,j=Q;;){if(O=(B|0)<29?B:29,B=j+-4|0,B>>>0>=M>>>0){Q=0;do Ue=h7(n[B>>2]|0,0,O|0)|0,Ue=xR(Ue|0,Se|0,Q|0,0)|0,je=Se,Xe=QR(Ue|0,je|0,1e9,0)|0,n[B>>2]=Xe,Q=kR(Ue|0,je|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=j;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)j=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(lt|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do je=n[B>>2]|0,n[B>>2]=(je>>>Me)+se,se=qe(je&O,j)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Qe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(je=Xt,B>>>0>>0){if(Q=(je-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Qe=(lt|0)==103,Xe=(k|0)!=0,M=k-((lt|0)!=102?Q:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-je>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(j=n[Me>>2]|0,se=(j>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(Ge=(((j>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),M=j-se|0,n[Me>>2]=M,Ge+l!=Ge){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(je-B>>2)*9|0,j=n[B>>2]|0,j>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(j>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(lt=M;;){if(lt>>>0<=Ue>>>0){et=0;break}if(B=lt+-4|0,!(n[B>>2]|0))lt=B;else{et=1;break}}f=0-Q|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Lt=n[lt+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((lt-je>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Qe=k|Me,j=(Qe|0)!=0&1,se=(O|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,M=Sr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=or+1+k+j+B|0,Bs(s,32,c,B,d),ss(s,Mr,or),Bs(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=ir+9|0,j=Me,se=ir+8|0,M=O;do{if(Q=Jm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,j-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Qe|0&&ss(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=Jm(n[M>>2]|0,0,Me)|0,Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Qe=et?lt:Ue+4|0,(k|0)>-1){et=ir+9|0,Me=(Me|0)==0,f=et,j=0-Nr|0,se=ir+8|0,O=Ue;do{Q=Jm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,ss(s,Q,1),Me&(k|0)<1){Q=M;break}ss(s,5710,1),Q=M}else{if(Q>>>0<=ir>>>0)break;Xm(ir|0,48,Q+j|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Sr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Mr,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=xn,((B|0)<(c|0)?c:B)|0}function l7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,Se=n[v+4>>2]|0,l|0}function UUe(s,l){return s=+s,l=l|0,+ +c7(s,l)}function c7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+c7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function _Ue(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(HUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function HUe(){return SR()|0}function qUe(){return SR()|0}function jUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return GUe(c,n[l+20>>2]|0)|0}function GUe(s,l){return s=s|0,l=l|0,YUe(s,l)|0}function YUe(s,l){return s=s|0,l=l|0,l?l=WUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function WUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Rg(n[s+8>>2]|0,se)|0,f=Rg(n[s+12>>2]|0,se)|0,d=Rg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(j=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(j=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+j|0,f=Rg(n[s+(d<<2)>>2]|0,se)|0,d=Rg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=n7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Rg(n[s+(f<<2)>>2]|0,se)|0,f=Rg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Rg(s,l){s=s|0,l=l|0;var c=0;return c=m7(s|0)|0,((l|0)==0?s:c)|0}function KUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:VUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function VUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=u7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=u7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=A7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=A7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function bR(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((JUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function JUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function zUe(s,l){return s=s|0,l=l|0,i7(n[582]|0,s,l)|0}function zr(s){s=s|0,Rt()}function zm(s){s=s|0}function XUe(s,l){return s=s|0,l=l|0,0}function ZUe(s){return s=s|0,(f7(s+4|0)|0)==-1?(tf[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function f7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function kp(s){s=s|0,ZUe(s)|0&&$Ue(s)}function $Ue(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(f7(l)|0)!=-1||tf[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=t3e()|0,!s){s=0;break}P7[s&0]()}return s|0}function p7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,hD(s)}function e3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function t3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function r3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,Se=f,s-c>>>0|0|0}function xR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,Se=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Xm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function h7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(Se=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function g7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function d7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,j=0,se=0,Ge=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,Se=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=31){j=m+1|0,k=31-m|0,l=m-31>>31,B=j,s=O>>>(j>>>0)&l|M<>>(j>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0)}if(m=B-1|0,m&B|0){k=(P(B|0)|0)+33-(P(M|0)|0)|0,Me=64-k|0,j=32-k|0,Q=j>>31,Ge=k-32|0,l=Ge>>31,B=k,s=j-1>>31&M>>>(Ge>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(Ge>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Me=s|0|0,Se=Ge,Me|0):(Me=g7(B|0)|0,Ge=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,Se=Ge,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Me=(M>>>0)/(B>>>0)>>>0,Se=Ge,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),Ge=0,Me=(M>>>0)/(k>>>0)>>>0,Se=Ge,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),Ge=0,Me=M>>>((g7(k|0)|0)>>>0),Se=Ge,Me|0;if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Me=0,Se=Ge,Me|0):(Ge=0,Me=0,Se=Ge,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{j=c|0|0,O=se|f&0,M=xR(j|0,O|0,-1,-1)|0,c=Se,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(M|0,c|0,f|0,se|0)|0,Me=Se,Ge=Me>>31|((Me|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&j|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=Se,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,Se=Ge,Me|0}function kR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,d7(s,l,c,f,0)|0}function Qp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,DA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,DA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function QR(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,d7(s,l,c,f,d)|0,C=m,Se=n[d+4>>2]|0,n[d>>2]|0|0}function m7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function n3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,y7[s&1](l|0,c|0,f|0,d|0,m|0)}function i3e(s,l,c){s=s|0,l=l|0,c=y(c),E7[s&1](l|0,y(c))}function s3e(s,l,c){s=s|0,l=l|0,c=+c,C7[s&31](l|0,+c)}function o3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(w7[s&0](l|0,y(c),y(f)))}function a3e(s,l){s=s|0,l=l|0,tf[s&127](l|0)}function l3e(s,l,c){s=s|0,l=l|0,c=c|0,rf[s&31](l|0,c|0)}function c3e(s,l){return s=s|0,l=l|0,Lg[s&31](l|0)|0}function u3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,I7[s&1](l|0,+c,+f,d|0)}function A3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,Y3e[s&1](l|0,+c,+f)}function f3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function p3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+W3e[s&1](l|0,c|0,f|0)}function h3e(s,l){return s=s|0,l=l|0,+B7[s&15](l|0)}function g3e(s,l,c){return s=s|0,l=l|0,c=+c,K3e[s&1](l|0,+c)|0}function d3e(s,l,c){return s=s|0,l=l|0,c=c|0,RR[s&15](l|0,c|0)|0}function m3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,V3e[s&1](l|0,c|0,+f,+d,m|0)}function y3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,J3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function E3e(s,l,c){return s=s|0,l=l|0,c=c|0,+v7[s&7](l|0,c|0)}function C3e(s){return s=s|0,CD[s&7]()|0}function w3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,D7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function I3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,z3e[s&1](l|0,c|0,f|0,+d)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,S7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function v3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,Hw[s&15](l|0,c|0,f|0)}function D3e(s){s=s|0,P7[s&0]()}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,b7[s&15](l|0,c|0,+f)}function P3e(s,l,c){return s=s|0,l=+l,c=+c,X3e[s&1](+l,+c)|0}function b3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,TR[s&15](l|0,c|0,f|0,d|0)}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function k3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function Q3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Uw(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function F3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function R3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function T3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function N3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Ng(s){return s=s|0,F(11),0}function L3e(s,l){return s=s|0,l=+l,F(12),0}function _w(s,l){return s=s|0,l=l|0,F(13),0}function O3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function M3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function FR(s,l){return s=s|0,l=l|0,F(16),0}function U3e(){return F(17),0}function _3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function H3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function j3e(){F(22)}function Zm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function G3e(s,l){return s=+s,l=+l,F(24),0}function $m(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var y7=[x3e,_Le],E7=[k3e,fo],C7=[ma,xw,kw,EF,CF,Dl,Qw,wF,qm,bu,Rw,IF,$v,KA,eD,jm,tD,rD,Gm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],w7=[Q3e],tf=[Er,zm,CDe,wDe,IDe,Xbe,Zbe,$be,gNe,dNe,mNe,PLe,bLe,xLe,J4e,z4e,X4e,hs,Vv,Hm,WA,Fw,dve,mve,uDe,kDe,qDe,oSe,ISe,USe,rPe,mPe,FPe,VPe,ube,Sbe,qbe,dxe,Fxe,Vxe,uke,Ske,qke,aQe,IQe,LQe,ZQe,Pc,xFe,YFe,uRe,bRe,jRe,uTe,CTe,BTe,_Te,jTe,oNe,ENe,INe,UNe,nLe,i5,MOe,gMe,kMe,YMe,p4e,b4e,U4e,q4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],rf=[Uw,fF,pF,bw,Pu,hF,gF,Bp,dF,mF,yF,Zv,VA,Ve,ft,Wt,vr,Pn,Fr,vF,nve,Sve,AQe,DQe,FRe,HOe,ALe,q9,Uw,Uw,Uw,Uw],Lg=[Ja,SUe,AF,D,Ae,De,vt,wt,xt,_r,di,po,eve,tve,yve,tFe,KRe,qNe,YOe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],I7=[F3e,Eve],Y3e=[R3e,cNe],ED=[T3e,r7,PUe,kUe,jSe,Cxe,RFe,JMe],W3e=[N3e,hbe],B7=[Ng,Yo,rt,bn,Cve,wve,Ive,Bve,vve,Dve,Ng,Ng,Ng,Ng,Ng,Ng],K3e=[L3e,mTe],RR=[_w,XUe,rve,hDe,uSe,sPe,CPe,Wbe,Lxe,_Qe,Wv,TMe,_w,_w,_w,_w],V3e=[O3e,WDe],J3e=[M3e,m4e],v7=[FR,ai,Pve,bve,xve,kbe,FR,FR],CD=[U3e,kve,Sw,ga,PTe,KTe,SNe,W4e],D7=[_3e,Cw],z3e=[H3e,hke],S7=[q3e,ive],Hw=[yD,T,is,tn,ho,SSe,NPe,kke,Wke,_m,cOe,EMe,F4e,yD,yD,yD],P7=[j3e],b7=[Zm,Jv,zv,Xv,YA,nD,BF,S,Zxe,JFe,pTe,Zm,Zm,Zm,Zm,Zm],X3e=[G3e,pNe],TR=[$m,ZPe,cFe,hRe,rTe,RTe,$Te,RNe,lLe,XOe,nUe,$m,$m,$m,$m,$m];return{_llvm_bswap_i32:m7,dynCall_idd:P3e,dynCall_i:C3e,_i64Subtract:dD,___udivdi3:kR,dynCall_vif:i3e,setThrew:hu,dynCall_viii:v3e,_bitshift64Lshr:mD,_bitshift64Shl:h7,dynCall_vi:a3e,dynCall_viiddi:m3e,dynCall_diii:p3e,dynCall_iii:d3e,_memset:Xm,_sbrk:Qp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Um,dynCall_vii:l3e,___uremdi3:QR,dynCall_vid:s3e,stackAlloc:lo,_nbind_init:hUe,getTempRet0:Ua,dynCall_di:h3e,dynCall_iid:g3e,setTempRet0:xA,_i64Add:xR,dynCall_fiff:o3e,dynCall_iiii:f3e,_emscripten_get_global_libc:DUe,dynCall_viid:S3e,dynCall_viiid:I3e,dynCall_viififi:B3e,dynCall_ii:c3e,__GLOBAL__sub_I_Binding_cc:kOe,dynCall_viiii:b3e,dynCall_iiiiii:w3e,stackSave:gc,dynCall_viiiii:n3e,__GLOBAL__sub_I_nbind_cc:Qve,dynCall_vidd:A3e,_free:hD,runPostSets:r3e,dynCall_viiiiii:y3e,establishStackSpace:qi,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:zNe,dynCall_viddi:u3e,dynCall_dii:E3e,dynCall_v:D3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var am=_((wKt,NEe)=>{"use strict";var Gyt=REe(),Yyt=TEe(),x6=!1,k6=null;Yyt({},function(t,e){if(!x6){if(x6=!0,t)throw t;k6=e}});if(!x6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=Gyt(k6.bind,k6.lib)});var F6=_((IKt,Q6)=>{"use strict";var LEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);Q6.exports=LEe;Q6.exports.default=LEe});var MEe=_((BKt,OEe)=>{"use strict";OEe.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Kk=_((vKt,R6)=>{"use strict";var Wyt=OS(),Kyt=F6(),Vyt=MEe(),UEe=t=>{if(typeof t!="string"||t.length===0||(t=Wyt(t),t.length===0))return 0;t=t.replace(Vyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Kyt(o)?2:1)}return e};R6.exports=UEe;R6.exports.default=UEe});var N6=_((DKt,T6)=>{"use strict";var Jyt=Kk(),_Ee=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,Jyt(r));return e};T6.exports=_Ee;T6.exports.default=_Ee});var HEe=_(cB=>{"use strict";var zyt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var Xyt=zyt(N6()),L6={};cB.default=t=>{if(t.length===0)return{width:0,height:0};if(L6[t])return L6[t];let e=Xyt.default(t),r=t.split(` +`).length;return L6[t]={width:e,height:r},{width:e,height:r}}});var qEe=_(uB=>{"use strict";var Zyt=uB&&uB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uB,"__esModule",{value:!0});var dn=Zyt(am()),$yt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},eEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},tEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},rEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},nEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},iEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},sEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};uB.default=(t,e={})=>{$yt(t,e),eEt(t,e),tEt(t,e),rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e)}});var YEe=_((bKt,GEe)=>{"use strict";var AB=Kk(),oEt=OS(),aEt=DI(),M6=new Set(["\x1B","\x9B"]),lEt=39,jEe=t=>`${M6.values().next().value}[${t}m`,cEt=t=>t.split(" ").map(e=>AB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=AB(oEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=AB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},uEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(AB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},AEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=cEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=AB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(uEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===lEt?null:I}let E=aEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=jEe(E):h===` +`&&(a+=jEe(n)))}return a};GEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>AEt(o,e,r)).join(` +`)});var VEe=_((xKt,KEe)=>{"use strict";var WEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",fEt=t=>t&&t.exact?new RegExp(`^${WEe}$`):new RegExp(WEe,"g");KEe.exports=fEt});var U6=_((kKt,ZEe)=>{"use strict";var pEt=F6(),hEt=VEe(),JEe=DI(),XEe=["\x1B","\x9B"],Vk=t=>`${XEe[0]}[${t}m`,zEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(Vk(e?u:n))}else if(e){o.push(Vk(0));break}else o.push(Vk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=Vk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};ZEe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(XEe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=zEe(a);else if(A>=r){p+=zEe(a,!0,u);break}}return p}});var eCe=_((QKt,$Ee)=>{"use strict";var E0=U6(),gEt=Kk();function Jk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}$Ee.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=gEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Jk(t,p-e+1,!0);return u+E0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+E0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Jk(t,h),I=Jk(t,p-(e-h)+1,!0);return E0(t,0,E)+u+E0(t,I,p).trim()}return E0(t,0,h)+u+E0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Jk(t,e-1);return E0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),E0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(fB=>{"use strict";var tCe=fB&&fB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fB,"__esModule",{value:!0});var dEt=tCe(YEe()),mEt=tCe(eCe()),_6={};fB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=dEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=mEt.default(t,e,{position:n})}return _6[o]=a,a}});var j6=_(q6=>{"use strict";Object.defineProperty(q6,"__esModule",{value:!0});var rCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=rCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};q6.default=rCe});var G6=_(pi=>{"use strict";var pB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var yEt=pB(am()),nCe=pB(HEe()),EEt=pB(qEe()),CEt=pB(H6()),wEt=pB(j6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:yEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(IEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&EEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var IEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:wEt.default(t),n=nCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=CEt.default(a,e,u);return nCe.default(A)},iCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:iCe(t.parentNode)},zk=t=>{let e=iCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,zk(t)}});var cCe=_(hB=>{"use strict";var lCe=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var sCe=S6(),BEt=lCe(PEe()),oCe=lCe(am()),Oo=G6(),aCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};hB.default=BEt.default({schedulePassiveEffects:sCe.unstable_scheduleCallback,cancelPassiveEffects:sCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Oo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Oo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Oo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Oo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Oo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Oo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_FLEX)},appendInitialChild:Oo.appendChildNode,appendChild:Oo.appendChildNode,insertBefore:Oo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Oo.appendChildNode,insertInContainerBefore:Oo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let x={};n.style=x}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let x={};n.style=x}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Oo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Oo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Oo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)}})});var ACe=_((LKt,uCe)=>{"use strict";uCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var fCe=_(gB=>{"use strict";var vEt=gB&&gB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gB,"__esModule",{value:!0});var Xk=vEt(am());gB.default=t=>t.getComputedWidth()-t.getComputedPadding(Xk.default.EDGE_LEFT)-t.getComputedPadding(Xk.default.EDGE_RIGHT)-t.getComputedBorder(Xk.default.EDGE_LEFT)-t.getComputedBorder(Xk.default.EDGE_RIGHT)});var pCe=_((MKt,DEt)=>{DEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var gCe=_((UKt,Y6)=>{"use strict";var hCe=pCe();Y6.exports=hCe;Y6.exports.default=hCe});var mCe=_((_Kt,dCe)=>{"use strict";var SEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},PEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};dCe.exports={stringReplaceAll:SEt,stringEncaseCRLFWithFirstIndex:PEt}});var ICe=_((HKt,wCe)=>{"use strict";var bEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,yCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,QEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function CCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):QEt.get(t)||t}function FEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(xEt))r.push(a[2].replace(kEt,(A,p,h)=>p?CCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function REt(t){yCe.lastIndex=0;let e=[],r;for(;(r=yCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=FEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ECe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}wCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(bEt,(n,u,A,p,h,E)=>{if(u)a.push(CCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ECe(t,r)(I)),r.push({inverse:A,styles:REt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ECe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var rQ=_((qKt,bCe)=>{"use strict";var dB=DI(),{stdout:K6,stderr:V6}=dN(),{stringReplaceAll:TEt,stringEncaseCRLFWithFirstIndex:NEt}=mCe(),{isArray:Zk}=Array,vCe=["ansi","ansi","ansi256","ansi16m"],HC=Object.create(null),LEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=K6?K6.level:0;t.level=e.level===void 0?r:e.level},J6=class{constructor(e){return DCe(e)}},DCe=t=>{let e={};return LEt(e,t),e.template=(...r)=>PCe(e.template,...r),Object.setPrototypeOf(e,$k.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=J6,e.template};function $k(t){return DCe(t)}for(let[t,e]of Object.entries(dB))HC[t]={get(){let r=eQ(this,z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};HC.visible={get(){let t=eQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)HC[t]={get(){let{level:e}=this;return function(...r){let o=z6(dB.color[vCe[e]][t](...r),dB.color.close,this._styler);return eQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);HC[e]={get(){let{level:r}=this;return function(...o){let a=z6(dB.bgColor[vCe[r]][t](...o),dB.bgColor.close,this._styler);return eQ(this,a,this._isEmpty)}}}}var OEt=Object.defineProperties(()=>{},{...HC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},eQ=(t,e,r)=>{let o=(...a)=>Zk(a[0])&&Zk(a[0].raw)?BCe(o,PCe(o,...a)):BCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,OEt),o._generator=t,o._styler=e,o._isEmpty=r,o},BCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=TEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=NEt(e,a,o,n)),o+e+a},W6,PCe=(t,...e)=>{let[r]=e;if(!Zk(r)||!Zk(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var MEt=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var mB=MEt(rQ()),UEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,_Et=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,nQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);yB.default=(t,e,r)=>{if(!e)return t;if(e in mB.default){let a=nQ(e,r);return mB.default[a](t)}if(e.startsWith("#")){let a=nQ("hex",r);return mB.default[a](e)(t)}if(e.startsWith("ansi")){let a=_Et.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]);return mB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=UEt.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return mB.default[n](u,A,p)(t)}return t}});var kCe=_(EB=>{"use strict";var xCe=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var HEt=xCe(gCe()),Z6=xCe(X6());EB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=HEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var FCe=_(CB=>{"use strict";var lm=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var qEt=lm(am()),jEt=lm(N6()),GEt=lm(ACe()),YEt=lm(H6()),WEt=lm(fCe()),KEt=lm(j6()),VEt=lm(kCe()),JEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+GEt.default(e,a)}return e},QCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===qEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=KEt.default(t);if(v.length>0){let x=jEt.default(v),C=WEt.default(p);if(x>C){let R=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=YEt.default(v,C,R)}v=JEt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&VEt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)QCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};CB.default=QCe});var TCe=_((WKt,RCe)=>{"use strict";RCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var LCe=_((KKt,$6)=>{"use strict";var zEt=TCe(),NCe=t=>typeof t=="string"?t.replace(zEt(),""):t;$6.exports=NCe;$6.exports.default=NCe});var UCe=_((VKt,MCe)=>{"use strict";var OCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";MCe.exports=t=>t&&t.exact?new RegExp(`^${OCe}$`):new RegExp(OCe,"g")});var HCe=_((JKt,eq)=>{"use strict";var XEt=LCe(),ZEt=UCe(),_Ce=t=>XEt(t).replace(ZEt()," ").length;eq.exports=_Ce;eq.exports.default=_Ce});var GCe=_(wB=>{"use strict";var jCe=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var qCe=jCe(U6()),$Et=jCe(HCe()),tq=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};wB.default=tq});var KCe=_(IB=>{"use strict";var rq=IB&&IB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(IB,"__esModule",{value:!0});var eCt=rq(am()),YCe=rq(FCe()),WCe=rq(GCe());IB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,eCt.default.DIRECTION_LTR);let o=new WCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});YCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new WCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),YCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var XCe=_((ZKt,zCe)=>{"use strict";var VCe=ve("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nq={},tCt=t=>{let e=new VCe.PassThrough,r=new VCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nq[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nq[a];nq={}}};zCe.exports=tCt});var sq=_(iq=>{"use strict";Object.defineProperty(iq,"__esModule",{value:!0});iq.default=new WeakMap});var aq=_(oq=>{"use strict";Object.defineProperty(oq,"__esModule",{value:!0});var rCt=on(),ZCe=rCt.createContext({exit:()=>{}});ZCe.displayName="InternalAppContext";oq.default=ZCe});var cq=_(lq=>{"use strict";Object.defineProperty(lq,"__esModule",{value:!0});var nCt=on(),$Ce=nCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});$Ce.displayName="InternalStdinContext";lq.default=$Ce});var Aq=_(uq=>{"use strict";Object.defineProperty(uq,"__esModule",{value:!0});var iCt=on(),ewe=iCt.createContext({stdout:void 0,write:()=>{}});ewe.displayName="InternalStdoutContext";uq.default=ewe});var pq=_(fq=>{"use strict";Object.defineProperty(fq,"__esModule",{value:!0});var sCt=on(),twe=sCt.createContext({stderr:void 0,write:()=>{}});twe.displayName="InternalStderrContext";fq.default=twe});var iQ=_(hq=>{"use strict";Object.defineProperty(hq,"__esModule",{value:!0});var oCt=on(),rwe=oCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});rwe.displayName="InternalFocusContext";hq.default=rwe});var iwe=_((sVt,nwe)=>{"use strict";var aCt=/[|\\{}()[\]^$+*?.-]/g;nwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(aCt,"\\$&")}});var lwe=_((oVt,awe)=>{"use strict";var lCt=iwe(),cCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",owe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));owe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var BB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=BB.nodeInternals()),"cwd"in e||(e.cwd=cCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,uCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...owe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};swe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(ACt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",x=r[11]===")",C,R={};if(E&&(R.line=Number(E)),I&&(R.column=Number(I)),x&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(fCt);L&&(a=L[1],C=L[2])}return swe(R,h,this._cwd),o&&(R.constructor=!0),n&&(R.evalOrigin=n,R.evalLine=A,R.evalColumn=p,R.evalFile=u&&u.replace(/\\/g,"/")),v&&(R.native=!0),a&&(R.function=a),C&&a!==C&&(R.method=C),R}};function swe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function uCt(t){if(t.length===0)return[];let e=t.map(r=>lCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var ACt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),fCt=/^(.*?) \[as (.*?)\]$/;awe.exports=BB});var uwe=_((aVt,cwe)=>{"use strict";cwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var fwe=_((lVt,Awe)=>{"use strict";var pCt=uwe(),hCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};Awe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=pCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},hCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var sQ=_(ru=>{"use strict";var gCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),mCt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&gCt(e,t,r);return dCt(e,t),e},yCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=yCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return pwe.default.createElement("ink-box",{ref:e,style:a},r)});gq.displayName="Box";gq.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=gq});var yq=_(vB=>{"use strict";var dq=vB&&vB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(vB,"__esModule",{value:!0});var ECt=dq(on()),qC=dq(rQ()),hwe=dq(X6()),mq=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=qC.default.dim(I)),t&&(I=hwe.default(I,t,"foreground")),e&&(I=hwe.default(I,e,"background")),o&&(I=qC.default.bold(I)),a&&(I=qC.default.italic(I)),n&&(I=qC.default.underline(I)),u&&(I=qC.default.strikethrough(I)),A&&(I=qC.default.inverse(I)),I);return ECt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};mq.displayName="Text";mq.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};vB.default=mq});var ywe=_(nu=>{"use strict";var CCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},DB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var gwe=ICt(ve("fs")),fs=DB(on()),dwe=DB(lwe()),BCt=DB(fwe()),Zf=DB(sQ()),hA=DB(yq()),mwe=new dwe.default({cwd:process.cwd(),internals:dwe.default.nodeInternals()}),vCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?mwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&gwe.existsSync(r.file)){let n=gwe.readFileSync(r.file,"utf8");if(o=BCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Zf.default,{flexDirection:"column",padding:1},fs.default.createElement(Zf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Zf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Zf.default,{key:n},fs.default.createElement(Zf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=mwe.parseLine(n);return u?fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=vCt});var Cwe=_(iu=>{"use strict";var DCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),SCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),PCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return SCt(e,t),e},um=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var cm=PCt(on()),Ewe=um(g6()),bCt=um(aq()),xCt=um(cq()),kCt=um(Aq()),QCt=um(pq()),FCt=um(iQ()),RCt=um(ywe()),TCt=" ",NCt="\x1B[Z",LCt="\x1B",oQ=class extends cm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===LCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===TCt&&this.focusNext(),e===NCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return cm.default.createElement(bCt.default.Provider,{value:{exit:this.handleExit}},cm.default.createElement(xCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},cm.default.createElement(kCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},cm.default.createElement(QCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},cm.default.createElement(FCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?cm.default.createElement(RCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Ewe.default.hide(this.props.stdout)}componentWillUnmount(){Ewe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=oQ;oQ.displayName="InternalApp"});var Bwe=_(su=>{"use strict";var OCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),MCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),UCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&OCt(e,t,r);return MCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var _Ct=ou(on()),wwe=lM(),HCt=ou(lEe()),qCt=ou(u6()),jCt=ou(hEe()),GCt=ou(dEe()),Eq=ou(cCe()),YCt=ou(KCe()),WCt=ou(h6()),KCt=ou(XCe()),VCt=UCt(G6()),JCt=ou(sq()),zCt=ou(Cwe()),jC=process.env.CI==="false"?!1:jCt.default,Iwe=()=>{},Cq=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=YCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(qCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},GCt.default(this),this.options=e,this.rootNode=VCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:wwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=HCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:wwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Eq.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=_Ct.default.createElement(zCt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);Eq.default.updateContainer(r,this.container,null,Iwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,Eq.default.updateContainer(null,this.container,null,Iwe),JCt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=KCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Cq});var Dwe=_(SB=>{"use strict";var vwe=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var XCt=vwe(Bwe()),aQ=vwe(sq()),ZCt=ve("stream"),$Ct=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},ewt(e)),o=twt(r.stdout,()=>new XCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>aQ.default.delete(r.stdout),clear:o.clear}};SB.default=$Ct;var ewt=(t={})=>t instanceof ZCt.Stream?{stdout:t,stdin:process.stdin}:t,twt=(t,e)=>{let r;return aQ.default.has(t)?r=aQ.default.get(t):(r=e(),aQ.default.set(t,r)),r}});var Pwe=_($f=>{"use strict";var rwt=$f&&$f.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nwt=$f&&$f.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),iwt=$f&&$f.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&rwt(e,t,r);return nwt(e,t),e};Object.defineProperty($f,"__esModule",{value:!0});var PB=iwt(on()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";$f.default=Swe});var xwe=_(bB=>{"use strict";var swt=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var owt=swt(on()),bwe=({children:t,transform:e})=>t==null?null:owt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);bwe.displayName="Transform";bB.default=bwe});var Qwe=_(xB=>{"use strict";var awt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var lwt=awt(on()),kwe=({count:t=1})=>lwt.default.createElement("ink-text",null,` +`.repeat(t));kwe.displayName="Newline";xB.default=kwe});var Twe=_(kB=>{"use strict";var Fwe=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var cwt=Fwe(on()),uwt=Fwe(sQ()),Rwe=()=>cwt.default.createElement(uwt.default,{flexGrow:1});Rwe.displayName="Spacer";kB.default=Rwe});var lQ=_(QB=>{"use strict";var Awt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var fwt=on(),pwt=Awt(cq()),hwt=()=>fwt.useContext(pwt.default);QB.default=hwt});var Lwe=_(FB=>{"use strict";var gwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Nwe=on(),dwt=gwt(lQ()),mwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=dwt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};FB.default=mwt});var Owe=_(RB=>{"use strict";var ywt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Ewt=on(),Cwt=ywt(aq()),wwt=()=>Ewt.useContext(Cwt.default);RB.default=wwt});var Mwe=_(TB=>{"use strict";var Iwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var Bwt=on(),vwt=Iwt(Aq()),Dwt=()=>Bwt.useContext(vwt.default);TB.default=Dwt});var Uwe=_(NB=>{"use strict";var Swt=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var Pwt=on(),bwt=Swt(pq()),xwt=()=>Pwt.useContext(bwt.default);NB.default=xwt});var Hwe=_(OB=>{"use strict";var _we=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var LB=on(),kwt=_we(iQ()),Qwt=_we(lQ()),Fwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Qwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=LB.useContext(kwt.default),h=LB.useMemo(()=>Math.random().toString().slice(2,7),[]);return LB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),LB.useEffect(()=>{t?A(h):p(h)},[t,h]),LB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};OB.default=Fwt});var qwe=_(MB=>{"use strict";var Rwt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Twt=on(),Nwt=Rwt(iQ()),Lwt=()=>{let t=Twt.useContext(Nwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Lwt});var jwe=_(wq=>{"use strict";Object.defineProperty(wq,"__esModule",{value:!0});wq.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var Owt=Dwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return Owt.default}});var Mwt=sQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return Mwt.default}});var Uwt=yq();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Uwt.default}});var _wt=Pwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return _wt.default}});var Hwt=xwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Hwt.default}});var qwt=Qwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return qwt.default}});var jwt=Twe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return jwt.default}});var Gwt=Lwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=Owe();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=lQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Kwt.default}});var Vwt=Uwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return Vwt.default}});var Jwt=Hwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return Jwt.default}});var zwt=qwe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return zwt.default}});var Xwt=jwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return Xwt.default}})});var Bq={};Vt(Bq,{Gem:()=>Iq});var Gwe,Am,Iq,cQ=Et(()=>{Gwe=$e(ic()),Am=$e(on()),Iq=(0,Am.memo)(({active:t})=>{let e=(0,Am.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Am.useMemo)(()=>t?"green":"yellow",[t]);return Am.default.createElement(Gwe.Text,{color:r},e)})});var Wwe={};Vt(Wwe,{useKeypress:()=>fm});function fm({active:t},e,r){let{stdin:o}=(0,Ywe.useStdin)(),a=(0,uQ.useCallback)((n,u)=>e(n,u),r);(0,uQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Ywe,uQ,UB=Et(()=>{Ywe=$e(ic()),uQ=$e(on())});var Vwe={};Vt(Vwe,{FocusRequest:()=>Kwe,useFocusRequest:()=>vq});var Kwe,vq,Dq=Et(()=>{UB();Kwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(Kwe||{}),vq=function({active:t},e,r){fm({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};Vt(Jwe,{useListInput:()=>_B});var _B,AQ=Et(()=>{UB();_B=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){fm({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var fQ={};Vt(fQ,{ScrollableItems:()=>Zwt});var C0,La,Zwt,pQ=Et(()=>{C0=$e(ic()),La=$e(on());Dq();AQ();Zwt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vq({active:t&&!!n},L=>{n?.(L)},[n]),_B(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let x=v-r,C=v+r;C>p.length&&(x-=C-p.length,C=p.length),x<0&&(C+=-x,x=0),C>=p.length&&(C=p.length-1);let R=[];for(let L=x;L<=C;++L){let U=p[L],J=t&&U===E;R.push(La.default.createElement(C0.Box,{key:U,height:o},La.default.createElement(C0.Box,{marginLeft:1,marginRight:1},La.default.createElement(C0.Text,null,J?La.default.createElement(C0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(C0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(C0.Box,{flexDirection:"column",width:"100%"},R)}});var zwe,ep,Xwe,Sq,Zwe,Pq=Et(()=>{zwe=$e(ic()),ep=$e(on()),Xwe=ve("readline"),Sq=ep.default.createContext(null),Zwe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,zwe.useStdin)();(0,ep.useEffect)(()=>{r&&r(!0),e&&(0,Xwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,ep.useState)(new Map),n=(0,ep.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return ep.default.createElement(Sq.Provider,{value:n,children:t})}});var bq={};Vt(bq,{useMinistore:()=>$wt});function $wt(t,e){let r=(0,hQ.useContext)(Sq);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,hQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var hQ,xq=Et(()=>{hQ=$e(on());Pq()});var dQ={};Vt(dQ,{renderForm:()=>eIt});async function eIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,gQ.useApp)();fm({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,gQ.render)(kq.default.createElement(Zwe,null,kq.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var gQ,kq,mQ=Et(()=>{gQ=$e(ic()),kq=$e(on());Pq();UB()});var rIe=_(HB=>{"use strict";Object.defineProperty(HB,"__esModule",{value:!0});HB.UncontrolledTextInput=void 0;var eIe=on(),Qq=on(),$we=ic(),pm=rQ(),tIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Qq.useState({cursorOffset:(t||"").length,cursorWidth:0});Qq.useEffect(()=>{E(R=>{if(!r||!n)return R;let L=t||"";return R.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:R})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,x=v,C=e?pm.grey(e):void 0;if(n&&r){C=e.length>0?pm.inverse(e[0])+pm.grey(e.slice(1)):pm.inverse(" "),x=v.length>0?"":pm.inverse(" ");let R=0;for(let L of v)R>=p-I&&R<=p?x+=pm.inverse(L):x+=L,R++;v.length>0&&p===v.length&&(x+=pm.inverse(" "))}return $we.useInput((R,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&R==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+R+t.slice(p,t.length),U+=R.length,R.length>1&&(te=R.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),eIe.createElement($we.Text,null,e?v.length>0?x:C:x)};HB.default=tIe;HB.UncontrolledTextInput=t=>{let[e,r]=Qq.useState("");return eIe.createElement(tIe,Object.assign({},t,{value:e,onChange:r}))}});var sIe={};Vt(sIe,{Pad:()=>Fq});var nIe,iIe,Fq,Rq=Et(()=>{nIe=$e(ic()),iIe=$e(on()),Fq=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return iIe.default.createElement(nIe.Text,{dimColor:!e},r)}});var oIe={};Vt(oIe,{ItemOptions:()=>tIt});var jB,I0,tIt,aIe=Et(()=>{jB=$e(ic()),I0=$e(on());AQ();cQ();Rq();tIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return _B(o,u,{active:t,minus:"left",plus:"right",set:a}),I0.default.createElement(I0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),x=Math.max(0,I-v.length-2);return p?I0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},I0.default.createElement(jB.Text,{wrap:"truncate"},I0.default.createElement(Iq,{active:E})," ",p),e?I0.default.createElement(Fq,{active:t,length:x}):null):I0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var BIe=_((zJt,IIe)=>{var qq;IIe.exports=()=>(typeof qq>"u"&&(qq=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qq)});var GIe=_((wzt,jIe)=>{var Xq=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function sv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,x=[])=>(x.push(E(I,v,x[x.length-1])),x),h=E===Boolean||E[Xq]===!0}else if(typeof p=="function")h=p===Boolean||p[Xq]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=x===R?"":` (alias for ${R})`;throw new Oa(`option requires argument: ${x}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[R]=L(e[A+1],R,a[R]),++A}else a[R]=L(C,R,a[R])}}else a._.push(h)}return a}sv.flag=t=>(t[Xq]=!0,t);sv.COUNT=sv.flag((t,e,r)=>(r||0)+1);sv.ArgError=Oa;jIe.exports=sv});var ZIe=_((Jzt,XIe)=>{var tj;XIe.exports=()=>(typeof tj>"u"&&(tj=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),tj)});var n1e=_((aj,lj)=>{(function(t){aj&&typeof aj=="object"&&typeof lj<"u"?lj.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var a1e=_((KXt,o1e)=>{"use strict";cj.ifExists=ZIt;var YC=ve("util"),sc=ve("path"),i1e=n1e(),JIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,zIt={createPwshFile:!0,createCmdFile:i1e(),fs:ve("fs")},XIt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function s1e(t){let e={...zIt,...t},r=e.fs;return e.fs_={chmod:r.chmod?YC.promisify(r.chmod):async()=>{},mkdir:YC.promisify(r.mkdir),readFile:YC.promisify(r.readFile),stat:YC.promisify(r.stat),unlink:YC.promisify(r.unlink),writeFile:YC.promisify(r.writeFile)},e}async function cj(t,e,r){let o=s1e(r);await o.fs_.stat(t),await e1t(t,e,o)}function ZIt(t,e,r){return cj(t,e,r).catch(()=>{})}function $It(t,e){return e.fs_.unlink(t).catch(()=>{})}async function e1t(t,e,r){let o=await s1t(t,r);return await t1t(e,r),r1t(t,e,o,r)}function t1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function r1t(t,e,r,o){let a=s1e(o),n=[{generator:l1t,extension:""}];return a.createCmdFile&&n.push({generator:a1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:c1t,extension:".ps1"}),Promise.all(n.map(u=>o1t(t,e+u.extension,r,u.generator,a)))}function n1t(t,e){return $It(t,e)}function i1t(t,e){return u1t(t,e)}async function s1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(JIt);if(!a){let n=sc.extname(t).toLowerCase();return{program:XIt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function o1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await n1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),i1t(e,a)}function a1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=uj(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +`:"";return u?I+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:I+=`@${A} ${p} ${a} ${E}%*\r +`,I}function l1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=uj(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,I=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${I}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${I}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function c1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=uj(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",x=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(x+=` else { + $env:NODE_PATH="${I}" +}`),u?x+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${v}$args + } else { + & ${u} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args + } else { + & ${n} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:x+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args +} else { + & ${n} ${p} ${o} ${v}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,x}function u1t(t,e){return e.fs_.chmod(t,493)}function uj(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}o1e.exports=cj});var vj=_((h$t,b1e)=>{b1e.exports=ve("stream")});var F1e=_((g$t,Q1e)=>{"use strict";function x1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function O1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return xQ.alloc(0);for(var o=xQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)G1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=xQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:j1t,value:function(r,o){return Dj(this,O1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var Pj=_((d$t,T1e)=>{"use strict";function Y1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(Sj,this,t)):process.nextTick(Sj,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(kQ,r):(r._writableState.errorEmitted=!0,process.nextTick(R1e,r,n)):process.nextTick(R1e,r,n):e?(process.nextTick(kQ,r),e(n)):process.nextTick(kQ,r)}),this)}function R1e(t,e){Sj(t,e),kQ(t)}function kQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function W1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function Sj(t,e){t.emit("error",e)}function K1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}T1e.exports={destroy:Y1t,undestroy:W1t,errorOrDestroy:K1t}});var Q0=_((m$t,O1e)=>{"use strict";var L1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,L1e[t]=a}function N1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function V1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function J1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&V1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(J1t(t," argument"))a=`The ${t} ${o} ${N1e(e,"type")}`;else{let n=z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${N1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");O1e.exports.codes=L1e});var bj=_((y$t,M1e)=>{"use strict";var X1t=Q0().codes.ERR_INVALID_OPT_VALUE;function Z1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function $1t(t,e,r,o){var a=Z1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new X1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}M1e.exports={getHighWaterMark:$1t}});var U1e=_((E$t,xj)=>{typeof Object.create=="function"?xj.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:xj.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var F0=_((C$t,Qj)=>{try{if(kj=ve("util"),typeof kj.inherits!="function")throw"";Qj.exports=kj.inherits}catch{Qj.exports=U1e()}var kj});var H1e=_((w$t,_1e)=>{_1e.exports=ve("util").deprecate});var Tj=_((I$t,K1e)=>{"use strict";K1e.exports=Ri;function j1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){S2t(e,t)}}var zC;Ri.WritableState=mv;var e2t={deprecate:H1e()},G1e=vj(),FQ=ve("buffer").Buffer,t2t=global.Uint8Array||function(){};function r2t(t){return FQ.from(t)}function n2t(t){return FQ.isBuffer(t)||t instanceof t2t}var Rj=Pj(),i2t=bj(),s2t=i2t.getHighWaterMark,R0=Q0().codes,o2t=R0.ERR_INVALID_ARG_TYPE,a2t=R0.ERR_METHOD_NOT_IMPLEMENTED,l2t=R0.ERR_MULTIPLE_CALLBACK,c2t=R0.ERR_STREAM_CANNOT_PIPE,u2t=R0.ERR_STREAM_DESTROYED,A2t=R0.ERR_STREAM_NULL_VALUES,f2t=R0.ERR_STREAM_WRITE_AFTER_END,p2t=R0.ERR_UNKNOWN_ENCODING,XC=Rj.errorOrDestroy;F0()(Ri,G1e);function h2t(){}function mv(t,e,r){zC=zC||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof zC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=s2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){w2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new j1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:e2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var QQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(QQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ri,Symbol.hasInstance,{value:function(e){return QQ.call(this,e)?!0:this!==Ri?!1:e&&e._writableState instanceof mv}})):QQ=function(e){return e instanceof this};function Ri(t){zC=zC||Cm();var e=this instanceof zC;if(!e&&!QQ.call(Ri,this))return new Ri(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),G1e.call(this)}Ri.prototype.pipe=function(){XC(this,new c2t)};function g2t(t,e){var r=new f2t;XC(t,r),process.nextTick(e,r)}function d2t(t,e,r,o){var a;return r===null?a=new A2t:typeof r!="string"&&!e.objectMode&&(a=new o2t("chunk",["string","Buffer"],r)),a?(XC(t,a),process.nextTick(o,a),!1):!0}Ri.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&n2t(t);return n&&!FQ.isBuffer(t)&&(t=r2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=h2t),o.ending?g2t(this,r):(n||d2t(this,o,t,r))&&(o.pendingcb++,a=y2t(this,o,n,t,e,r)),a};Ri.prototype.cork=function(){this._writableState.corked++};Ri.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&Y1e(this,t))};Ri.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new p2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ri.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function m2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Ri.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function y2t(t,e,r,o,a,n){if(!r){var u=m2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var P2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};J1e.exports=EA;var V1e=Oj(),Lj=Tj();F0()(EA,V1e);for(Nj=P2t(Lj.prototype),RQ=0;RQ{var NQ=ve("buffer"),ip=NQ.Buffer;function z1e(t,e){for(var r in t)e[r]=t[r]}ip.from&&ip.alloc&&ip.allocUnsafe&&ip.allocUnsafeSlow?X1e.exports=NQ:(z1e(NQ,Mj),Mj.Buffer=ZC);function ZC(t,e,r){return ip(t,e,r)}z1e(ip,ZC);ZC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return ip(t,e,r)};ZC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=ip(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};ZC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return ip(t)};ZC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return NQ.SlowBuffer(t)}});var Hj=_(e2e=>{"use strict";var _j=Z1e().Buffer,$1e=_j.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function k2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function Q2t(t){var e=k2t(t);if(typeof e!="string"&&(_j.isEncoding===$1e||!$1e(t)))throw new Error("Unknown encoding: "+t);return e||t}e2e.StringDecoder=yv;function yv(t){this.encoding=Q2t(t);var e;switch(this.encoding){case"utf16le":this.text=O2t,this.end=M2t,e=4;break;case"utf8":this.fillLast=T2t,e=4;break;case"base64":this.text=U2t,this.end=_2t,e=3;break;default:this.write=H2t,this.end=q2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=_j.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function F2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function R2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function T2t(t){var e=this.lastTotal-this.lastNeed,r=R2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function N2t(t,e){var r=F2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function L2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function O2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function M2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function U2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function _2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function H2t(t){return t.toString(this.encoding)}function q2t(t){return t&&t.length?this.write(t):""}});var LQ=_((D$t,n2e)=>{"use strict";var t2e=Q0().codes.ERR_STREAM_PREMATURE_CLOSE;function j2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var OQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var W2t=LQ(),N0=Symbol("lastResolve"),wm=Symbol("lastReject"),Ev=Symbol("error"),MQ=Symbol("ended"),Im=Symbol("lastPromise"),qj=Symbol("handlePromise"),Bm=Symbol("stream");function L0(t,e){return{value:t,done:e}}function K2t(t){var e=t[N0];if(e!==null){var r=t[Bm].read();r!==null&&(t[Im]=null,t[N0]=null,t[wm]=null,e(L0(r,!1)))}}function V2t(t){process.nextTick(K2t,t)}function J2t(t,e){return function(r,o){t.then(function(){if(e[MQ]){r(L0(void 0,!0));return}e[qj](r,o)},o)}}var z2t=Object.getPrototypeOf(function(){}),X2t=Object.setPrototypeOf((OQ={get stream(){return this[Bm]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[MQ])return Promise.resolve(L0(void 0,!0));if(this[Bm].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(L0(void 0,!0))})});var o=this[Im],a;if(o)a=new Promise(J2t(o,this));else{var n=this[Bm].read();if(n!==null)return Promise.resolve(L0(n,!1));a=new Promise(this[qj])}return this[Im]=a,a}},T0(OQ,Symbol.asyncIterator,function(){return this}),T0(OQ,"return",function(){var e=this;return new Promise(function(r,o){e[Bm].destroy(null,function(a){if(a){o(a);return}r(L0(void 0,!0))})})}),OQ),z2t),Z2t=function(e){var r,o=Object.create(X2t,(r={},T0(r,Bm,{value:e,writable:!0}),T0(r,N0,{value:null,writable:!0}),T0(r,wm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,MQ,{value:e._readableState.endEmitted,writable:!0}),T0(r,qj,{value:function(n,u){var A=o[Bm].read();A?(o[Im]=null,o[N0]=null,o[wm]=null,n(L0(A,!1))):(o[N0]=n,o[wm]=u)},writable:!0}),r));return o[Im]=null,W2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[wm];n!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,n(a)),o[Ev]=a;return}var u=o[N0];u!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,u(L0(void 0,!0))),o[MQ]=!0}),e.on("readable",V2t.bind(null,o)),o};i2e.exports=Z2t});var c2e=_((P$t,l2e)=>{"use strict";function o2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function $2t(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){o2e(n,o,a,u,A,"next",p)}function A(p){o2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function a2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function eBt(t){for(var e=1;e{"use strict";E2e.exports=mn;var $C;mn.ReadableState=p2e;var b$t=ve("events").EventEmitter,f2e=function(e,r){return e.listeners(r).length},wv=vj(),UQ=ve("buffer").Buffer,iBt=global.Uint8Array||function(){};function sBt(t){return UQ.from(t)}function oBt(t){return UQ.isBuffer(t)||t instanceof iBt}var jj=ve("util"),en;jj&&jj.debuglog?en=jj.debuglog("stream"):en=function(){};var aBt=F1e(),zj=Pj(),lBt=bj(),cBt=lBt.getHighWaterMark,_Q=Q0().codes,uBt=_Q.ERR_INVALID_ARG_TYPE,ABt=_Q.ERR_STREAM_PUSH_AFTER_EOF,fBt=_Q.ERR_METHOD_NOT_IMPLEMENTED,pBt=_Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,ew,Gj,Yj;F0()(mn,wv);var Cv=zj.errorOrDestroy,Wj=["error","close","destroy","pause","resume"];function hBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function p2e(t,e,r){$C=$C||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof $C),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=cBt(this,t,"readableHighWaterMark",r),this.buffer=new aBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(ew||(ew=Hj().StringDecoder),this.decoder=new ew(t.encoding),this.encoding=t.encoding)}function mn(t){if($C=$C||Cm(),!(this instanceof mn))return new mn(t);var e=this instanceof $C;this._readableState=new p2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=zj.destroy;mn.prototype._undestroy=zj.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=UQ.from(t,e),e=""),o=!0),h2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return h2e(this,t,null,!0,!1)};function h2e(t,e,r,o,a){en("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,mBt(t,n);else{var u;if(a||(u=gBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==UQ.prototype&&(e=sBt(e)),o)n.endEmitted?Cv(t,new pBt):Kj(t,n,e,!0);else if(n.ended)Cv(t,new ABt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?Kj(t,n,e,!1):Jj(t,n)):Kj(t,n,e,!1)}else o||(n.reading=!1,Jj(t,n))}return!n.ended&&(n.length=u2e?t=u2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function A2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=dBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){en("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return en("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Vj(this):HQ(this),null;if(t=A2e(t,e),t===0&&e.ended)return e.length===0&&Vj(this),null;var o=e.needReadable;en("need readable",o),(e.length===0||e.length-t0?a=m2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Vj(this)),a!==null&&this.emit("data",a),a};function mBt(t,e){if(en("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?HQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,g2e(t)))}}function HQ(t){var e=t._readableState;en("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(en("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(g2e,t))}function g2e(t){var e=t._readableState;en("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,Xj(t)}function Jj(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(yBt,t,e))}function yBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&y2e(o.pipes,t)!==-1)&&!h&&(en("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){en("onerror",L),R(),t.removeListener("error",v),f2e(t,"error")===0&&Cv(t,L)}hBt(t,"error",v);function x(){t.removeListener("finish",C),R()}t.once("close",x);function C(){en("onfinish"),t.removeListener("close",x),R()}t.once("finish",C);function R(){en("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(en("pipe resume"),r.resume()),t};function EBt(t){return function(){var r=t._readableState;en("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&f2e(t,"data")&&(r.flowing=!0,Xj(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,en("on readable",o.length,o.reading),o.length?HQ(this):o.reading||process.nextTick(CBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(d2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(d2e,this),e};function d2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function CBt(t){en("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||(en("resume"),t.flowing=!t.readableListening,wBt(this,t)),t.paused=!1,this};function wBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(IBt,t,e))}function IBt(t,e){en("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),Xj(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return en("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(en("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function Xj(t){var e=t._readableState;for(en("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(en("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(en("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Vj(t){var e=t._readableState;en("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(BBt,e,t))}function BBt(t,e){if(en("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Yj===void 0&&(Yj=c2e()),Yj(mn,t,e)});function y2e(t,e){for(var r=0,o=t.length;r{"use strict";w2e.exports=sp;var qQ=Q0().codes,vBt=qQ.ERR_METHOD_NOT_IMPLEMENTED,DBt=qQ.ERR_MULTIPLE_CALLBACK,SBt=qQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,PBt=qQ.ERR_TRANSFORM_WITH_LENGTH_0,jQ=Cm();F0()(sp,jQ);function bBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new DBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";B2e.exports=Iv;var I2e=Zj();F0()(Iv,I2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);I2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var x2e=_((F$t,b2e)=>{"use strict";var $j;function kBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var P2e=Q0().codes,QBt=P2e.ERR_MISSING_ARGS,FBt=P2e.ERR_STREAM_DESTROYED;function D2e(t){if(t)throw t}function RBt(t){return t.setHeader&&typeof t.abort=="function"}function TBt(t,e,r,o){o=kBt(o);var a=!1;t.on("close",function(){a=!0}),$j===void 0&&($j=LQ()),$j(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,RBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new FBt("pipe"))}}}function S2e(t){t()}function NBt(t,e){return t.pipe(e)}function LBt(t){return!t.length||typeof t[t.length-1]!="function"?D2e:t.pop()}function OBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return TBt(u,p,h,function(E){a||(a=E),E&&n.forEach(S2e),!p&&(n.forEach(S2e),o(a))})});return e.reduce(NBt)}b2e.exports=OBt});var tw=_((lc,vv)=>{var Bv=ve("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=Oj(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Tj(),lc.Duplex=Cm(),lc.Transform=Zj(),lc.PassThrough=v2e(),lc.finished=LQ(),lc.pipeline=x2e())});var F2e=_((R$t,Q2e)=>{"use strict";var{Buffer:lu}=ve("buffer"),k2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,k2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var eG=tw().Duplex,MBt=F0(),Dv=F2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),eG.call(this)}MBt(Uo,eG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){eG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;GQ.exports=Uo;GQ.exports.BufferListStream=Uo;GQ.exports.BufferList=Dv});var nG=_(nw=>{var UBt=Buffer.alloc,_Bt="0000000000000000000",HBt="7777777777777777777",T2e="0".charCodeAt(0),N2e=Buffer.from("ustar\0","binary"),qBt=Buffer.from("00","binary"),jBt=Buffer.from("ustar ","binary"),GBt=Buffer.from(" \0","binary"),YBt=parseInt("7777",8),Sv=257,rG=263,WBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},KBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},VBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},L2e=function(t,e,r,o){for(;re?HBt.slice(0,e)+" ":_Bt.slice(0,e-t.length)+t+" "};function JBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};nw.decodeLongPath=function(t,e){return rw(t,0,t.length,e)};nw.encodePax=function(t){var e="";t.name&&(e+=tG(" path="+t.name+` +`)),t.linkname&&(e+=tG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=tG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};nw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(O0(t.mode&YBt,6),100),e.write(O0(t.uid,6),108),e.write(O0(t.gid,6),116),e.write(O0(t.size,11),124),e.write(O0(t.mtime.getTime()/1e3|0,11),136),e[156]=T2e+VBt(t.type),t.linkname&&e.write(t.linkname,157),N2e.copy(e,Sv),qBt.copy(e,rG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(O0(t.devmajor||0,6),329),e.write(O0(t.devminor||0,6),337),o&&e.write(o,345),e.write(O0(O2e(e),6),148),e)};nw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-T2e,a=rw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=KBt(o),I=t[157]===0?null:rw(t,157,100,e),v=rw(t,265,32),x=rw(t,297,32),C=M0(t,329,8),R=M0(t,337,8),L=O2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(N2e.compare(t,Sv,Sv+6)===0)t[345]&&(a=rw(t,345,155,e)+"/"+a);else if(!(jBt.compare(t,Sv,Sv+6)===0&&GBt.compare(t,rG,rG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:x,devmajor:C,devminor:R}}});var G2e=_((L$t,j2e)=>{var U2e=ve("util"),zBt=R2e(),Pv=nG(),_2e=tw().Writable,H2e=tw().PassThrough,q2e=function(){},M2e=function(t){return t&=511,t&&512-t},XBt=function(t,e){var r=new YQ(t,e);return r.end(),r},ZBt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},YQ=function(t,e){this._parent=t,this.offset=e,H2e.call(this,{autoDestroy:!1})};U2e.inherits(YQ,H2e);YQ.prototype.destroy=function(t){this._parent.destroy(t)};var op=function(t){if(!(this instanceof op))return new op(t);_2e.call(this,t),t=t||{},this._offset=0,this._buffer=zBt(),this._missing=0,this._partial=!1,this._onparse=q2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=M2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(M2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Pv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Pv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,x;try{x=e._header=Pv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!x){e._parse(512,I),o();return}if(x.type==="gnu-long-path"){e._parse(x.size,h),o();return}if(x.type==="gnu-long-link-path"){e._parse(x.size,E),o();return}if(x.type==="pax-global-header"){e._parse(x.size,A),o();return}if(x.type==="pax-header"){e._parse(x.size,p),o();return}if(e._gnuLongPath&&(x.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(x.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=x=ZBt(x,e._pax),e._pax=null),e._locked=!0,!x.size||x.type==="directory"){e._parse(512,I),e.emit("entry",x,XBt(e,v),a);return}e._stream=new YQ(e,v),e.emit("entry",x,e._stream,a),e._parse(x.size,n),o()};this._onheader=I,this._parse(512,I)};U2e.inherits(op,_2e);op.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};op.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};op.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=q2e,this._overflow?this._write(this._overflow,void 0,t):t()}};op.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};op.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};j2e.exports=op});var W2e=_((O$t,Y2e)=>{Y2e.exports=ve("fs").constants||ve("constants")});var X2e=_((M$t,z2e)=>{var iw=W2e(),K2e=LM(),KQ=F0(),$Bt=Buffer.alloc,V2e=tw().Readable,sw=tw().Writable,evt=ve("string_decoder").StringDecoder,WQ=nG(),tvt=parseInt("755",8),rvt=parseInt("644",8),J2e=$Bt(1024),sG=function(){},iG=function(t,e){e&=511,e&&t.push(J2e.slice(0,512-e))};function nvt(t){switch(t&iw.S_IFMT){case iw.S_IFBLK:return"block-device";case iw.S_IFCHR:return"character-device";case iw.S_IFDIR:return"directory";case iw.S_IFIFO:return"fifo";case iw.S_IFLNK:return"symlink"}return"file"}var VQ=function(t){sw.call(this),this.written=0,this._to=t,this._destroyed=!1};KQ(VQ,sw);VQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var JQ=function(){sw.call(this),this.linkname="",this._decoder=new evt("utf-8"),this._destroyed=!1};KQ(JQ,sw);JQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};JQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var bv=function(){sw.call(this),this._destroyed=!1};KQ(bv,sw);bv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};bv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var CA=function(t){if(!(this instanceof CA))return new CA(t);V2e.call(this,t),this._drain=sG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};KQ(CA,V2e);CA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=sG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=nvt(t.mode)),t.mode||(t.mode=t.type==="directory"?tvt:rvt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return iG(o,t.size),a?process.nextTick(r):this._drain=r,new bv}if(t.type==="symlink"&&!t.linkname){var n=new JQ;return K2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new bv;var u=new VQ(this);return this._stream=u,K2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));iG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};CA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(J2e),this.push(null))};CA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};CA.prototype._encode=function(t){if(!t.pax){var e=WQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};CA.prototype._encodePax=function(t){var e=WQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(WQ.encode(r)),this.push(e),iG(this,e.length),r.size=t.size,r.type=t.type,this.push(WQ.encode(r))};CA.prototype._read=function(t){var e=this._drain;this._drain=sG,e()};z2e.exports=CA});var Z2e=_(oG=>{oG.extract=G2e();oG.pack=X2e()});var uBe=_((ier,cBe)=>{"use strict";var vm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=aBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return fG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):yvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new vm(this.__specs,this.__opts,aBe(this.__providers).concat(e)),lBe)}};try{let t=ve("util");vm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function dvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function fG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))dvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=oBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=oBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function oBe(t,e){let r;return e.__isFiggyPudding?r=fG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var lBe={has(t,e){return e in t.__specs&&fG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in vm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};cBe.exports=mvt;function mvt(t,e){function r(...o){return new Proxy(new vm(t,e,o),lBe)}return r}function aBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function yvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var pBe=_((ser,BA)=>{"use strict";var kv=ve("crypto"),Evt=uBe(),Cvt=ve("stream").Transform,ABe=["sha256","sha384","sha512"],wvt=/^[a-z0-9+/]+(?:=?=?)$/i,Ivt=/^([^-]+)-([^?]+)([?\S*]*)$/,Bvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,vvt=/^[\x21-\x7E]+$/,ia=Evt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Fvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),_0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Bvt:Ivt);if(!a||o&&!ABe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(ABe.some(o=>o===this.algorithm)&&this.digest.match(wvt)&&(this.options||[]).every(o=>o.match(vvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Dm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>_0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:xv(e,r);return IA(`${this.toString(r)} ${o}`,r)}hexDigest(){return IA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=IA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};BA.exports.parse=IA;function IA(t,e){if(e=ia(e),typeof t=="string")return pG(t,e);if(t.algorithm&&t.digest){let r=new Dm;return r[t.algorithm]=[t],pG(xv(r,e),e)}else return pG(xv(t,e),e)}function pG(t,e){return e.single?new _0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new _0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new Dm)}BA.exports.stringify=xv;function xv(t,e){return e=ia(e),t.algorithm&&t.digest?_0.prototype.toString.call(t,e):typeof t=="string"?xv(IA(t,e),e):Dm.prototype.toString.call(t,e)}BA.exports.fromHex=Dvt;function Dvt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return IA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}BA.exports.fromData=Svt;function Svt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new _0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new Dm)}BA.exports.fromStream=Pvt;function Pvt(t,e){e=ia(e);let r=e.Promise||Promise,o=hG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}BA.exports.checkData=bvt;function bvt(t,e,r){if(r=ia(r),e=IA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=IA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}BA.exports.checkStream=xvt;function xvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=hG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}BA.exports.integrityStream=hG;function hG(t){t=ia(t);let e=t.integrity&&IA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Cvt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=IA(u.map((v,x)=>`${n[x]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}BA.exports.create=kvt;function kvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new _0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new Dm)}}}var Qvt=new Set(kv.getHashes()),fBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Qvt.has(t));function Fvt(t,e){return fBe.indexOf(t.toLowerCase())>=fBe.indexOf(e.toLowerCase())?t:e}});var qBe=_((lir,HBe)=>{var FDt=lL();function RDt(t){return FDt(t)?void 0:t}HBe.exports=RDt});var GBe=_((cir,jBe)=>{var TDt=Hb(),NDt=x8(),LDt=R8(),ODt=jd(),MDt=dd(),UDt=qBe(),_Dt=v_(),HDt=b8(),qDt=1,jDt=2,GDt=4,YDt=_Dt(function(t,e){var r={};if(t==null)return r;var o=!1;e=TDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),MDt(t,HDt(t),r),o&&(r=NDt(r,qDt|jDt|GDt,UDt));for(var a=e.length;a--;)LDt(r,e[a]);return r});jBe.exports=YDt});St();Ye();St();var JBe=ve("child_process"),zBe=$e(td());qt();var AC=new Map([]);var a2={};Vt(a2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>$pe,getDynamicLibs:()=>Zpe,getPluginConfiguration:()=>pC,openWorkspace:()=>fC,pluginCommands:()=>AC,runExit:()=>nk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();St();qt();var rr=class extends it{constructor(e,r){let o=V.relative(e,r),a=V.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();St();nA();Nl();k1();qt();var RAt=$e(zn());Za();var Zpe=()=>new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",RAt],["typanion",Vo]]);Ye();async function fC(t,e){let{project:r,workspace:o}=await Pt.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();St();nA();Nl();k1();qt();var eSt=$e(zn());Za();var $8={};Vt($8,{AddCommand:()=>kh,BinCommand:()=>Qh,CacheCleanCommand:()=>Fh,ClipanionCommand:()=>Kd,ConfigCommand:()=>Lh,ConfigGetCommand:()=>Rh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Nh,DedupeCommand:()=>Oh,EntryCommand:()=>mC,ExecCommand:()=>Mh,ExplainCommand:()=>Hh,ExplainPeerRequirementsCommand:()=>Uh,HelpCommand:()=>Vd,InfoCommand:()=>qh,LinkCommand:()=>Gh,NodeCommand:()=>Yh,PluginCheckCommand:()=>Wh,PluginImportCommand:()=>Jh,PluginImportSourcesCommand:()=>zh,PluginListCommand:()=>Kh,PluginRemoveCommand:()=>Xh,PluginRuntimeCommand:()=>Zh,RebuildCommand:()=>$h,RemoveCommand:()=>e0,RunCommand:()=>t0,RunIndexCommand:()=>Xd,SetResolutionCommand:()=>r0,SetVersionCommand:()=>_h,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>n0,UpCommand:()=>Jf,VersionCommand:()=>Jd,WhyCommand:()=>i0,WorkspaceCommand:()=>a0,WorkspacesListCommand:()=>o0,YarnCommand:()=>jh,dedupeUtils:()=>pk,default:()=>Sgt,suggestUtils:()=>zc});var kde=$e(td());Ye();Ye();Ye();qt();var _0e=$e(f2());Za();var zc={};Vt(zc,{Modifier:()=>B8,Strategy:()=>uk,Target:()=>p2,WorkspaceModifier:()=>N0e,applyModifier:()=>$ft,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>L0e,fetchDescriptorFrom:()=>D8,findProjectDescriptors:()=>U0e,getModifier:()=>h2,getSuggestedDescriptors:()=>g2,makeWorkspaceDescriptor:()=>M0e,toWorkspaceModifier:()=>O0e});Ye();Ye();St();var I8=$e(zn()),Xft="workspace:",p2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(p2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),uk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(uk||{});function h2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var Zft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function L0e(t,{project:e}){let r=t.match(Zft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function $ft(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function O0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function M0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${Xft}${O0e(e)}`)}async function U0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await ept(async o=>{V.isAbsolute(t)||(t=V.relative(r.cwd,V.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await D8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),x=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!x.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(x.name,t)})}async function g2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],x=[],C=async R=>{try{await R()}catch(L){x.push(L)}};for(let R of A){if(v.length>=p)break;switch(R){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await U0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=M0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await D8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:x.slice(0,p)}}async function D8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},x=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(x,{},v);if(C.length===0)return null;let R=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(R.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),I8.default.valid(te)){let ae=te;if(typeof u<"u")te=u+te;else if(n!==!1){let me=typeof n=="string"?n:A.range;te=L0e(me,{project:r})+te}let fe=W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(fe),{},v)).length!==1&&(te=ae)}return W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function ept(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=h2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let ae=tpt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(ae.map(async ce=>{let me=await g2(J,{project:o,workspace:a,cache:n,fixed:u,target:ce,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:me,target:ce}}))})).then(U=>U.flat()),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:ae}}of v)if(te.filter(ce=>ce.descriptor!==null).length===0){let[ce]=ae;if(typeof ce>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ce)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,ae=U.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,_0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=a.manifest[J].get(te.identHash);(typeof me>"u"||me.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof me>"u"?R.push([a,J,te,E]):L.push([a,J,me,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,R),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};kh.paths=[["add"]],kh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function tpt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var Qh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Qh.paths=[["bin"]],Qh.usage=nt.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();St();qt();var Fh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Fh.paths=[["cache","clean"],["cache","clear"]],Fh.usage=nt.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var q0e=$e(d2()),S8=ve("util"),Rh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=_e.convertMapsToIndexableObjects(u),p=a?(0,q0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();S8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,S8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Rh.paths=[["config","get"]],Rh.usage=nt.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Fge=$e(k8()),Rge=$e(d2()),Tge=$e(Q8()),F8=ve("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ke.updateHomeConfiguration(C):C=>Ke.updateConfiguration(o(),C))(C=>{if(n){let R=(0,Fge.default)(C);return(0,Tge.default)(R,this.name,A),R}else return{...C,[a]:A}});let E=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=_e.convertMapsToIndexableObjects(E),v=n?(0,Rge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{F8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,F8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Yge=$e(k8()),Wge=$e(Mge()),Kge=$e(T8()),Nh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Wge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Yge.default)(I):{...I};return(0,Kge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Nh.paths=[["config","unset"]],Nh.usage=nt.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();St();qt();var fk=ve("util"),Lh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await LE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),x=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),R={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(x[0]==="<"?de.Type.CODE:de.Type.PATH,x)}};h[I]={value:de.tuple(de.Type.CODE,I),children:R};let L=(U,J)=>{for(let[te,ae]of J)if(ae instanceof Map){let fe={};U[te]={children:fe},L(fe,ae)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(ae,p))}};C instanceof Map?L(R,C):R.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,fk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Lh.paths=[["config"]],Lh.usage=nt.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var pk={};Vt(pk,{Strategy:()=>m2,acceptedStrategies:()=>O0t,dedupe:()=>N8});Ye();Ye();var Vge=$e(Zo()),m2=(e=>(e.HIGHEST="highest",e))(m2||{}),O0t=new Set(Object.values(m2)),M0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);_e.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(_e.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?_e.mapAndFilter.skip:[p.descriptorHash,_e.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),x=Object.fromEntries(await _e.allSettledSafe(Object.entries(v).map(async([te,ae])=>{let fe=A.get(ae.descriptorHash);if(typeof fe>"u")throw new Error(`Assertion failed: The descriptor (${ae.descriptorHash}) should have been registered`);let ce=await fe.promise;if(!ce)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ce.updatedPackage]})));if(e.length&&!Vge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let R=[...C].map(te=>{let ae=t.originalPackages.get(te);if(typeof ae>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return ae}),L=await r.getSatisfying(p,x,R,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let x=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:x})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function N8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=M0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),x=Xs.progressViaCounter(v.length);await a.reportProgress(x);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:ae,updatedPackage:fe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,ae)} to ${W.prettyLocator(n,fe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(ae),updatedResolution:W.stringifyLocator(fe)}),t.storedResolutions.set(te.descriptorHash,fe.locatorHash)}).finally(()=>x.tick())));let R;switch(C){case 0:R="No packages";break;case 1:R="One package";break;default:R=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${R} can be deduped using the ${L} strategy`),C})}var Oh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Ks(m2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await N8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Oh.paths=[["dedupe"]],Oh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Kd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Kd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();St();qt();var mC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=V.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Jd=class extends ut{async execute(){this.context.stdout.write(`${rn||""} +`)}};Jd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Uh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:oS(Cy(),[oI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await _0t(this.hash,o,{stdout:this.context.stdout})}};Uh.paths=[["explain","peer-requirements"]],Uh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function _0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();St();qt();var zge=$e(zn()),_h=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(V.contains(p,A))return 0}let o=()=>{if(typeof rn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:rn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${V.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await H0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await nn.get(a.url,{configuration:r}))};await L8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};_h.paths=[["set","version"]],_h.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function H0t(t,e){let o=(await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function y2(t,e){let r=await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function L8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async ae=>{let fe=V.join(ae,"yarn.cjs");await oe.writeFilePromise(fe,te);let{stdout:ce}=await Ur.execvp(process.execPath,[ue.fromPortablePath(fe),"--version"],{cwd:ae,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ce.trim(),!zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=V.resolve(A,".yarn/releases"),h=V.resolve(p,`yarn-${e}.cjs`),E=V.relative(t.startingCwd,h),I=_e.isTaggedYarnVersion(e),v=t.get("yarnPath"),x=!I,C=x||!!v||!!a;if(a===!1){if(x)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(V.dirname(h)),await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:V.relative(A,h)})}else await oe.removePromise(V.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let R=await Ot.tryFind(A)||new Ot;R.packageManager=`yarn@${I?e:await y2(t,"stable")}`;let L={};R.exportTo(L);let U=V.join(A,Ot.fileName),J=`${JSON.stringify(L,null,R.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function Xge(t){return wr[AS(t)]}var q0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function j0t(t){let r=`https://repo.yarnpkg.com/${_e.isTaggedYarnVersion(rn)?rn:await y2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await nn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(q0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Xge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var Hh=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:aI(Cy(),[oI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Xge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await j0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:_e.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?_e.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Hh.paths=[["explain"]],Hh.usage=nt.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();St();qt();var Zge=$e(Zo()),qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(ae,{recursive:fe})=>{let ce=ae.anchoredLocator.locatorHash,me=new Map,he=[ce];for(;he.length>0;){let Be=he.shift();if(me.has(Be))continue;let we=o.storedPackages.get(Be);if(typeof we>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,we),W.isVirtualLocator(we)&&he.push(W.devirtualizeLocator(we).locatorHash),!(!fe&&Be!==ce))for(let g of we.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");he.push(Ee)}}return me.values()},p=({recursive:ae})=>{let fe=new Map;for(let ce of o.workspaces)for(let me of A(ce,{recursive:ae}))fe.set(me.locatorHash,me);return fe.values()},h=({all:ae,recursive:fe})=>ae&&fe?o.storedPackages.values():ae?p({recursive:fe}):A(a,{recursive:fe}),E=({all:ae,recursive:fe})=>{let ce=h({all:ae,recursive:fe}),me=this.patterns.map(we=>{let g=W.parseLocator(we),Ee=Zge.default.makeRe(W.stringifyIdent(g)),Se=W.isVirtualLocator(g),le=Se?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),Fe=Ie?W.devirtualizeLocator(ne):ne;return!(Se&&Ie&&g.reference!==ne.reference||le.reference!==Fe.reference)}}),he=_e.sortMap([...ce],we=>W.stringifyLocator(we));return{selection:he.filter(we=>me.length===0||me.some(g=>g(we))),sortedLookup:he}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let x=new Map;if(this.dependents)for(let ae of v)for(let fe of ae.dependencies.values()){let ce=o.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: Expected the resolution to be registered");_e.getArrayWithDefault(x,ce).push(ae)}let C=new Map;for(let ae of v){if(!W.isVirtualLocator(ae))continue;let fe=W.devirtualizeLocator(ae);_e.getArrayWithDefault(C,fe.locatorHash).push(ae)}let R={},L={children:R},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(ae,fe,ce)=>{if(!fe.has("manifest"))return;let me=await U.fetch(ae,J),he;try{he=await Ot.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}ce("Manifest",{License:de.tuple(de.Type.NO_HINT,he.license),Homepage:de.tuple(de.Type.URL,he.raw.homepage??null)})},async(ae,fe,ce)=>{if(!fe.has("cache"))return;let me=o.storedChecksums.get(ae.locatorHash)??null,he=n.getLocatorPath(ae,me),Be;if(he!==null)try{Be=await oe.statPromise(he)}catch{}let we=typeof Be<"u"?[Be.size,de.Type.SIZE]:void 0;ce("Cache",{Checksum:de.tuple(de.Type.NO_HINT,me),Path:de.tuple(de.Type.PATH,he),Size:we})}];for(let ae of I){let fe=W.isVirtualLocator(ae);if(!this.virtuals&&fe)continue;let ce={},me={value:[ae,de.Type.LOCATOR],children:ce};if(R[W.stringifyLocator(ae)]=me,this.nameOnly){delete me.children;continue}let he=C.get(ae.locatorHash);typeof he<"u"&&(ce.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,he.length)}),ce.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,ae.version)};let Be=(g,Ee)=>{let Se={};if(ce[g]=Se,Array.isArray(Ee))Se.children=Ee.map(le=>({value:le}));else{let le={};Se.children=le;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(le[ne]={label:ne,value:ee})}};if(!fe){for(let g of te)await g(ae,u,Be);await r.triggerHook(g=>g.fetchPackageInfo,ae,u,Be)}ae.bin.size>0&&!fe&&Be("Exported Binaries",[...ae.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let we=x.get(ae.locatorHash);typeof we<"u"&&we.length>0&&Be("Dependents",we.map(g=>de.tuple(de.Type.LOCATOR,g))),ae.dependencies.size>0&&!fe&&Be("Dependencies",[...ae.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),Se=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:Se})})),ae.peerDependencies.size>0&&fe&&Be("Peer dependencies",[...ae.peerDependencies.values()].map(g=>{let Ee=ae.dependencies.get(g.identHash),Se=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,le=Se!==null?o.storedPackages.get(Se)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:le})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};qh.paths=[["info"]],qh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();St();Nl();var hk=$e(td());qt();var O8=$e(zn());Za();var G0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await LE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!hk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!hk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!hk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await K0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await W0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(R.hasErrors())return R.exitCode()}if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let U=await nn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(rn!==null){let ae=O8.default.prerelease(rn)?"canary":"stable",fe=U.latest[ae];O8.default.gt(fe,rn)&&(J=[ae,fe])}if(J)Ke.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ke.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(R.hasErrors())return R.exitCode()}let{project:p,workspace:h}=await Pt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of G0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ke.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(R.hasErrors())return R.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async R=>{R.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),R.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),R.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let x=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async R=>{await p.install({cache:I,report:R,immutable:u,checkResolutions:x,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the `.pnp.cjs` file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your `.pnp.cjs` file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var Y0t="<<<<<<<";async function W0t(t,e){if(!t.projectCwd)return!1;let r=V.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(Y0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function K0t(t,e){if(!t.projectCwd)return!1;let r=[],o=V.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=V.resolve(t.projectCwd,A.path),h=v1.has(A.spec)&&V.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();St();qt();var Gh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=V.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let x=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),x=!0);if(!x)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?V.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Gh.paths=[["link"]],Gh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Yh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Yh.paths=[["node"]],Yh.usage=nt.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await nn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Wh.paths=[["plugin","check"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();St();qt();var nde=ve("os");Ye();St();qt();var $ge=ve("os");Ye();Nl();qt();var V0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function zd(t,e){let r=await nn.get(V0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await zd(r,rn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Kh.paths=[["plugin","list"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var J0t=/^[0-9]+$/,z0t=process.platform==="win32";function ede(t){return J0t.test(t)?`pull/${t}/head`:t}var X0t=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",ede(e)],["git","reset","--hard","FETCH_HEAD"]],Z0t=({branch:t})=>[["git","fetch","origin","--depth=1",ede(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],$0t=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",V.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[z0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,$ge.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=V.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await E2($0t(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await L8(r,null,async()=>h,{report:u});this.skipPlugins||await egt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function E2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(V.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await E2(Z0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await E2(X0t(t,o),{configuration:e,context:t.context,target:o}))}async function egt(t,e,{project:r,report:o,target:a}){let n=await zd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();St();qt();var tde=$e(zn()),rde=ve("vm");var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Pt.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=V.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=V.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!tde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await zd(r,rn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):rn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${rn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await nn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Jh.paths=[["plugin","import"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,rde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=V.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(V.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var tgt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],zh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,nde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await Pt.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await zd(r,rn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await M8(this,{configuration:r,report:n,target:o}),await U8(E,this,{project:u,report:n,target:o})})).exitCode()}};zh.paths=[["plugin","import","from","sources"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await E2(tgt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=V.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();St();qt();var Xh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=V.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};Xh.paths=[["plugin","remove"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Zh.paths=[["plugin","runtime"]],Zh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var $h=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};$h.paths=[["rebuild"]],$h.usage=nt.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var H8=$e(Zo());Za();var e0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let R=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,R=!0;for(let te of A){let ae=U.manifest.getForScope(te),fe=[...ae.values()].map(ce=>W.stringifyIdent(ce));for(let ce of(0,H8.default)(fe,W.stringifyIdent(L))){let{identHash:me}=W.parseIdent(ce),he=ae.get(me);if(typeof he>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(me),E.push([U,te,he]),h=!0,R=!0}}}R||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",x=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${x} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};e0.paths=[["remove"]],e0.usage=nt.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();qt();var ide=ve("util"),Xd=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=_e.sortMap(A.keys(),I=>I),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((I,v)=>Math.max(I,v.length),0);for(let[I,v]of A.entries())u.reportInfo(null,`${I.padEnd(E," ")} ${(0,ide.inspect)(v,h)}`),u.reportJson({name:I,script:v})})).exitCode()}};Xd.paths=[["run"]];Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of AC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};t0.paths=[["run"]],t0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var r0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};r0.paths=[["set","resolution"]],r0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();St();qt();var sde=$e(Zo()),n0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=V.resolve(this.context.cwd,ue.toPortablePath(p));if(_e.isPathLike(p)){let E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let x of I.workspaces)x.manifest.name&&A.add(W.stringifyIdent(x.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,sde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};n0.paths=[["unlink"]],n0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var ode=$e(f2()),q8=$e(Zo());Za();var Jf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,q8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=h2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let ae of o.workspaces)for(let fe of["dependencies","devDependencies"]){let me=[...ae.manifest.getForScope(fe).values()].map(Be=>W.stringifyIdent(Be)),he=te==="*"?me:(0,q8.default)(me,te);for(let Be of he){let we=W.parseIdent(Be),g=ae.manifest[fe].get(we.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(we,J.range);E.push(Promise.resolve().then(async()=>[ae,fe,g,await g2(Ee,{project:o,workspace:ae,cache:n,target:fe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let ae=J.filter(fe=>fe.descriptor!==null);if(ae.length===0){let[fe]=te;if(typeof fe>"u")throw new Error("Assertion failed: Expected an error to have been set");let ce=this.cli.error(fe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${ce}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${ce}`)}else ae.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[];for(let[L,U,,{suggestions:J}]of v){let te,ae=J.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,ode.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=L.manifest[U].get(te.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),R.push([L,U,me,te]);else{let he=r.makeResolver(),Be={project:o,resolver:he},we=r.normalizeDependency(me),g=he.bindDescriptor(we,L.anchoredLocator,Be);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,R),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Jf.paths=[["up"]],Jf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Jf.schema=[cI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var i0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?ngt(o,n,{configuration:r,peers:this.peers}):rgt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};i0.paths=[["why"]],i0.usage=nt.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function rgt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let x=W.stringifyLocator(v);p[x]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function ngt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let x=!1;v.identHash===e&&(x=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let R=t.storedResolutions.get(C.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(R);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(x=!0)}return x&&u.add(v.locatorHash),x};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,x,C)=>{if(!u.has(v.locatorHash))return;let R=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:R,children:L},J=W.stringifyLocator(v);if(x[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let ae=t.storedResolutions.get(te.descriptorHash);if(!ae)throw new Error("Assertion failed: The resolution should have been registered");let fe=t.storedPackages.get(ae);if(!fe)throw new Error("Assertion failed: The package should have been registered");I(fe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var Z8={};Vt(Z8,{GitFetcher:()=>w2,GitResolver:()=>I2,default:()=>vgt,gitUtils:()=>ra});Ye();St();var ra={};Vt(ra,{TreeishProtocols:()=>C2,clone:()=>X8,fetchBase:()=>bde,fetchChangedFiles:()=>xde,fetchChangedWorkspaces:()=>Igt,fetchRoot:()=>Pde,isGitUrl:()=>CC,lsRemote:()=>Sde,normalizeLocator:()=>wgt,normalizeRepoUrl:()=>yC,resolveUrl:()=>z8,splitRepoUrl:()=>s0,validateRepoUrl:()=>J8});Ye();St();qt();var Bde=$e(Cde()),vde=$e(mU()),EC=$e(ve("querystring")),K8=$e(zn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function wde(t){try{return new URL(t)}catch{return}}function Egt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Ide(t){return wde(t)||wde(Egt(t))}function yC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Ide(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Dde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Cgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],C2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(C2||{});function CC(t){return t?Cgt.some(e=>!!t.match(e)):!1}function s0(t){t=yC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=EC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(C2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(C2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function wgt(t){return W.makeLocator(t,yC(t.reference))}function J8(t,{configuration:e}){let r=yC(t,{git:!0});if(!nn.getNetworkSettings(`https://${(0,Bde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function Sde(t,e){let r=J8(t,{configuration:e}),o=await V8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Dde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=s0(t),u=await Sde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return EC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return EC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return EC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,R])=>[K8.default.parse(C.slice(10)),R]).filter(C=>C[0]!==null)),x=K8.default.maxSatisfying([...v.keys()],I);if(x===null)throw new Error(`No matching range ("${E}")`);return EC.default.stringify({...n,commit:v.get(x)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return yC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=s0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=J8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Dde()};return await V8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await V8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function Pde(t){let e,r=t;do{if(e=r,await oe.existsPromise(V.join(e,".git")))return e;r=V.dirname(e)}while(r!==e);return null}async function bde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function xde(t,{base:e,project:r}){let o=_e.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!V.relative(r.cwd,h).match(o)):p}async function Igt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[V.resolve(e.cwd,dr.lockfile),V.resolve(e.cwd,e.configuration.get("cacheFolder")),V.resolve(e.cwd,e.configuration.get("installStatePath")),V.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await Pde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await bde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await xde(o,{base:a.hash,project:e});return new Set(_e.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?_e.mapAndFilter.skip:r.some(p=>u.startsWith(p))?_e.mapAndFilter.skip:A}))}async function V8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,vde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var w2=class{supports(e,r){return CC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=s0(e.reference),n=V.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await _e.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var I2=class{supportsDescriptor(e,r){return CC(e.range)}supportsLocator(e,r){return CC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=s0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=s0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Bgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[w2],resolvers:[I2]};var vgt=Bgt;qt();var o0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let x of Ot.hardDependencies)for(let[C,R]of h.getForScope(x)){let L=o.tryWorkspaceByDescriptor(R);L===null?o.workspacesByIdent.has(C)&&v.add(R):I.add(L)}E={workspaceDependencies:Array.from(I).map(x=>x.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(x=>W.stringifyDescriptor(x))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};o0.paths=[["workspaces","list"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var a0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};a0.paths=[["workspace"]],a0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var Dgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:kde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Fh,Rh,Th,Nh,r0,Vh,_h,o0,Kd,Vd,mC,Jd,kh,Qh,Lh,Oh,Mh,Uh,Hh,qh,jh,Gh,n0,Yh,Wh,zh,Jh,Xh,Kh,Zh,$h,e0,Xd,t0,Jf,i0,a0]},Sgt=Dgt;var iH={};Vt(iH,{default:()=>bgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}]];var tH;function Qde(){return typeof tH>"u"&&(tH=ve("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Fde(){return typeof rH>"u"&&(rH=ve("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Rde(){return typeof nH>"u"&&(nH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Tde=new Map([[W.makeIdent(null,"fsevents").identHash,Qde],[W.makeIdent(null,"resolve").identHash,Fde],[W.makeIdent(null,"typescript").identHash,Rde]]),Pgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Tde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Tde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},bgt=Pgt;var wH={};Vt(wH,{ConstraintsCheckCommand:()=>h0,ConstraintsQueryCommand:()=>f0,ConstraintsSourceCommand:()=>p0,default:()=>tdt});Ye();Ye();v2();var IC=class{constructor(e){this.project=e}createEnvironment(){let e=new wC(["cwd","ident"]),r=new wC(["workspace","type","ident"]),o=new wC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(R,L,{caller:U=Ji.getCaller()}={})=>{let J=B2(R),te=_e.getMapWithDefault(a.manifestUpdates,A.cwd),ae=_e.getMapWithDefault(te,J),fe=_e.getSetWithDefault(ae,L);U!==null&&fe.add(U)},v=R=>I(R,void 0,{caller:Ji.getCaller()}),x=R=>{_e.getArrayWithDefault(a.reportedErrors,A.cwd).push(R)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:x});u.set(A,C);for(let R of Ot.allDependencies)for(let L of A.manifest[R].values()){let U=W.stringifyIdent(L),J=()=>{I([R,U],void 0,{caller:Ji.getCaller()})},te=fe=>{I([R,U],fe,{caller:Ji.getCaller()})},ae=null;if(R!=="peerDependencies"&&(R!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let fe=A.anchoredPackage.dependencies.get(L.identHash);if(fe){if(typeof fe>"u")throw new Error("Assertion failed: The dependency should have been registered");let ce=this.project.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(ce);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ae=me}}r.insert({workspace:C,ident:U,range:L.range,type:R,resolution:ae,update:te,delete:J,error:x})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var f0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((x,[C])=>Math.max(x,C.length),0);for(let x=0;x(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};p0.paths=[["constraints","source"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();v2();var h0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new IC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),b2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=gk(o,E,{fix:this.fix}),x=[];for(let[C,R]of I){let L=C.manifest.indent;C.manifest=new Ot,C.manifest.indent=L,C.manifest.load(R),x.push(C.persistManifest())}if(await Promise.all(x),!(I.size>0&&h>1)){u=Hde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let R of C)R.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=_e.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};h0.paths=[["constraints"]],h0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});v2();var edt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[f0,p0,h0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new IC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),b2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=gk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},tdt=edt;var IH={};Vt(IH,{CreateCommand:()=>tm,DlxCommand:()=>g0,default:()=>ndt});Ye();qt();var tm=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};tm.paths=[["create"]];Ye();Ye();St();qt();var g0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=V.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(V.join(o,"package.json"),`{} +`),await oe.writeFilePromise(V.join(o,"yarn.lock"),"");let a=V.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?V.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,L=>{let U=_e.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,ae=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?ae:{path:ae,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ke.find(o,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,o);if(C===null)throw new rr(x.cwd,o);await x.restoreInstallState();let R=await un.getWorkspaceAccessibleBinaries(C);return R.has(E)===!1&&R.size===1&&typeof this.packages>"u"&&(E=Array.from(R)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:R,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};g0.paths=[["dlx"]],g0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var rdt={commands:[tm,g0]},ndt=rdt;var DH={};Vt(DH,{ExecFetcher:()=>Q2,ExecResolver:()=>F2,default:()=>odt,execUtils:()=>Ek});Ye();Ye();St();var fA="exec:";var Ek={};Vt(Ek,{loadGeneratorFile:()=>k2,makeLocator:()=>vH,makeSpec:()=>pme,parseSpec:()=>BH});Ye();St();function BH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function pme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,pme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function k2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var Q2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await k2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=V.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(V.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(V.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=V.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=V.join(p,"buildfile.log"),E=V.join(e,"generator"),I=V.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(v)}, + }, + enumerable: true, + }); + `);let x=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;x=x.replace(C," ").trim(),u.NODE_OPTIONS=x;let{stdout:R,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:R,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var idt=2,F2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await k2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${idt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var sdt={fetchers:[Q2],resolvers:[F2]},odt=sdt;var PH={};Vt(PH,{FileFetcher:()=>L2,FileResolver:()=>O2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>U2,default:()=>cdt,fileUtils:()=>rm});Ye();St();var SC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,R2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var rm={};Vt(rm,{fetchArchiveFromLocator:()=>N2,makeArchiveFromLocator:()=>Ck,makeBufferFromLocator:()=>SH,makeLocator:()=>PC,makeSpec:()=>hme,parseSpec:()=>T2});Ye();St();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function hme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,hme({parentLocator:e,path:r,hash:o,protocol:a}))}async function N2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=V.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=V.join(n.prefixPath,o);return await _e.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ck(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=V.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=V.join(A.prefixPath,n);return await _e.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function SH(t,{protocol:e,fetchOptions:r}){return(await Ck(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var L2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ck(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var adt=2,O2=class{supportsDescriptor(e,r){return e.range.match(SC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await SH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${adt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await N2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var U2=class{supportsDescriptor(e,r){return R2.test(e.range)?!!(e.range.startsWith(Ui)||SC.test(e.range)):!1}supportsLocator(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await N2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ldt={fetchers:[M2,L2],resolvers:[U2,O2]},cdt=ldt;var kH={};Vt(kH,{GithubFetcher:()=>_2,default:()=>Adt,githubUtils:()=>wk});Ye();St();var wk={};Vt(wk,{invalidGithubUrlMessage:()=>mme,isGithubUrl:()=>bH,parseGithubUrl:()=>xH});var gme=$e(ve("querystring")),dme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function bH(t){return t?dme.some(e=>!!t.match(e)):!1}function xH(t){let e;for(let A of dme)if(e=t.match(A),e)break;if(!e)throw new Error(mme(t));let[,r,o,a,n="master"]=e,{commit:u}=gme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function mme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var _2=class{supports(e,r){return!!bH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=V.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=xH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var udt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new _2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},Adt=udt;var QH={};Vt(QH,{TarballHttpFetcher:()=>q2,TarballHttpResolver:()=>j2,default:()=>pdt});Ye();function H2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var q2=class{supports(e,r){return H2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return H2(e.range)}supportsLocator(e,r){return H2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var fdt={fetchers:[q2],resolvers:[j2]},pdt=fdt;var FH={};Vt(FH,{InitCommand:()=>d0,default:()=>gdt});Ye();Ye();St();qt();var d0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=V.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await Pt.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??V.basename(this.context.cwd)),n.packageManager=rn&&_e.isTaggedYarnVersion(rn)?`yarn@${rn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(V.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=V.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=V.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=V.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let x=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(fe=>`${fe} +`).join(""),C=V.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,x),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(fe=>`${fe} +`).join(""),U=V.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};_e.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[fe,ce]of Object.entries(J)){te+=` +[${fe}] +`;for(let[me,he]of Object.entries(ce)){let Be=me.replace(/[A-Z]/g,we=>`_${we.toLowerCase()}`);te+=`${Be} = ${he} +`}}let ae=V.join(this.context.cwd,".editorconfig");oe.existsSync(ae)||(await oe.writeFilePromise(ae,te),h.push(ae)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(V.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};d0.paths=[["init"]],d0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var hdt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[d0]},gdt=hdt;var Tq={};Vt(Tq,{SearchCommand:()=>w0,UpgradeInteractiveCommand:()=>B0,default:()=>nIt});Ye();var Eme=$e(ve("os"));function bC({stdout:t}){if(Eme.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Qye=$e(zH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},fyt=(0,Qye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await fyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var qB=["regular","dev","peer"],w0=class extends ut{async execute(){bC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:r}=await Promise.resolve().then(()=>(pQ(),fQ)),{useKeypress:o}=await Promise.resolve().then(()=>(UB(),Wwe)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{default:u}=await Promise.resolve().then(()=>$e(rIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),x=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),R=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:he,active:Be})=>{let[we,g]=a(he.name,null);o({active:Be},(le,ne)=>{if(ne.name!=="space")return;if(!we){g(qB[0]);return}let ee=qB.indexOf(we)+1;ee===qB.length?g(null):g(qB[ee])},[we,g]);let Ee=W.parseIdent(he.name),Se=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},Se)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},he.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},he.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,he.humanDownloadsLast30Days)))},U=({name:he,active:Be})=>{let[we]=a(he,null),g=W.parseIdent(he);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),qB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:we===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ae=await n(({useSubmit:he})=>{let Be=a();he(Be);let we=Array.from(Be.keys()).filter(H=>Be.get(H)!==null),[g,Ee]=I(""),[Se,le]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},Fe=async()=>{le(0);let H=await ZH(g);H.query===g&&ee(H.hits)},At=async()=>{let H=await ZH(g,Se+1);H.query===g&&H.page-1===Se&&(le(H.page),ee([...ne,...H.hits]))};return E(()=>{g?Fe():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(x,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:At}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(R,null)),we.length?we.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ae>"u")return 1;let fe=Array.from(ae.keys()).filter(he=>ae.get(he)==="regular"),ce=Array.from(ae.keys()).filter(he=>ae.get(he)==="dev"),me=Array.from(ae.keys()).filter(he=>ae.get(he)==="peer");return fe.length&&await this.cli.run(["add",...fe]),ce.length&&await this.cli.run(["add","--dev",...ce]),me&&await this.cli.run(["add","--peer",...me]),0}};w0.paths=[["search"]],w0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]});Ye();qt();E_();var cIe=$e(zn()),lIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,uIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(uIe(t.slice(e),e)):[],B0=class extends ut{async execute(){bC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(aIe(),oIe)),{Pad:r}=await Promise.resolve().then(()=>(Rq(),sIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{useMinistore:a}=await Promise.resolve().then(()=>(xq(),bq)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd),R=await Lr.find(v);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,Se)=>{let le=upe(Ee,Se),ne="";for(let ee of le)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,Se)=>{if(Ee===Se)return Se;let le=W.parseRange(Ee),ne=W.parseRange(Se),ee=le.selector.match(lIe),Ie=ne.selector.match(lIe);if(!ee||!Ie)return U(Ee,Se);let Fe=["gray","red","yellow","green","magenta"],At=null,H="";for(let at=1;at{let ne=await zc.fetchDescriptorFrom(Ee,le,{project:x,cache:R,preserveModifier:Se,workspace:C});return ne!==null?ne.range:Ee.range},ae=async Ee=>{let Se=cIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[le,ne]=await Promise.all([te(Ee,Ee.range,Se).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return le&&le!==Ee.range?ee.push({value:le,label:J(Ee.range,le)}):ee.push({value:null,label:""}),ne&&ne!==le&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},fe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ce=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:Ee,descriptor:Se,suggestions:le})=>{let[ne,ee]=a(Se.descriptorHash,null),Ie=W.stringifyIdent(Se),Fe=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,Se)),p.createElement(r,{active:Ee,length:Fe})),p.createElement(e,{active:Ee,options:le,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},he=({dependencies:Ee})=>{let[Se,le]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let Fe=await ae(Ie);return Fe.filter(At=>At.label!=="").length<=1?null:{descriptor:Ie,suggestions:Fe}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),Fe=Ee.slice(0,Ie),At=Ee.slice(Ie),H=uIe(At,L),at=Fe.map(ee).reduce(async(Re,ke)=>{await Re;let xe=await ke;xe!==null&&(!ne.current||le(He=>{let Te=He.findIndex(qe=>qe===null),Je=[...He];return Je[Te]=xe,Je}))},Promise.resolve());H.reduce((Re,ke)=>Promise.all(ke.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(He=>He!==null),await Re,ne.current&&le(He=>{let Te=He.findIndex(Je=>Je===null);return He.slice(0,Te).concat(xe).concat(He.slice(Te+xe.length))})}),at).then(()=>{ne.current&&le(Re=>Re.filter(ke=>ke!==null))})},[]),Se.length?p.createElement(o,{radius:L>>1,children:Se.map((Ie,Fe)=>Ie!==null?p.createElement(me,{key:Fe,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:Fe},"Loading..."))}):p.createElement(A,null,"No upgrades found")},we=await n(({useSubmit:Ee})=>{Ee(a());let Se=new Map;for(let ne of x.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())x.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||Se.set(Ie.descriptorHash,Ie));let le=_e.sortMap(Se.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(fe,null),p.createElement(ce,null),p.createElement(he,{dependencies:le}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof we>"u")return 1;let g=!1;for(let Ee of x.workspaces)for(let Se of["dependencies","devDependencies"]){let le=Ee.manifest[Se];for(let ne of le.values()){let ee=we.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(le.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await x.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:R}):0}};B0.paths=[["upgrade-interactive"]],B0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var rIt={commands:[w0,B0]},nIt=rIt;var Nq={};Vt(Nq,{LinkFetcher:()=>GB,LinkResolver:()=>YB,PortalFetcher:()=>WB,PortalResolver:()=>KB,default:()=>sIt});Ye();St();var tp="portal:",rp="link:";var GB=class{supports(e,r){return!!e.reference.startsWith(rp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();St();var YB=class{supportsDescriptor(e,r){return!!e.range.startsWith(rp)}supportsLocator(e,r){return!!e.reference.startsWith(rp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(rp.length);return[W.makeLocator(e,`${rp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();St();var WB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();St();var KB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var iIt={fetchers:[GB,WB],resolvers:[YB,KB]},sIt=iIt;var yj={};Vt(yj,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>hj,PnpLooseLinker:()=>cv,default:()=>w1t});St();Ye();St();St();var Oq=(t,e)=>`${t}@${e}`,AIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oq(t,o)};var hIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=fIt(t,n),p=!1,h=0;do p=Mq(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(Mq(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${VB(A)}`);let v=gIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),pIt(A)},oIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},aIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},fIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:C,hoistedTo:R}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:new Map(C),hoistedTo:new Map(R)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},lIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Lq=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mq=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=hIt(u),p=lIt(u,A),h=t==u?new Map:a.fastLookupPossible?oIt(e):aIt(e),E,I=!1,v=!1,x=new Map(Array.from(p.entries()).map(([R,L])=>[R,L[0]])),C=new Map;do{let R=AIt(t,e,r,h,x,p,o,C,a);R.isGraphChanged&&(v=!0),R.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(x.delete(L),U.shift(),x.set(L,U[0]),E=!0)}while(E);for(let R of u.dependencies.values())if(!u.peerNames.has(R.name)&&!r.has(R.locator)){r.add(R.locator);let L=Mq(t,[...e,R],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(R.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},cIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},uIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let x=r[r.length-1],R=!(o.ident===x.ident);if(p&&!R&&(I="- self-reference"),R&&(R=o.dependencyKind!==1,p&&!R&&(I="- workspace")),R&&o.dependencyKind===2&&(R=!cIt(o),p&&!R&&(I="- external soft link with unhoisted dependencies")),R&&(R=x.dependencyKind!==1||x.hoistedFrom.has(o.name)||e.size===1,p&&!R&&(I=x.reasons.get(o.name))),R&&(R=!t.peerNames.has(o.name),p&&!R&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),R){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let ae=r[J].dependencies.get(o.name);if(ae&&ae.ident!==o.ident){L=!1;let fe=A.get(x);fe||(fe=new Set,A.set(x,fe)),fe.add(o.name),p&&(I=`- filled by ${no(ae.locator)} at ${r.slice(0,J).map(ce=>no(ce.locator)).join("\u2192")}`);break}}R=L}if(R&&(R=n.get(o.name)===o.ident,p&&!R&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),R){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let ae of U){if(te.peerNames.has(ae)&&te.originalDependencies.has(ae))continue;let fe=te.dependencies.get(ae);fe&&t.dependencies.get(ae)!==fe&&(J===r.length-1?v.add(fe):(v=null,L=!1,p&&(I=`- peer dependency ${no(fe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(ae)}if(!L)break}R=L}if(R&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){R=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:R?0:1,reason:I}},yQ=t=>`${t.name}@${t.locator}`,AIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,x=(U,J,te,ae,fe)=>{if(E.has(ae))return;let ce=[...J,yQ(ae)],me=[...te,yQ(ae)],he=new Map,Be=new Map;for(let le of Lq(ae)){let ne=uIt(h,r,[h,...U,ae],le,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(le,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=he.get(ee.name)||new Set;Ie.add(le.name),he.set(ee.name,Ie)}}let we=new Set,g=(le,ne,ee)=>{if(!we.has(le)){we.add(le),Be.set(le,{isHoistable:1,reason:ee});for(let Ie of he.get(le.name)||[])g(ae.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(le.locator)} from parent ${no(ae.locator)} was not hoisted`:"")}};for(let[le,ne]of Be)ne.isHoistable===1&&g(le,ne,ne.reason);let Ee=!1;for(let le of Be.keys())if(!we.has(le)){v=!0;let ne=u.get(ae);ne&&ne.has(le.name)&&(I=!0),Ee=!0,ae.dependencies.delete(le.name),ae.hoistedDependencies.set(le.name,le),ae.reasons.delete(le.name);let ee=h.dependencies.get(le.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([ae.locator]).map(At=>no(At)).join("\u2192"),Fe=h.hoistedFrom.get(le.name);Fe||(Fe=[],h.hoistedFrom.set(le.name,Fe)),Fe.push(Ie),ae.hoistedTo.set(le.name,Array.from(e).map(At=>no(At.locator)).join("\u2192"))}if(!ee)h.ident!==le.ident&&(h.dependencies.set(le.name,le),fe.add(le));else for(let Ie of le.references)ee.references.add(Ie)}if(ae.dependencyKind===2&&Ee&&(I=!0),p.check){let le=gIe(t);if(le)throw new Error(`${le}, after hoisting dependencies of ${[h,...U,ae].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let Se=Lq(ae);for(let le of Se)if(we.has(le)){let ne=Be.get(le);if((a.get(le.name)===le.ident||!ae.reasons.has(le.name))&&ne.isHoistable!==0&&ae.reasons.set(le.name,ne.reason),!le.isHoistBorder&&me.indexOf(yQ(le))<0){E.add(ae);let Ie=fIe(ae,le);x([...U,ae],ce,me,Ie,R),E.delete(ae)}}},C,R=new Set(Lq(h)),L=Array.from(e).map(U=>yQ(U));do{C=R,R=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=fIe(h,U);x([],Array.from(r),L,J,R)}}while(R.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},gIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),x=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,R=`${x?` hoisted to ${x}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${R}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${R} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},fIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oq(r,a),ident:AIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:x,identName:C,reference:R,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:x,references:new Set([R]),locator:Oq(C,R),ident:AIe(C,R),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(x):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let x=new Set,C=R=>{if(!x.has(R)){x.add(R),R.decoupled=!1;for(let L of R.dependencies.values())R.peerNames.has(L.name)||C(L)}};C(I)}else for(let x of h.dependencies)p(x,I)};for(let h of t.dependencies)p(h,u);return u},Uq=t=>t.substring(0,t.indexOf("@",1)),pIt=t=>{let e={name:t.name,identName:Uq(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Uq(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},hIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},pIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>pIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hpIe?` +Tree is too large, part of the tree has been dunped +`:"")};var JB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(JB||{}),dIe="node_modules",v0="$wsroot$";var zB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=dIt(t,e),u=null;if(a.length===0){let A=hIe(r,{hoistingLimits:o});u=yIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,Hq=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(V.delimiter).length,u=a.split(V.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},mIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},_q=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return V.contains(o,a)===null},gIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,x)=>{let C=gA(v);if(p.has(C))return;p.add(C);let R=t.getPackageInformation(v);if(R){let L=x?gA(x):"";if(gA(v)!==L&&R.linkType==="SOFT"&&!v.reference.startsWith("link:")&&!_q(R,v,t,o)){let U=yIe(R,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of R.packageDependencies)J!==null&&(R.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(V.sep);for(let v of A.values()){let x=t.getPackageInformation(v),R=ue.toPortablePath(x.packageLocation.slice(0,-1)).split(V.sep).slice(E.length),L=n;for(let U of R){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,x)=>{if(v.workspaceLocator){let C=gA(x),R=a.get(C);R||(R=new Set,a.set(C,R)),R.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||x)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},dIt=(t,e)=>{let r=[],o=!1,a=new Map,n=gIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(x,C)=>`${gA(C)}:${x}`,v=(x,C,R,L,U,J,te,ae)=>{let fe=I(x,R),ce=E.get(fe),me=!!ce;!me&&R.name===A.name&&R.reference===A.reference&&(ce=h,E.set(fe,h));let he=_q(C,R,t,p);if(!ce){let le=0;he?le=2:C.linkType==="SOFT"&&R.name.endsWith(v0)&&(le=1),ce={name:x,identName:R.name,reference:R.reference,dependencies:new Set,peerNames:le===1?new Set:C.packagePeers,dependencyKind:le},E.set(fe,ce)}let Be;if(he?Be=2:U.linkType==="SOFT"?Be=1:Be=0,ce.hoistPriority=Math.max(ce.hoistPriority||0,Be),ae&&!he){let le=gA({name:L.identName,reference:L.reference}),ne=a.get(le)||new Set;a.set(le,ne),ne.add(ce.name)}let we=new Map(C.packageDependencies);if(e.project){let le=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(le){let ne=new Set([...Array.from(le.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(le.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)we.has(ee)||(we.set(ee,J.get(ee)||null),ce.peerNames.add(ee))}}let g=gA({name:R.name.replace(v0,""),reference:R.reference}),Ee=n.get(g);if(Ee)for(let le of Ee)we.set(`${le.name}${v0}`,le.reference);(C!==U||C.linkType!=="SOFT"||!he&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(ce);let Se=R!==A&&C.linkType==="SOFT"&&!R.name.endsWith(v0)&&!he;if(!me&&!Se){let le=new Map;for(let[ne,ee]of we)if(ee!==null){let Ie=t.getLocator(ne,ee),Fe=t.getLocator(ne.replace(v0,""),ee),At=t.getPackageInformation(Fe);if(At===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_q(At,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){At.packageDependencies.size>0&&(o=!0);for(let[He,Te]of At.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${He}@${Te}`);if(gA(Je)!==gA(Ie)){let qe=we.get(He);if(qe){let b=W.parseLocator(Array.isArray(qe)?`${qe[0]}@${qe[1]}`:`${He}@${qe}`);mIe(b,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,b)}`})}else{let b=le.get(He);if(b){let w=b.target,P=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${He}@${w}`);mIe(P,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,P)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(b.portal.name))}`})}else le.set(He,{target:Je.reference,portal:Ie})}}}}let at=e.hoistingLimitsByCwd?.get(te),Re=H?te:V.relative(p,ue.toPortablePath(At.packageLocation))||Bt.dot,ke=e.hoistingLimitsByCwd?.get(Re);v(ne,At,Ie,ce,C,we,Re,at==="dependencies"||ke==="dependencies"||ke==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function yIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function mIt(t,e,r){let o=e.getLocator(t.name.replace(v0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:yIe(a,t,e)}}var yIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:x,target:C}=mIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:x,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let x=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let R=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(v0,"")&&R===x)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),ae=te?[te,J]:[J],fe=V.join(I,dIe),ce=V.join(fe,...ae),me=`${v}/${U.name}`,he=a(U,v,L.slice(1)),Be=!1;if(he.linkType==="SOFT"&&r.project){let we=r.project.workspacesByCwd.get(he.target.slice(0,-1));Be=!!(we&&!we.manifest.name)}if(!C.name.endsWith(v0)&&!Be){let we=o.get(ce);if(we){if(we.dirList)throw new Error(`Assertion failed: ${ce} cannot merge dir node with leaf node`);{let Se=W.parseLocator(we.locator),le=W.parseLocator(he.locator);if(we.linkType!==he.linkType)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different link types ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/${W.stringifyLocator(le)}`);if(Se.identHash!==le.identHash)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different idents ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/s${W.stringifyLocator(le)}`);he.aliases=[...he.aliases,...we.aliases,W.parseLocator(we.locator).reference]}}o.set(ce,he);let g=ce.split("/"),Ee=g.indexOf(dIe);for(let Se=g.length-1;Ee>=0&&Se>Ee;Se--){let le=ue.toPortablePath(g.slice(0,Se).join(V.sep)),ne=g[Se],ee=o.get(le);if(!ee)o.set(le,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,he.linkType==="SOFT"?he.target:ce,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();St();St();nA();Nl();var oj={};Vt(oj,{PnpInstaller:()=>mm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>VIt,getPnpPath:()=>b0,jsInstallUtils:()=>yA,pnpUtils:()=>av,quotePathIfNeeded:()=>r1e});St();var t1e=ve("url");Ye();Ye();St();St();var EIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function EIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=EQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function IIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=EQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function EQ(t,e,r,o){let{next:a}=EIe[r],n=a[t]||a["*"];return CIe(e,n,o)}function CIe(t,e,r){let{collapsed:o}=EIe[e];return Array.isArray(t)?o?EIt(t,e,r):CIt(t,e,r):typeof t=="object"&&t!==null?o?wIt(t,e,r):IIt(t,e,r):JSON.stringify(t)}function wIe(t){return CIe(t,"TOP_LEVEL","")}function XB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function BIt(t){let e=new Map,r=XB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function vIt(t){return XB(t.fallbackPool||[],([e])=>e)}function DIt(t){let e=[];for(let[r,o]of XB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of XB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,R]of XB(A.entries(),([L])=>L))I.push([C,R]);let v=p&&p.size>0?Array.from(p):void 0,x=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:x}])}}return e}function ZB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:BIt(t),fallbackPool:vIt(t),packageRegistryData:DIt(t)}}var vIe=$e(BIe());function DIe(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`"use strict"; +`,` +`,e,` +`,(0,vIe.default)()].join("")}function SIt(t){return JSON.stringify(t,null,2)}function PIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function bIt(t){return[`const RAW_RUNTIME_STATE = +`,`${PIt(wIe(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function xIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function SIe(t){let e=ZB(t),r=bIt(e);return DIe(t.shebang,r)}function PIe(t){let e=ZB(t),r=xIt(),o=DIe(t.shebang,r);return{dataFile:SIt(e),loaderFile:o}}St();function jq(t,{basePath:e}){let r=ue.toPortablePath(e),o=V.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([x,C])=>{if(I===null!=(x===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let R=C.discardFromLookup??!1,L={name:I,reference:x},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&R,R||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:R});let J=null;return[x,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:R,get packageLocation(){return J||(J=V.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}St();St();var np=ve("module"),dm=ve("url"),$q=ve("util");var Mo=ve("url");var QIe=$e(ve("assert"));var Gq=Array.isArray,$B=JSON.stringify,ev=Object.getOwnPropertyNames,hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yq=(t,e)=>RegExp.prototype.exec.call(t,e),Wq=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),D0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kq=(t,...e)=>String.prototype.includes.apply(t,e),Vq=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),tv=(t,...e)=>String.prototype.indexOf.apply(t,e),bIe=(t,...e)=>String.prototype.replace.apply(t,e),S0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),xIe=Map,kIe=JSON.parse;function rv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var FIe=rv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Jq=rv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),RIe=rv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,QIe.default)(o===!1),`Invalid "exports" main target ${$B(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${$B(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),nv=rv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),TIe=rv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var wQ=ve("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}iv(r,t,o,u,a)}Yq(OIe,S0(t,2))!==null&&iv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||iv(r,t,o,u,a),e==="")return p;if(Yq(OIe,e)!==null){let I=n?bIe(r,"*",()=>e):r+e;FIt(I,o,u,a)}return n?new URL(Wq(MIe,p.href,()=>e)):new URL(e,p)}function TIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function GC(t,e,r,o,a,n,u,A){if(typeof e=="string")return RIt(e,r,o,t,a,n,u,A);if(Gq(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function NIt(t,e,r){if(typeof t=="string"||Gq(t))return!0;if(typeof t!="object"||t===null)return!1;let o=ev(t),a=!1,n=0;for(let u=0;u=h.length&&D0(e,I)&&_Ie(n,h)===1&&Vq(h,"*")===E&&(n=h,u=S0(e,E,e.length-I.length))}}if(n){let p=r[n],h=GC(t,p,u,n,o,!0,!1,a);return h==null&&zq(e,t,o),h}zq(e,t,o)}function qIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||D0(t,"/")){let u="is not a valid internal imports specifier name";throw new Jq(t,u,(0,Mo.fileURLToPath)(e))}let a,n=LIe(e,o);if(n.exists){a=(0,Mo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(hm(u,t)&&!Kq(t,"*")){let A=GC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=ev(u);for(let E=0;E=I.length&&D0(t,x)&&_Ie(A,I)===1&&Vq(I,"*")===v&&(A=I,p=S0(t,v,t.length-x.length))}}if(A){let E=u[A],I=GC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}QIt(t,a,e)}St();var OIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=OIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var WIe=$e(GIe());function KIe(t){return MIt(),Zq[t]}var Zq;function MIt(){Zq||(Zq={"--conditions":[],...YIe(UIt()),...YIe(process.execArgv)})}function YIe(t){return(0,WIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function UIt(){let t=[],e=_It(process.env.NODE_OPTIONS||"",t);return t.length,e}function _It(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),VIe=mA>19||mA===19&&gm>=2||mA===18&&gm>=13,Bzt=mA===20&&gm<6||mA===19&&gm>=3,vzt=mA>19||mA===19&&gm>=6,Dzt=mA>=21||mA===20&&gm>=10||mA===18&&gm>=19;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),VIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function ej(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let ke=t.packageRegistry.get(Re);if(ke)for(let xe of ke.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:x}=t;function C(Re,ke){return{fn:Re,args:ke,error:null,result:null}}function R(Re){let ke=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=(Je,qe)=>`\x1B[${Je}m${qe}\x1B[0m`,He=Re.error;console.error(He?xe("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${xe("37;1","In \u2190")} ${(0,$q.inspect)(Je,{colors:ke,compact:!0})}`);Re.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,$q.inspect)(Re.result,{colors:ke,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${xe("38;5;244",Je)}`)}console.error()}function L(Re,ke){if(e.allowDebug===!1)return ke;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let He=C(Re,xe);try{return He.result=ke(...xe)}catch(Te){throw He.error=Te}finally{R(He)}};if(o>=1)return(...xe)=>{try{return ke(...xe)}catch(He){let Te=C(Re,xe);throw Te.error=He,R(Te),He}}}return ke}function U(Re){let ke=g(Re);if(!ke)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return ke}function J(Re){if(Re.name===null)return!0;for(let ke of t.dependencyTreeRoots)if(ke.name===Re.name&&ke.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...KIe("--conditions")]);function ae(Re,ke=te,xe){let He=le(V.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(He===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(He),Je=V.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let qe=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(qe.exports==null)return null;let b=V.contains(Te,Re);if(b===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");b!=="."&&!A.test(b)&&(b=`./${b}`);try{let w=HIe({packageJSONUrl:(0,dm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:b,exports:qe.exports,base:xe?(0,dm.pathToFileURL)(ue.fromPortablePath(xe)):null,conditions:ke});return ue.toPortablePath((0,dm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:He,pkgJson:qe,subpath:au(b),conditions:ke},w.code)}}function fe(Re,ke,{extensions:xe}){let He;try{ke.push(Re),He=e.fakeFs.statSync(Re)}catch{}if(He&&!He.isDirectory())return e.fakeFs.realpathSync(Re);if(He&&He.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(V.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=V.resolve(Re,Te.main)),Je&&Je!==Re){let qe=fe(Je,ke,{extensions:xe});if(qe!==null)return qe}}for(let Te=0,Je=xe.length;Te{let b=JSON.stringify(qe.name);if(He.has(b))return;He.add(b);let w=Ee(qe);for(let P of w)if(U(P).packagePeers.has(Re))Te(P);else{let F=xe.get(P.name);typeof F>"u"&&xe.set(P.name,F=new Set),F.add(P.reference)}};Te(ke);let Je=[];for(let qe of[...xe.keys()].sort())for(let b of[...xe.get(qe)].sort())Je.push({name:qe,reference:b});return Je}function le(Re,{resolveIgnored:ke=!1,includeDiscardFromLookup:xe=!1}={}){if(he(Re)&&!ke)return null;let He=V.relative(t.basePath,Re);He.match(n)||(He=`./${He}`),He.endsWith("/")||(He=`${He}/`);do{let Te=x.get(He);if(typeof Te>"u"||Te.discardFromLookup&&!xe){He=He.substring(0,He.lastIndexOf("/",He.length-2)+1);continue}return Te.locator}while(He!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(ke){if(ke.code==="ENOENT")return;throw ke}}function ee(Re,ke,{considerBuiltins:xe=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(xe&&(0,np.isBuiltin)(Re))return null;let He=au(Re),Te=ke&&au(ke);if(ke&&he(ke)&&(!V.isAbsolute(Re)||le(Re)===null)){let b=me(Re,ke);if(b===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${He}" +Required by: ${Te} +`,{request:He,issuer:Te});return ue.toPortablePath(b)}let Je,qe=Re.match(a);if(qe){if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let[,b,w]=qe,P=le(ke);if(!P){let Ne=me(Re,ke);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${He}" +Required by: ${Te} +`,{request:He,issuer:Te});return ue.toPortablePath(Ne)}let F=U(P).packageDependencies.get(b),z=null;if(F==null&&P.name!==null){let Ne=t.fallbackExclusionList.get(P.name);if(!Ne||!Ne.has(P.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) + +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne})}else F===void 0&&(!xe&&(0,np.isBuiltin)(Re)?J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in ${P.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}):J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:b,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${Z.name}@${Z.reference}${Z.name!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,dependencyLocator:Object.assign({},Z)});let Pe=ie.packageLocation;w?Je=V.join(Pe,w):Je=Pe}else if(V.isAbsolute(Re))Je=V.normalize(Re);else{if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let b=V.resolve(ke);ke.match(u)?Je=V.normalize(V.join(b,Re)):Je=V.normalize(V.join(V.dirname(b),Re))}return V.normalize(Je)}function Ie(Re,ke,xe=te,He){if(n.test(Re))return ke;let Te=ae(ke,xe,He);return Te?V.normalize(Te):ke}function Fe(Re,{extensions:ke=Object.keys(np.Module._extensions)}={}){let xe=[],He=fe(Re,xe,{extensions:ke});if(He)return V.normalize(He);{JIe(xe.map(qe=>ue.fromPortablePath(qe)));let Te=au(Re),Je=le(Re);if(Je){let{packageLocation:qe}=U(Je),b=!0;try{e.fakeFs.accessSync(qe)}catch(w){if(w?.code==="ENOENT")b=!1;else{let P=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${P}). + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(qe)} +`,{unqualifiedPath:Te,extensions:ke})}}if(!b){let w=qe.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(qe)} +`,{unqualifiedPath:Te,extensions:ke})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${Te} +${xe.map(qe=>`Not found: ${au(qe)} +`).join("")}`,{unqualifiedPath:Te,extensions:ke})}}function At(Re,ke,xe){if(!ke)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let He=qIe({name:Re,base:(0,dm.pathToFileURL)(ue.fromPortablePath(ke)),conditions:xe.conditions??te,readFileSyncFn:ne});if(He instanceof URL)return Fe(ue.toPortablePath((0,dm.fileURLToPath)(He)),{extensions:xe.extensions});if(He.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(He,ke,xe)}function H(Re,ke,xe={}){try{if(Re.startsWith("#"))return At(Re,ke,xe);let{considerBuiltins:He,extensions:Te,conditions:Je}=xe,qe=ee(Re,ke,{considerBuiltins:He});if(Re==="pnpapi")return qe;if(qe===null)return null;let b=()=>ke!==null?he(ke):!1,w=(!He||!(0,np.isBuiltin)(Re))&&!b()?Ie(Re,qe,Je,ke):qe;return Fe(w,{extensions:Te})}catch(He){throw Object.hasOwn(He,"pnpCode")&&Object.assign(He.data,{request:au(Re),issuer:ke&&au(ke)}),He}}function at(Re){let ke=V.normalize(Re),xe=mi.resolveVirtual(ke);return xe!==ke?xe:null}return{VERSIONS:Be,topLevel:we,getLocator:(Re,ke)=>Array.isArray(ke)?{name:ke[0],reference:ke[1]}:{name:Re,reference:ke},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[ke,xe]of v)for(let He of xe.keys())ke!==null&&He!==null&&Re.push({name:ke,reference:He});return Re},getPackageInformation:Re=>{let ke=g(Re);if(ke===null)return null;let xe=ue.fromPortablePath(ke.packageLocation);return{...ke,packageLocation:xe}},findPackageLocator:Re=>le(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=ee(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,ke)=>ue.fromPortablePath(Fe(ue.toPortablePath(Re),ke))),resolveRequest:L("resolveRequest",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=H(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let ke=at(ue.toPortablePath(Re));return ke!==null?ue.fromPortablePath(ke):null})}}St();var zIe=(t,e,r)=>{let o=ZB(t),a=jq(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return ej(a,{fakeFs:r,pnpapiResolution:n})};var rj=$e(ZIe());qt();var yA={};Vt(yA,{checkManifestCompatibility:()=>$Ie,extractBuildRequest:()=>IQ,getExtractHint:()=>nj,hasBindingGyp:()=>ij});Ye();St();function $Ie(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function IQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:$Ie(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var qIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function nj(t){return t.packageFs.getExtractHint({relevantExtensions:qIt})}function ij(t){let e=V.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Vt(av,{getUnpluggedPath:()=>ov});Ye();St();function ov(t,{configuration:e}){return V.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var jIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=b0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=b0(r.project).cjs;if(!oe.existsSync(o))return null;let n=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new mm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},mm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new _e.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await GIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let x=h?IQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(V.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let R=V.resolve(C.getRealPath(),r.prefixPath),L=sj(this.opts.project.cwd,R),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:sj(this.opts.project.cwd,mi.resolveVirtual(R)),locator:te})}}return _e.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:R,buildRequest:x}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=b0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())_e.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=_e.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=b0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=PIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,rj.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=V.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=V.join(a.cwd,"node_modules");if(o&&o.test(V.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(V.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:jIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(IQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:V}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=V.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=_e.getMapWithDefault(this.packageRegistry,"@@disk"),o=sj(this.opts.project.cwd,e);return _e.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function sj(t,e){let r=V.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function GIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:nj(t),hasBindingGyp:ij(t)}}}Ye();Ye();qt();var e1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(x=>{let C=W.parseDescriptor(x),R=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(R.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,R)})`);return L=>{let U=W.stringifyIdent(L);return!e1e.default.isMatch(U,W.stringifyIdent(R))||L.version&&!kr.satisfiesWithPrereleases(L.version,R.range)?!1:(u.delete(x),!0)}}),p=()=>{let x=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(R=>R(C))&&x.push(C);return x},h=x=>{let C=new Set,R=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(ae=>ae(U))&&R.push(U),!(J>0&&!this.recursive)))for(let ae of U.dependencies.values()){let fe=o.storedResolutions.get(ae.descriptorHash);if(!fe)throw new Error("Assertion failed: The resolution should have been registered");let ce=o.storedPackages.get(fe);if(!ce)throw new Error("Assertion failed: The package should have been registered");L(ce,J+1)}};for(let U of x)L(U.anchoredPackage,0);return R},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=_e.sortMap(E,x=>W.stringifyLocator(x));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async x=>{for(let C of E){let R=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,R));L.unplugged=!0,x.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),x.reportJson({locator:W.stringifyLocator(C),version:R})}await o.topLevelWorkspace.persistManifest(),this.json||x.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var b0=t=>({cjs:V.join(t.cwd,dr.pnpCjs),data:V.join(t.cwd,dr.pnpData),esmLoader:V.join(t.cwd,dr.pnpEsmLoader)}),r1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function YIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=b0(t),A=`--require ${r1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,t1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function WIt(t,e){let r=b0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var KIt={hooks:{populateYarnPaths:WIt,setupScriptEnvironment:YIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},VIt=KIt;var u1e=$e(a1e());qt();var pj=$e(ve("crypto")),A1e=$e(ve("fs")),f1e=1,Si="node_modules",BQ=".bin",p1e=".yarn-state.yml",A1t=1e3,hj=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(hj||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fj(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(V.sep).length-h.split(V.sep).length),A=V.join(r.project.configuration.startingCwd,Si);return u.find(p=>V.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fj(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=vQ(V.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new Aj(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},Aj=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=V.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await f1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await fj(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmHoistingLimits");try{x=_e.validateEnum(JB,v.manifest.installConfig?.hoistingLimits??x)}catch{let R=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${R}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(JB).join(", ")}, using default: "${x}"`)}return[v.relativeCwd,x]})),n=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmSelfReferences");return x=v.manifest.installConfig?.selfReferences??x,[v.relativeCwd,x]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,x)=>Array.isArray(x)?{name:x[0],reference:x[1]}:{name:v,reference:x},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let x=v.anchoredLocator;return{name:W.stringifyIdent(x),reference:x.reference}}),getPackageInformation:v=>{let x=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let x=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(x!==null){let C=x.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=zB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:x}of p)this.opts.report.reportError(v,x);return}let E=Hq(A);await y1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let x=W.parseLocator(v),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,x]of E.entries()){if(m1e(v))continue;let C=W.parseLocator(v),R=this.localStore.get(C.locatorHash);if(typeof R>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(R.pkg))continue;let L=yA.extractBuildRequest(R.pkg,R.customPackageData,R.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:x.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function f1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:yA.hasBindingGyp(e)}}}async function p1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${f1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let v of I.locations){let x=V.contains(t.cwd,v);if(x===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(x)} +`}if(I.aliases.length>0){n+=` aliases: +`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[v,x]of r){let C=V.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[R,L]of x){let U=V.relative(V.join(v,Si),L);n+=` ${JSON.stringify(R)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=V.join(p,Si,p1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function fj(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=V.join(r,Si,p1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>f1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(x=>V.join(r,x)),v=E.bin;if(v)for(let[x,C]of Object.entries(v)){let R=V.join(r,ue.toPortablePath(x)),L=_e.getMapWithDefault(p,R);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([R,Si,J].join(V.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let x of E.aliases){let{scope:C,name:R}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,R),x),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:h1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var WC=async(t,e)=>{if(t.split(V.sep).indexOf(Si)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=V.join(t,o.name);o.isDirectory()?(o.name!==Si||e&&e.innerLoop)&&await WC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},l1e=4,vQ=(t,{skipPrefix:e})=>{let r=V.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(V.sep).filter(p=>p!==""),a=o.indexOf(Si),n=o.slice(0,a).join(V.sep),u=V.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},h1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&V.contains(e,n.target)!==null){let A=_e.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=vQ(u,{skipPrefix:e}),h=_e.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(V.relative(V.dirname(e),t),e)};async function g1e(t,e,r){let o=V.join(t,`${pj.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function h1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===d1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=V.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(d1e||{}),g1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=V.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),x=new Map;for(let C of v){let R=V.join(E,C.name),L,U=V.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(x.set(R,L),C.isDirectory()&&R!==Si){let J=await A(R);for(let[te,ae]of J)x.set(te,ae)}}return x},p;if(a.value==="hardlinks-global"&&o&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=V.join(e,E),x=V.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(x,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await h1t({srcPath:v,dstPath:x,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await gj(V.resolve(V.dirname(x),I.symlinkTo),x,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await g1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function d1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,x)=>{let C=!0,R=V.join(h,E),L=new Set;if(E===Si||E.startsWith("@")){let J;try{J=oe.statSync(R)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(R))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let ae=V.join(h,Si,BQ),fe;try{fe=oe.statSync(ae)}catch{}if(!fe)A=!0;else if(fe.mtimeMs>r){A=!0;let ce=new Set(oe.readdirSync(ae)),me=new Map;n.set(h,me);for(let[he,Be]of te)ce.has(he)&&me.set(he,Be)}else n.set(h,te)}}else C=x.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,ae={children:new Map,linkType:J,locator:te};if(v.children.set(E,ae),te){let fe=_e.getSetWithDefault(u,te);fe.add(R),u.set(te,fe)}for(let fe of U.children.keys())p(R,fe,U,ae,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,x={children:new Map,linkType:I,locator:v};if(a.set(h,x),v){let C=_e.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Si)&&p(h,Si,E,x,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function m1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function m1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=m1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let x=V.join(p[0],v);v!==""&&oe.existsSync(x)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=V.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[x,C]of v){let R=V.join(A,ue.toPortablePath(C));E.set(x,R)}for(let[x,C]of h.children){let R=V.join(A,x),L=u(R,R,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,x]of h.children){let C=u(V.join(A,v),p,x);for(let[R,L]of C)E.set(R,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var c1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function dj(t){return V.join(t.get("globalFolder"),"store")}async function y1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=V.join(o.cwd,Si),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=d1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=h1e(e,{skipPrefix:o.cwd}),x=[],C=async({srcDir:Be,dstDir:we,linkType:g,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(V.dirname(we),{recursive:!0}),await gj(V.resolve(Be),we,le)):await g1t(we,Be,{baseFs:r,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${Be} -> ${we} ${Ie.message}`,Ie}finally{ae.tick()}})().then(()=>x.splice(x.indexOf(ee),1));x.push(ee),x.length>l1e&&await Promise.race(x)},R=async(Be,we,g)=>{let Ee=(async()=>{let Se=async(le,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(le,{withFileTypes:!0});for(let Fe of Ie){if(!ee.innerLoop&&Fe.name===BQ)continue;let At=V.join(le,Fe.name),H=V.join(ne,Fe.name);Fe.isDirectory()?(Fe.name!==Si||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await Se(At,H,{...ee,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await oe.linkPromise(At,H):await oe.copyFilePromise(At,H,A1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${le} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||ae.tick()}};await Se(Be,we,g)})().then(()=>x.splice(x.indexOf(Ee),1));x.push(Ee),x.length>l1e&&await Promise.race(x)},L=async(Be,we,g)=>{if(g)for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await L(V.join(Be,Ee),Se,le)}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!1});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:Be===A,allowSymlink:Ee})}};for(let[Be,we]of p){let g=v.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee),ne=V.join(Be,Ee);await L(ne,Se,le)}}let U=async(Be,we,g)=>{if(g){c1e(we.locator,g.locator)||await WC(Be,{contentsOnly:we.linkType==="HARD"});for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!0});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:we.linkType==="HARD",allowSymlink:Ee})}};for(let[Be,we]of v){let g=p.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}let J=new Map,te=[];for(let[Be,we]of E)for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=v.get(Ee),ne=Ee;if(le){for(let ee of Se)if(ne=V.join(ne,ee),le=le.children.get(ee),!le)break;if(le){let ee=c1e(le.locator,Be),Ie=e.get(le.locator),Fe=Ie.target,At=ne,H=Ie.linkType;if(ee)J.has(Fe)||J.set(Fe,At);else if(Fe!==At){let at=W.parseLocator(le.locator);W.isVirtualLocator(at)&&(at=W.devirtualizeLocator(at)),te.push({srcDir:Fe,dstDir:At,linkType:H,realLocatorHash:at.locatorHash})}}}}for(let[Be,{locations:we}]of e.entries())for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(Be),Fe=W.parseLocator(Be);W.isVirtualLocator(Fe)&&(Fe=W.devirtualizeLocator(Fe));let At=Fe.locatorHash,H=Ie.target,at=g;if(H===at)continue;let Re=Ie.linkType;for(let ke of Se)ne=ne.children.get(ke);if(!le)te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});else for(let ke of Se)if(ee=V.join(ee,ke),le=le.children.get(ke),!le){te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});break}}let ae=Xs.progressViaCounter(te.length),fe=a.reportProgress(ae),ce=o.configuration.get("nmMode"),me={value:ce},he=o.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${dj(o.configuration)}/v1`:null;if(Be&&!await oe.existsPromise(Be)){await oe.mkdirpPromise(Be);for(let g=0;g<256;g++)await oe.mkdirPromise(V.join(Be,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:he,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(x),x.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await R(Ee,g.dstDir,{nmMode:me})}await Promise.all(x),await oe.mkdirPromise(A,{recursive:!0});let we=await m1t(e,v,o.cwd,{loadManifest:n});await E1t(h,we,o.cwd,he),await p1t(o,e,we,me,{installChangedByUser:I}),ce=="hardlinks-global"&&me.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{fe.stop()}}async function E1t(t,e,r,o){for(let a of t.keys()){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=V.join(a,Si,BQ);await oe.removePromise(n)}}for(let[a,n]of e){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=V.join(a,Si,BQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(V.join(u,p)),process.platform==="win32"&&await oe.removePromise(V.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=V.join(u,p);E!==h&&(process.platform==="win32"?await(0,u1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await gj(h,I,o),V.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();St();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new mj(r)}},mj=class extends mm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=zIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=zB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let x=W.parseLocator(v.locator),C=W.stringifyIdent(x);C===I?A.set(I,x.reference):A.set(I,[C,x.reference])},h=V.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=V.join(h,I),x=n.get(v);if(typeof x>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in x)p(I,x);else for(let C of x.dirList){let R=V.join(v,C),L=n.get(R);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var C1t={hooks:{cleanGlobalArtifacts:async t=>{let e=dj(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},w1t=C1t;var dG={};Vt(dG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Lvt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>Zr,npmPublishUtils:()=>ow});Ye();var D1e=$e(zn());var Wn="npm:";var Zr={};Vt(Zr,{AuthType:()=>I1e,customPackageError:()=>ym,del:()=>R1t,get:()=>Em,getIdentUrl:()=>DQ,getPackageMetadata:()=>JC,handleInvalidAuthenticationError:()=>k0,post:()=>Q1t,put:()=>F1t});Ye();Ye();St();var wj=$e(f2()),C1e=$e(D_()),w1e=$e(zn());var Zn={};Vt(Zn,{RegistryType:()=>y1e,getAuditRegistry:()=>I1t,getAuthConfiguration:()=>Cj,getDefaultRegistry:()=>uv,getPublishRegistry:()=>B1t,getRegistryConfiguration:()=>E1e,getScopeConfiguration:()=>Ej,getScopeRegistry:()=>KC,normalizeRegistry:()=>oc});var y1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(y1e||{});function oc(t){return t.replace(/\/$/,"")}function I1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function B1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?KC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function KC(t,{configuration:e,type:r="npmRegistryServer"}){let o=Ej(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function E1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function Ej(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Cj(t,{configuration:e,ident:r}){let o=r&&Ej(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:E1e(t,{configuration:e})||e}var I1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(I1e||{});async function k0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(PQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await N1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function ym(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map,v1t=new Map;async function D1t(t){return await _e.getFactoryWithDefault(B1e,t,async()=>{let e=null;try{e=await oe.readJsonPromise(t)}catch{}return e})}async function S1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await _e.getFactoryWithDefault(v1t,t,async()=>await Em(DQ(e),{...A,customErrorMessage:ym,configuration:r,registry:a,ident:e,headers:{...n,["If-None-Match"]:o?.etag,["If-Modified-Since"]:o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=P1t(JSON.parse(h.body.toString())),I={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return B1e.set(t,Promise.resolve(I)),Promise.resolve().then(async()=>{let v=`${t}-${process.pid}.tmp`;await oe.mkdirPromise(V.dirname(v),{recursive:!0}),await oe.writeJsonPromise(v,I,{compact:!0}),await oe.renamePromise(v,t)}).catch(()=>{}),{...h,body:E}}}))}async function JC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=x1t(A,o),h=V.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await D1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let R=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(R);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let x=I["dist-tags"].latest;if(v.has(x)){let C=Object.keys(E.metadata.versions).sort(w1e.default.compare),R=C.indexOf(x);for(;v.has(C[R])&&R>=0;)R-=1;R>=0?I["dist-tags"].latest=C[R]:delete I["dist-tags"].latest}}return I}}return await S1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var v1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function P1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,C1e.default)(r,v1e)]))}}var b1t=wn.makeHash(...v1e).slice(0,6);function x1t(t,e){let r=k1t(t),o=new URL(e);return V.join(r,b1t,o.hostname)}function k1t(t){return V.join(t.get("globalFolder"),"metadata/npm")}async function Em(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await SQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await nn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await k0(p,{registry:n,configuration:e,headers:r}),p}}async function Q1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I)||p)throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Ij(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function F1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I))throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Ij(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function R1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await SQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await nn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!PQ(E)||A)throw await k0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Ij(E,{configuration:r});let I={...o,...VC(A)};try{return await nn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await k0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return KC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function SQ(t,{authType:e=2,configuration:r,ident:o}){let a=Cj(t,{configuration:r,ident:o}),n=T1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function T1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function N1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Ij(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,wj.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,wj.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function PQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!D1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Em(o.__archiveUrl,{customErrorMessage:ym,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=$e(zn());var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await Em(dl.getLocatorUrl(e),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}catch{o=await Em(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=KC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Bj=$e(zn());var bQ=W.makeIdent(null,"node-gyp"),L1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Bj.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Bj.default.valid(a.raw)?a.raw:void 0}),u=_e.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return _e.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:_e.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return _e.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return _e.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:_e.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await JC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(bQ.identHash)&&!u.peerDependencies.has(bQ.identHash)){for(let A of u.scripts.values())if(A.match(L1t)){u.dependencies.set(bQ.identHash,W.makeDescriptor(bQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var P1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!FE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!P1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var ow={};Vt(ow,{getGitHead:()=>Tvt,getPublishAccess:()=>dBe,getReadmeContent:()=>mBe,makePublishBody:()=>Rvt});Ye();Ye();St();var AG={};Vt(AG,{PackCommand:()=>U0,default:()=>gvt,packUtils:()=>wA});Ye();Ye();Ye();St();qt();var wA={};Vt(wA,{genPackList:()=>XQ,genPackStream:()=>uG,genPackageManifest:()=>iBe,hasPackScripts:()=>lG,prepareForPack:()=>cG});Ye();St();var aG=$e(Zo()),rBe=$e(Z2e()),nBe=ve("zlib"),ivt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],svt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function lG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function cG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=V.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function uG(t,e){typeof e>"u"&&(e=await XQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(V.normalize(n));for(let n of t.manifest.bin.values())r.add(V.normalize(n));let o=rBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=V.normalize(n),A=V.resolve(t.cwd,u),p=V.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,x,C=new Promise((L,U)=>{v=L,x=U}),R=L=>{L?x(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await iBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,R)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},R):R(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,nBe.createGzip)();return o.pipe(a),a}async function iBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function XQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of svt)o.reject.push(I);for(let I of ivt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=V.relative(t.cwd,I),x=V.resolve(Bt.root,v);o.reject.push(x)};a(V.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=V.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(V.resolve(Bt.root,u)),A!=null&&n.accept.push(V.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(V.resolve(Bt.root,p));for(let I of h.values())n.accept.push(V.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(V.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(V.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)sBe(n.accept,I,{cwd:Bt.root})}return await ovt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function ovt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!eBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let R of E)I=I||R===".gitignore",v=v||R===".npmignore";let x=v?await $2e(n,A,".npmignore"):I?await $2e(n,A,".gitignore"):null,C=x!==null?[x].concat(p):p;eBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)u.push([V.resolve(A,R),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(V.relative(Bt.root,A))}return a.sort()}async function $2e(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(V.join(e,r),"utf8");for(let n of a.split(/\n/g))sBe(o.reject,n,{cwd:e});return o}function avt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=V.resolve(e,t)),r&&(t=`!${t}`),t}function sBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(avt(o,{cwd:r}))}function eBe(t,{globalList:e,ignoreLists:r}){let o=zQ(t,e.accept);if(o!==0)return o===2;let a=zQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=zQ(t,n.accept);if(u!==0)return u===2;let A=zQ(t,n.reject);if(A!==0)return A===1}return!1}function zQ(t,e){let r=e,o=[];for(let a=0;a{await cG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await XQ(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await uG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};U0.paths=[["pack"]],U0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function lvt(t,{workspace:e}){let r=t.replace("%s",cvt(e)).replace("%v",uvt(e));return ue.toPortablePath(r)}function cvt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function uvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var Avt=["dependencies","devDependencies","peerDependencies"],fvt="workspace:",pvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of Avt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===fvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},hvt={hooks:{beforeWorkspacePacking:pvt},commands:[U0]},gvt=hvt;var hBe=ve("crypto"),gBe=$e(pBe());async function Rvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,hBe.createHash)("sha1").update(e).digest("hex"),E=gBe.default.fromData(e).toString(),I=r??dBe(t,u),v=await mBe(t),x=await wA.genPackageManifest(t),C=`${p}-${A}.tgz`,R=new URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...x,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:R.toString()}}},readme:v}}async function Tvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function dBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function mBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var gG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},yBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Nvt={configuration:{...gG,...yBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...gG,...yBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...gG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Lvt=Nvt;var DG={};Vt(DG,{NpmAuditCommand:()=>H0,NpmInfoCommand:()=>q0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>G0,NpmPublishCommand:()=>Y0,NpmTagAddCommand:()=>K0,NpmTagListCommand:()=>W0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>J0,default:()=>jvt,npmAuditTypes:()=>Rv,npmAuditUtils:()=>ZQ});Ye();Ye();qt();var wG=$e(Zo());Za();var Rv={};Vt(Rv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var ZQ={};Vt(ZQ,{allSeverities:()=>aw,getPackages:()=>CG,getReportTree:()=>yG,getSeverityInclusions:()=>mG,getTopLevelDependencies:()=>EG});Ye();var EBe=$e(zn());var aw=["info","low","moderate","high","critical"];function mG(t){if(typeof t>"u")return new Set(aw);let e=aw.indexOf(t),r=aw.slice(e);return new Set(r)}function yG(t){let e={},r={children:e};for(let[o,a]of _e.sortMap(Object.entries(t),n=>n[0]))for(let n of _e.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(EBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:_e.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function EG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function CG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),x=_e.getMapWithDefault(o,v);_e.getArrayWithDefault(x,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var H0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Ks(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Ks(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=EG(o,a,{all:this.all,environment:this.environment}),u=CG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>wG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=Zr.post("/-/npm/v1/security/advisories/bulk",p,{authType:Zr.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,ae])=>{let fe=await Zr.getPackageMetadata(W.parseIdent(te),{project:o});return _e.mapAndFilter(ae,ce=>{let{deprecated:me}=fe.versions[ce];return me?[te,ce,me]:_e.mapAndFilter.skip})})),J=await L;for(let[te,ae,fe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(ce=>kr.satisfiesWithPrereleases(ae,ce.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:fe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ae}));E=J});if(I.hasErrors())return I.exitCode();let v=mG(this.severity),x=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!wG.default.isMatch(`${te.id}`,x)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let ae=u.get(L);if(typeof ae>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let fe=[...ae.keys()].filter(me=>kr.satisfiesWithPrereleases(me,te.vulnerable_versions)),ce=new Map;for(let me of fe)for(let he of ae.get(me))ce.set(he.locatorHash,he);return{...te,versions:fe,dependents:[...ce.values()]}}))}let R=Object.keys(C).length>0;return R?($s.emitTree(yG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),R?1:0)}};H0.paths=[["npm","audit"]],H0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${aw.map(r=>`\`${r}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();St();qt();var IG=$e(zn()),BG=ve("util"),q0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let ae=o.topLevelWorkspace;if(!ae.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(V.join(ae.cwd,dr.manifest))}`);E=W.makeDescriptor(ae.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=Zr.getIdentUrl(E),v=vG(await Zr.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:Zr.customPackageError})),x=Object.keys(v.versions).sort(IG.default.compareLoose),R=v["dist-tags"].latest||x[x.length-1],L=kr.validRange(E.range);if(L){let ae=IG.default.maxSatisfying(x,L);ae!==null?R=ae:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?R=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[R],J={...v,...U,version:R,versions:x},te;if(a!==null){te={};for(let ae of a){let fe=J[ae];if(typeof fe<"u")te[ae]=fe;else{p.reportWarning(1,`The ${de.pretty(r,ae,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});BG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,BG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};q0.paths=[["npm","info"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function vG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=vG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=vG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var CBe=$e(f2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await Uvt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await Ovt(o,u,r);return await Mvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function $Q({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await fC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Ovt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:Zr.AuthType.NO_AUTH};try{return(await Zr.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:Zr.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await Zr.get(o,u);for(let[E,I]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=I);let p=`${o}/-rev/${a._rev}`;return(await Zr.put(p,a,u)).token}async function Mvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=_e.isIndexableObject(A)?A:{},h=p[u],E=_e.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function Uvt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,CBe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ye();Ye();qt();var lw=new Set(["npmAuthIdent","npmAuthToken"]),G0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await Hvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await wBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish});await wBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};G0.paths=[["npm","logout"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function _vt(t,e){let r=t[e];if(!_e.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...lw].every(n=>!o.has(n)))return!1;for(let n of lw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of lw)delete a[n];return t[e]=a,!0}async function Hvt(){let t=e=>{let r=!1,o=_e.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))_vt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function wBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=_e.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=_e.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...lw].every(p=>!u.has(p)))return r;for(let p of lw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of lw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var Y0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await Zr.get(Zr.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await wA.prepareForPack(a,{report:h},async()=>{let E=await wA.genPackList(a);for(let R of E)h.reportInfo(null,R);let I=await wA.genPackStream(a,E),v=await _e.bufferStream(I),x=await ow.getGitHead(a.cwd),C=await ow.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:x});await Zr.put(Zr.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};Y0.paths=[["npm","publish"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var IBe=$e(zn());Ye();St();qt();var W0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(V.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Tv(n,r),p={children:_e.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};W0.paths=[["npm","tag","list"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Tv(t,e){let r=`/-/package${Zr.getIdentUrl(t)}/dist-tags`;return Zr.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Zr.customPackageError})}var K0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!IBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let x=await Tv(n,r);Object.hasOwn(x,this.tag)&&x[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};K0.paths=[["npm","tag","add"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Tv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var J0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await fC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await Zr.get("/-/whoami",{configuration:r,registry:o,authType:Zr.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};J0.paths=[["npm","whoami"]],J0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[H0,q0,j0,G0,Y0,K0,W0,V0,J0]},jvt=qvt;var FG={};Vt(FG,{PatchCommand:()=>Z0,PatchCommitCommand:()=>X0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>aDt,patchUtils:()=>Sm});Ye();Ye();St();nA();var Sm={};Vt(Sm,{applyPatchFile:()=>tF,diffFolders:()=>kG,ensureUnpatchedDescriptor:()=>SG,ensureUnpatchedLocator:()=>nF,extractPackageToDisk:()=>xG,extractPatchFlags:()=>xBe,isParentRequired:()=>bG,isPatchDescriptor:()=>rF,isPatchLocator:()=>z0,loadPatchFiles:()=>Mv,makeDescriptor:()=>iF,makeLocator:()=>PG,makePatchHash:()=>QG,parseDescriptor:()=>Lv,parseLocator:()=>Ov,parsePatchFile:()=>Nv,unpatchDescriptor:()=>iDt,unpatchLocator:()=>sDt});Ye();St();Ye();St();var Gvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function cw(t){return V.relative(Bt.root,V.resolve(Bt.root,ue.toPortablePath(t)))}function Yvt(t){let e=t.trim().match(Gvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Wvt=420,Kvt=493;var BBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Vvt=t=>({header:Yvt(t),parts:[]}),Jvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function zvt(t){let e=[],r=BBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=BBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:cw(E),toPath:cw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(p),hash:v})}break;case"file creation":{let te=n||R;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(h),hash:x})}break;case"patch":case"mode change":J=R||n;break;default:_e.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:cw(J),oldMode:eF(u),newMode:eF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:cw(J),hunks:L,beforeHash:v,afterHash:x})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function eF(t){let e=parseInt(t,8)&511;if(e!==Wvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Xvt(zvt(e))}function Zvt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:_e.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();St();var uw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function Aw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function tF(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await Aw(e,V.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await Aw(e,V.dirname(a.fromPath),async()=>{await Aw(e,V.dirname(a.toPath),async()=>{await Aw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(V.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await Aw(e,a.path,async()=>{await tDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(vBe(a.newMode)!==vBe(u))continue;await Aw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:_e.assertNever(a);break}}function vBe(t){return(t&64)>0}function DBe(t){return t.replace(/\s+$/,"")}function eDt(t,e){return DBe(t)===DBe(e)}async function tDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),x=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),R=Math.max(x,C),L=0,U=0,J=null;for(;L<=R;){if(L<=x&&(U=v-L,J=SBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=SBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new uw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let x=v.index+E;u.splice(x,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:_e.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function SBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!eDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:_e.assertNever(a.type);break}return o}var nDt=/^builtin<([^>]+)>$/;function fw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function rF(t){return t.range.startsWith("patch:")}function z0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=fw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Ov(t){let{sourceItem:e,...r}=fw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function iDt(t){let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function sDt(t){let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function SG(t){if(!rF(t))return t;let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function nF(t){if(!z0(t))return t;let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function PBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function iF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,PBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function PG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,PBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function bBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(nDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):V.isAbsolute(a)?t(a):e(a)}function xBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function bG(t){return bBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Mv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await _e.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=xBe(u),p=await bBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(V.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(V.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function xG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=nF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=V.join(A,"source"),h=V.join(A,"user"),E=V.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let x,C;if(t.locatorHash===a.locatorHash){let R=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>R.releaseFs?.()),x=R,C=R}else x=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>x.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,x.prefixPath,{baseFs:x.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let x of v)x()}return oe.detachTemp(A),h}async function kG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${_e.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${_e.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(_e.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(_e.escapeRegExp(`${o}/`),"g"),"")}function QG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function kBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:_e.assertNever(o.type)}}var Uv=class{supports(e,r){return!!z0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Ov(e),A=await Mv(o,u,r),p=await oe.mktempPromise(),h=V.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await _e.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:x,optional:C}of A){if(x===null)continue;let R=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(V.resolve(Bt.root,I),{baseFs:R});try{await tF(Nv(x),{baseFs:L,version:n})}catch(U){if(!(U instanceof uw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",ae=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,fe=ce=>{!J||kBe(U.hunk,{configuration:r.project.configuration,report:ce})};if(R.discardAndClose(),C){r.report.reportWarningOnce(66,ae,{reportExtra:fe});continue}else throw new zt(66,ae,fe)}R.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!rF(e)}supportsLocator(e,r){return!!z0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!bG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Mv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=QG(u,A.version);return[PG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Ov(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();St();qt();var X0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=V.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=V.join(n,"../source"),A=V.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await kG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=V.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let x=[],C=new Map;for(let R of o.storedPackages.values()){if(W.isVirtualLocator(R))continue;let L=R.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=SG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let fe=o.tryWorkspaceByLocator(R);if(fe)x.push(fe);else{let ce=o.originalPackages.get(R.locatorHash);if(!ce)throw new Error("Assertion failed: Expected the original package to have been registered");let me=ce.dependencies.get(L.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(me.descriptorHash,me)}}for(let R of x)for(let L of Ot.hardDependencies){let U=R.manifest[L].get(E.identHash);if(!U)continue;let J=iF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});R.manifest[L].set(U.identHash,J)}for(let R of C.values()){let L=iF(R,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:R.range}},reference:L.range})}await o.persist()}};X0.paths=[["patch-commit"]],X0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();St();qt();var Z0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=_e.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?_e.mapAndFilter.skip:W.isVirtualLocator(p)?_e.mapAndFilter.skip:z0(p)!==this.update?_e.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=nF(u),h=await xG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};Z0.paths=[["patch"]],Z0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var oDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[X0,Z0],fetchers:[Uv],resolvers:[_v]},aDt=oDt;var NG={};Vt(NG,{PnpmLinker:()=>Hv,default:()=>fDt});Ye();St();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=V.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new RG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},RG=class{constructor(e){this.opts=e;this.asyncActions=new _e.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=SD(oe,{indexPath:V.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=V.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?V.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=lDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:yA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=yA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!QBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await cDt(a),A=new Map(u),p=[n],h=(I,v)=>{let x=v;QBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),x=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(x.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let R=W.stringifyIdent(I),L=V.join(a,R),U=V.relative(V.dirname(L),C.packageLocation),J=A.get(R);A.delete(R),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(V.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(uDt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=RBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=V.contains(e,o);if(a===null)continue;let[n]=a.split(V.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(V.join(e,o))}))}return await this.asyncActions.wait(),await TG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await TG(FBe(this.opts.project)),{customData:this.customData}}};function FBe(t){return V.join(t.cwd,dr.nodeModules)}function RBe(t){return V.join(FBe(t),".store")}function lDt(t,{project:e}){let r=W.slugifyLocator(t),o=RBe(e),a=V.join(o,r,"package"),n=V.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function QBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function cDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(V.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function uDt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(V.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>TG(V.join(t,a)))))}async function TG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var ADt={linkers:[Hv]},fDt=ADt;var qG={};Vt(qG,{StageCommand:()=>$0,default:()=>BDt,stageUtils:()=>oF});Ye();St();qt();Ye();St();var oF={};Vt(oF,{ActionType:()=>LG,checkConsensus:()=>sF,expandDirectory:()=>UG,findConsensus:()=>_G,findVcsRoot:()=>OG,genCommitMessage:()=>HG,getCommitPrefix:()=>TBe,isYarnFile:()=>MG});St();var LG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(LG||{});async function OG(t,{marker:e}){do if(!oe.existsSync(V.join(t,e)))t=V.dirname(t);else return t;while(t!=="/");return null}function MG(t,{roots:e,names:r}){if(r.has(V.basename(t)))return!0;do if(!e.has(t))t=V.dirname(t);else return!0;while(t!=="/");return!1}function UG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=V.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function sF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function _G(t){let e=sF(t,/^(\w\(\w+\):\s*)?\w+s/),r=sF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=sF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function TBe(t){return t.useComponent?"chore(yarn): ":""}var pDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function HG(t,e){let r=TBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=pDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var hDt="Commit generated via `yarn stage`",gDt=11;async function NBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function dDt(t,e){let r=[],o=e.filter(h=>V.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=V.relative(t,E);if(h===4){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x),R=await Ot.fromFile(E),L=new Map([...R.dependencies,...R.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let ae=W.stringifyIdent(te),fe=L.get(J);fe?fe.range!==te.range&&r.push([4,`${ae} to ${fe.range}`]):r.push([3,ae])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${gDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=_G(u);return HG(A,r)}var mDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},yDt={[0]:["A "],[4]:["M "],[1]:["D "]},LBe={async findRoot(t){return await OG(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?yDt:mDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=V.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return UG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(x=>u[x].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>MG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await dDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${hDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var EDt=[LBe],$0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),{driver:a,root:n}=await CDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of wDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};$0.paths=[["stage"]],$0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function CDt(t){let e=null,r=null;for(let o of EDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function wDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=V.resolve(V.dirname(e),oe.readlinkSync(e));else break}return r}var IDt={commands:[$0]},BDt=IDt;var jG={};Vt(jG,{default:()=>QDt});Ye();Ye();St();var UBe=$e(zn());Ye();var OBe=$e(zH()),vDt="e8e1bd300d860104bb8c58453ffa1eb4",DDt="OFCNCOG2CU",MBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,OBe.default)(DDt,vDt,{requester:{async send(r){try{let o=await nn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var _Be=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,PDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(V.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await MBe(r,n))return;let E=_Be(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=UBe.default.coerce(I);if(v===null)return;let x=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),x),R=_e.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return _e.mapAndFind.skip;let te=[];for(let ae of Ot.allDependencies){let fe=L.manifest[ae].get(C.identHash);typeof fe>"u"||te.push([ae,fe])}return te.length===0?_e.mapAndFind.skip:te});if(typeof R<"u")for(let[L,U]of R)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(V.join(o.cwd,"tsconfig.json"))))return;let u=_Be(r),A=W.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},xDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},kDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:PDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:xDt}},QDt=kDt;var VG={};Vt(VG,{VersionApplyCommand:()=>eg,VersionCheckCommand:()=>tg,VersionCommand:()=>rg,default:()=>zDt,versionUtils:()=>dw});Ye();Ye();qt();var dw={};Vt(dw,{Decision:()=>hw,applyPrerelease:()=>WBe,applyReleases:()=>KG,applyStrategy:()=>lF,clearVersionFiles:()=>GG,getUndecidedDependentWorkspaces:()=>jv,getUndecidedWorkspaces:()=>aF,openVersionFile:()=>gw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>qv,suggestStrategy:()=>WG,updateVersionFiles:()=>YG,validateReleaseDecision:()=>pw});Ye();St();Nl();qt();var YBe=$e(GBe()),vA=$e(zn()),WDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,hw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(hw||{});function pw(t){let e=vA.default.valid(t);return e||_e.validateEnum((0,YBe.default)(hw,"UNDECIDED"),t)}async function qv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${V.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let x=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),R=lF(x,pw(E));if(R===null)throw new Error(`Assertion failed: Expected ${x} to support being bumped via strategy ${E}`);let L=typeof C<"u"?vA.default.gt(R,C)?R:C:R;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,WBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function GG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function YG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function gw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(x=>V.contains(u,x)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(x=>ue.fromPortablePath(x)).join(` +- `)}`);let p=new Set(_e.mapAndFilter(n,x=>{let C=t.tryWorkspaceByFilePath(x);return C===null?_e.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:V.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(E),v=new Map;for(let x of I.declined||[]){let C=W.parseIdent(x),R=t.getWorkspaceByIdent(C);v.set(R,"decline")}for(let[x,C]of Object.entries(I.releases||{})){let R=W.parseIdent(x),L=t.getWorkspaceByIdent(R);v.set(L,pw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(x=>x.manifest.version!==null)),releases:v,async saveAll(){let x={},C=[],R=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?x[U]=pw(J):p.has(L)&&R.push(U)}await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(x).length>0?x:void 0,declined:C.length>0?C:void 0,undecided:R.length>0?R:void 0})))}}}function KDt(t){return aF(t).size>0||jv(t).length>0}function aF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function jv(t,{include:e=new Set}={}){let r=[],o=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u==="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function WG(t,e){let r=vA.default.clean(e);for(let o of Object.values(hw))if(o!=="undecided"&&o!=="decline"&&vA.default.inc(t,o)===r)return o;return null}function lF(t,e){if(vA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!vA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=vA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function KG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;_e.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,vA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let x=v.range,C=!1;if(x.startsWith(Xn.protocol)&&(x=x.slice(Xn.protocol.length),C=!0,x===a.relativeCwd))continue;let R=x.match(WDt);if(!R){r.reportWarning(0,`Couldn't auto-upgrade range ${x} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${R[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var VDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function WBe(t,{current:e,prerelease:r}){let o=new vA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=VDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var eg=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await qv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let x=h.get(v);typeof x<"u"&&E.set(v,x)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}KG(o,E,{report:A}),this.dryRun||(p||(this.all?await GG(o):await YG(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};eg.paths=[["version","apply"]],eg.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();St();qt();var cF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){bC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(cQ(),Bq)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Dq(),Vwe)),{useListInput:n}=await Promise.resolve().then(()=>(AQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState();let R=await gw(x);if(R===null||R.releaseRoots.size===0)return 0;if(R.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:he,decision:Be,setDecision:we})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,me.anchoredLocator)})`);if(cF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(Be,Ee,{active:he,minus:"left",plus:"right",set:we});let Se=Be==="undecided"?h.createElement(p,{color:"yellow"},g):Be==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},cF.default.valid(Be)?Be:cF.default.inc(g,Be)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,me.anchoredLocator)," - ",Se)),h.createElement(A,null,Ee.map(le=>h.createElement(A,{key:le,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:le===Be})," ",le)))))},J=me=>{let he=new Set(R.releaseRoots),Be=new Map([...me].filter(([we])=>he.has(we)));for(;;){let we=jv({project:R.project,releases:Be}),g=!1;if(we.length>0){for(let[Ee]of we)if(!he.has(Ee)){he.add(Ee),g=!0;let Se=me.get(Ee);typeof Se<"u"&&Be.set(Ee,Se)}}if(!g)break}return{relevantWorkspaces:he,relevantReleases:Be}},te=()=>{let[me,he]=I(()=>new Map(R.releases)),Be=E((we,g)=>{let Ee=new Map(me);g!=="undecided"?Ee.set(we,g):Ee.delete(we);let{relevantReleases:Se}=J(Ee);he(Se)},[me,he]);return[me,Be]},ae=({workspaces:me,releases:he})=>{let Be=[];Be.push(`${me.size} total`);let we=0,g=0;for(let Ee of me){let Se=he.get(Ee);typeof Se>"u"?g+=1:Se!=="decline"&&(we+=1)}return Be.push(`${we} release${we===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},ce=await u(({useSubmit:me})=>{let[he,Be]=te();me(he);let{relevantWorkspaces:we}=J(he),g=new Set([...we].filter(ne=>!R.releaseRoots.has(ne))),[Ee,Se]=I(0),le=E(ne=>{switch(ne){case a.BEFORE:Se(Ee-1);break;case a.AFTER:Se(Ee+1);break}},[Ee,Se]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...R.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(R.root)),ue.sep,ue.relative(ue.fromPortablePath(R.root),ue.fromPortablePath(ne)))))),R.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:R.releaseRoots,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:le},[...R.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:g,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:le},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))):null)},{versionFile:R},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ce>"u")return 1;R.releases.clear();for(let[me,he]of ce)R.releases.set(me,he);await R.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await gw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=aF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=jv(A);for(let[v,x]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,x)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};tg.paths=[["version","check"]],tg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var uF=$e(zn());var rg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=uF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=WG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!uF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=pw(this.strategy)}if(!n){let I=(await qv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=lF(a.manifest.version,p);if(uF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await gw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};rg.paths=[["version"]],rg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var JDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[eg,tg,rg]},zDt=JDt;var JG={};Vt(JG,{WorkspacesFocusCommand:()=>ng,WorkspacesForeachCommand:()=>ap,default:()=>$Dt});Ye();Ye();qt();var ng=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};ng.paths=[["workspaces","focus"]],ng.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var mw=$e(Zo()),VBe=$e(id());Za();var ap=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:TT([Ks(["unlimited"]),aI(RT(),[LT(),NT(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=we=>{!this.dryRun||this.context.stdout.write(`${we} +`)},p=()=>{let we=this.from.map(g=>mw.default.matcher(g));return o.workspaces.filter(g=>{let Ee=W.stringifyIdent(g.anchoredLocator),Se=g.relativeCwd;return we.some(le=>le(Ee)||le(Se))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let we of h)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let we of E)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let we of o.workspaces)if(we.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let we of h){if(u&&!we.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(we)).has(u)){A(`Excluding ${we.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&we.cwd===a.cwd)){if(this.include.length>0&&!mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.include)&&!mw.default.isMatch(we.relativeCwd,this.include)){A(`Excluding ${we.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.exclude)||mw.default.isMatch(we.relativeCwd,this.exclude))){A(`Excluding ${we.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&we.manifest.private===!0){A(`Excluding ${we.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(we)}}if(this.dryRun)return 0;let x=this.verbose??(this.context.stdout.isTTY?1/0:0),C=x>0,R=x>1,L=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,U=L===1?!1:this.parallel,J=U?this.interlaced:!0,te=(0,VBe.default)(L),ae=new Map,fe=new Set,ce=0,me=null,he=!1,Be=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async we=>{let g=async(Ee,{commandIndex:Se})=>{if(he)return-1;!U&&R&&Se>1&&we.reportSeparator();let le=XDt(Ee,{configuration:r,label:C,commandIndex:Se}),[ne,ee]=KBe(we,{prefix:le,interlaced:J}),[Ie,Fe]=KBe(we,{prefix:le,interlaced:J});try{R&&we.reportInfo(null,`${le?`${le} `:""}Process started`);let At=Date.now(),H=await this.cli.run([this.commandName,...this.args],{cwd:Ee.cwd,stdout:ne,stderr:Ie})||0;ne.end(),Ie.end(),await ee,await Fe;let at=Date.now();if(R){let Re=r.get("enableTimers")?`, completed in ${de.pretty(r,at-At,de.Type.DURATION)}`:"";we.reportInfo(null,`${le?`${le} `:""}Process exited (exit code ${H})${Re}`)}return H===130&&(he=!0,me=H),H}catch(At){throw ne.end(),Ie.end(),await ee,await Fe,At}};for(let Ee of I)ae.set(Ee.anchoredLocator.locatorHash,Ee);for(;ae.size>0&&!we.hasErrors();){let Ee=[];for(let[ne,ee]of ae){if(fe.has(ee.anchoredDescriptor.descriptorHash))continue;let Ie=!0;if(this.topological||this.topologicalDev){let Fe=this.topologicalDev?new Map([...ee.manifest.dependencies,...ee.manifest.devDependencies]):ee.manifest.dependencies;for(let At of Fe.values()){let H=o.tryWorkspaceByDescriptor(At);if(Ie=H===null||!ae.has(H.anchoredLocator.locatorHash),!Ie)break}}if(!!Ie&&(fe.add(ee.anchoredDescriptor.descriptorHash),Ee.push(te(async()=>{let Fe=await g(ee,{commandIndex:++ce});return ae.delete(ne),fe.delete(ee.anchoredDescriptor.descriptorHash),Fe})),!U))break}if(Ee.length===0){let ne=Array.from(ae.values()).map(ee=>W.prettyLocator(r,ee.anchoredLocator)).join(", ");we.reportError(3,`Dependency cycle detected (${ne})`);return}let le=(await Promise.all(Ee)).find(ne=>ne!==0);me===null&&(me=typeof le<"u"?1:me),(this.topological||this.topologicalDev)&&typeof le<"u"&&we.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return me!==null?me:Be.exitCode()}};ap.paths=[["workspaces","foreach"]],ap.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),ap.schema=[cI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),OT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function KBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new _e.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new _e.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function XDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var ZDt={commands:[ng,ap]},$Dt=ZDt;var pC=()=>({modules:new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",eSt],["typanion",Vo],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",DH],["@yarnpkg/plugin-file",PH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",FH],["@yarnpkg/plugin-interactive-tools",Tq],["@yarnpkg/plugin-link",Nq],["@yarnpkg/plugin-nm",yj],["@yarnpkg/plugin-npm",dG],["@yarnpkg/plugin-npm-cli",DG],["@yarnpkg/plugin-pack",AG],["@yarnpkg/plugin-patch",FG],["@yarnpkg/plugin-pnp",oj],["@yarnpkg/plugin-pnpm",NG],["@yarnpkg/plugin-stage",qG],["@yarnpkg/plugin-typescript",jG],["@yarnpkg/plugin-version",VG],["@yarnpkg/plugin-workspace-tools",JG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function XBe({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:rn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function tSt(t){if(_e.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function ZBe({selfPath:t,pluginConfiguration:e}){return await Ke.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function rSt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,JBe.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function nSt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?V.resolve(r):V.cwd(),o}function iSt(t,{configuration:e}){if(!e.get("enableTelemetry")||zBe.isCI||!process.stdout.isTTY)return;Ke.telemetry=new uC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())AC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function $Be(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function sSt(t,e,{selfPath:r,pluginConfiguration:o}){if(!tSt(t))return 1;let a=await ZBe({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return rSt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=nSt(t,e);iSt(t,{configuration:a}),$Be(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function $pe({cwd:t=V.cwd(),pluginConfiguration:e=pC()}={}){let r=XBe({cwd:t,pluginConfiguration:e}),o=await ZBe({pluginConfiguration:e,selfPath:null});return $Be(r,{configuration:o}),r}async function nk(t,{cwd:e=V.cwd(),selfPath:r,pluginConfiguration:o}){let a=XBe({cwd:e,pluginConfiguration:o});try{process.exitCode=await sSt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}nk(process.argv.slice(2),{cwd:V.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:pC()});})(); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** @license React v0.18.0 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v0.24.0 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v16.13.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000000..ca9fc37d061 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,5 @@ +checksumBehavior: update + +nodeLinker: node-modules + +yarnPath: .yarn/releases/yarn-4.1.1.cjs diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..b9ddec95005 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:lts +WORKDIR /app + +COPY package.json yarn.lock ./ + +COPY . . + +EXPOSE 5086 + +CMD [ "yarn", "dev" ] diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000..338979ddc79 --- /dev/null +++ b/LICENSE @@ -0,0 +1,174 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. \ No newline at end of file diff --git a/README.md b/README.md index e34a99b446b..7a9556e4917 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,90 @@ -# Astro Starter Kit: Minimal +# Chocolatey Docs -```sh -npm create astro@latest -- --template minimal +This repository contains the source files for the documentation site that can be found here: + +https://docs.chocolatey.org/en-us/ + +This site is built using [Astro](https://astro.build/). + +## Writing Documentation + +Listed below are some of the areas we consider important when writing. We have two goals: + +* **Consistency**. It's important when writing to be consistent in all areas including, but not limited to, headings, code style, formatting, use of bold and italics. We acknowledge that as our writing style has evolved not all of our writing has followed. When we write we should be consistent. +* **Clarity**. When writing we must remember to write for others and not just for ourselves. It's important to understand that jargon or acronyms can cause confusion, misunderstanding and a barrier for others who are not familiar with the terms. Avoid using jargon where you can and only use acronyms once they have been defined. Ensure any [jargon or acronyms used are documented](https://docs.chocolatey.org/en-us/information/jargon-buster). + +To help with these goals, please refer to our guides on [writing documentation](https://design.chocolatey.org/content-and-marketing/writing-documentation) and the use of [language and grammar](https://design.chocolatey.org/content-and-marketing/language-and-grammar). + +## Building the Site + +There are multiple options to build the site: + +1. Build it on [your own computer](#build-the-site-on-your-computer). +1. Open in [GitHub Codespaces](https://codespaces.new/chocolatey/docs?devcontainer_path=.devcontainer/devcontainer.json). +1. Build it using a [Docker container](#build-the-site-using-a-docker-container). +1. Build it using a [Dev Container](https://containers.dev/) which utilizes Docker and provides additional tooling. + +### Build the Site On Your Computer + +Ensure that you have Node v20+ installed by running `node -v`. There is a `.\setup.ps1` file in the root of this repository that uses Chocolatey to install or upgrade Node to the correct version. + +After confirming the required Node version, run the following command: + +``` +yarn dev ``` -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/minimal) -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/minimal/devcontainer.json) +This will compile the site, and bring up a preview on `http:localhost:5086`. Any changes you make will automatically be hot reloaded. + +### Build the Site Using a Docker Container -> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! +There are two ways to build the site using [Docker](https://www.docker.com/): -## 🚀 Project Structure +* [Using the Visual Studio Code Dev Containers extension](#using-the-visual-studio-code-dev-containers-extension). +* [Running the Docker container from the command line](#running-the-docker-container-from-the-command-line). -Inside of your Astro project, you'll see the following folders and files: +#### Using the Visual Studio Code Dev Containers Extension + +Connect to the Docker Container in Visual Studio Code. This will launch Visual Studio Code and open a terminal that is running inside the Docker Container whose configuration is defined in `/.devcontainer/devcontainer.json` and `/.devcontainer/Dockerfile`. + +After the Docker Container has finished setup, move to a terminal and run the following: + +``` +docker run -p 5086:5086 -v $(pwd):/app chocolatey-docs-container +``` +This will compile the site, and bring up a preview on `http:localhost:5086`. Any changes you make will automatically be hot reloaded. + +#### Running the Docker Container From the Command Line + +From the terminal, run the following: -```text -/ -├── public/ -├── src/ -│ └── pages/ -│ └── index.astro -└── package.json ``` +docker build -t chocolatey-docs-container . +``` + +Once this is complete, run the following from the same terminal: + +``` +docker run -p 5086:5086 -v $(pwd):/app chocolatey-docs-container +``` + +This will compile the site, and bring up a preview on `http:localhost:5086`. Any changes you make will automatically be hot reloaded. + +### Troubleshooting the build -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. +If you are having build errors with `'copyTheme' errored after`, try removing the `node_modules` directory and clearing your yarn cache with `yarn cache clean`. -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. +If you receive the error `The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open file descriptors has been reached` then you can increase the number by running `echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p`. See [this GitHub comment](https://github.com/dotnet/aspnetcore/issues/8449#issuecomment-512275929) for more information. -Any static assets, like images, can be placed in the `public/` directory. +## Build Status -## 🧞 Commands +[![GitHub Actions Build Status](https://github.com/chocolatey/docs/workflows/Publish%20Documentation/badge.svg)](https://github.com/chocolatey/docs/actions?query=workflow%3A%22Build+Pull+Request%22) -All commands are run from the root of the project, from a terminal: +## Chat Room +Come join in the conversation about Chocolatey in our [Community Chat Room](https://ch0.co/community). -| Command | Action | -| :------------------------ | :----------------------------------------------- | -| `npm install` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:4321` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | -| `npm run astro -- --help` | Get help using the Astro CLI | +Please make sure you've read over and agree with the [etiquette regarding communication](https://github.com/chocolatey/choco/blob/master/README.md#etiquette-regarding-communication). -## 👀 Want to learn more? +## Search -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). +Search uses [Algolia DocSearch](https://docsearch.algolia.com/) as backend. diff --git a/astro.config.mjs b/astro.config.mjs index 882e6515a67..728fd62ac89 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,4 +1,341 @@ import { defineConfig } from 'astro/config'; +import mdx from '@astrojs/mdx'; +import sitemap from '@astrojs/sitemap'; +import remarkCustomHeaderId from 'remark-custom-header-id'; // https://astro.build/config -export default defineConfig({}); +export default defineConfig({ + site: 'https://docs.chocolatey.org', + server: { + port: 5086, + host: true + }, + markdown: { + syntaxHighlight: false, // Temporarily disable syntax highlighting and rely on Prism.js via choco-theme + remarkPlugins: [ + remarkCustomHeaderId, + ], + }, + prefetch: { + prefetchAll: true + }, + experimental: { + // contentCollectionCache: true, // This gives wonky results sometimes and it's hard to remember why. Best not to use this option. + }, + integrations: [mdx(), sitemap()], + redirects: { + '/docs/release-notes-agent': '/en-us/agent/release-notes', + '/en-us/quick-deployment/azure/client-setup': '/en-us/c4b-environments/azure/client-setup', + '/en-us/quick-deployment/azure/': '/en-us/c4b-environments/azure/', + '/en-us/quick-deployment/azure/packages': '/en-us/c4b-environments/azure/packages', + '/en-us/quick-deployment/azure/rdp': '/en-us/c4b-environments/azure/rdp', + '/en-us/guides/organizations/quick-start-guide/certificate-renewal': '/en-us/c4b-environments/quick-start-environment/certificate-renewal', + '/docs/chocolatey-for-business-quick-start-guide': '/en-us/c4b-environments/quick-start-environment/chocolatey-for-business-quick-start-guide', + '/en-us/guides/organizations/quick-start-guide/chocolatey-for-business-quick-start-guide': '/en-us/c4b-environments/quick-start-environment/chocolatey-for-business-quick-start-guide', + '/en-us/c4b-environments/quick-deployment/v1/firewall-changes': '/en-us/c4b-environments/quick-start-environment/firewall-rules', + '/en-us/guides/organizations/quick-start-guide': '/en-us/c4b-environments/quick-start-environment/', + '/en-us/quick-deployment': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/release-notes': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/desktop-readme': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/ssl-setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/client-setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/internet-setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/upgrade-license': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/v1/': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/v1/setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/v1/desktop-readme': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/v1/ssl-setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/v1/client-setup': '/en-us/c4b-environments/quick-start-environment/qde-deprecation', + '/en-us/c4b-environments/quick-deployment/setup/upgrade-nexus-qde': '/en-us/c4b-environments/quick-start-environment/upgrade-nexus', + '/docs/add-ccmgroup': '/en-us/central-management/chococcm/functions/AddCCMGroup', + '/docs/add-ccmgroup-member': '/en-us/central-management/chococcm/functions/AddCCMGroupMember', + '/docs/connect-ccmserver': '/en-us/central-management/chococcm/functions/ConnectCCMServer', + '/docs/disable-ccmdeployment': '/en-us/central-management/chococcm/functions/DisableCCMDeployment', + '/docs/export-ccmdeployment': '/en-us/central-management/chococcm/functions/ExportCCMDeployment', + '/docs/export-ccmdeployment-report': '/en-us/central-management/chococcm/functions/ExportCCMDeploymentReport', + '/docs/export-ccmoutdated-software-report': '/en-us/central-management/chococcm/functions/ExportCCMOutdatedSoftwareReport', + '/docs/get-ccmcomputer': '/en-us/central-management/chococcm/functions/GetCCMComputer', + '/docs/get-ccmdeployment': '/en-us/central-management/chococcm/functions/GetCCMDeployment', + '/docs/get-ccmgroup': '/en-us/central-management/chococcm/functions/GetCCMGroup', + '/docs/get-ccmgroup-member': '/en-us/central-management/chococcm/functions/GetCCMGroupMember', + '/docs/get-ccmoutdated-software': '/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftware', + '/docs/get-ccmoutdated-software-member': '/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareMember', + '/docs/get-ccmoutdated-software-report': '/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReport', + '/docs/get-ccmoutdated-software-report-detail': '/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReportDetail', + '/docs/get-ccmrole': '/en-us/central-management/chococcm/functions/GetCCMRole', + '/docs/get-ccmsoftware': '/en-us/central-management/chococcm/functions/GetCCMSoftware', + '/docs/get-deployment-result': '/en-us/central-management/chococcm/functions/GetDeploymentResult', + '/docs/import-pdqdeploy-package': '/en-us/central-management/chococcm/functions/ImportPDQDeployPackage', + '/docs/move-ccmdeployment-to-ready': '/en-us/central-management/chococcm/functions/MoveCCMDeploymentToReady', + '/docs/new-ccmdeployment': '/en-us/central-management/chococcm/functions/NewCCMDeployment', + '/docs/new-ccmdeployment-step': '/en-us/central-management/chococcm/functions/NewCCMDeploymentStep', + '/docs/new-ccmoutdated-software-report': '/en-us/central-management/chococcm/functions/NewCCMOutdatedSoftwareReport', + '/docs/remove-ccmdeployment': '/en-us/central-management/chococcm/functions/RemoveCCMDeployment', + '/docs/remove-ccmdeployment-step': '/en-us/central-management/chococcm/functions/RemoveCCMDeploymentStep', + '/docs/remove-ccmgroup': '/en-us/central-management/chococcm/functions/RemoveCCMGroup', + '/docs/remove-ccmgroup-member': '/en-us/central-management/chococcm/functions/RemoveCCMGroupMember', + '/docs/remove-ccmstale-deployment': '/en-us/central-management/chococcm/functions/RemoveCCMStaleDeployment', + '/docs/set-ccmdeployment-step': '/en-us/central-management/chococcm/functions/SetCCMDeploymentStep', + '/docs/set-ccmgroup': '/en-us/central-management/chococcm/functions/SetCCMGroup', + '/docs/set-ccmnotification-status': '/en-us/central-management/chococcm/functions/SetCCMNotificationStatus', + '/docs/start-ccmdeployment': '/en-us/central-management/chococcm/functions/StartCCMDeployment', + '/docs/stop-ccmdeployment': '/en-us/central-management/chococcm/functions/StopCCMDeployment', + '/docs/choco-ccmfunction-reference': '/en-us/central-management/chococcm/functions/', + '/docs/central-management': '/en-us/central-management/', + '/docs/release-notes-central-management': '/en-us/central-management/release-notes', + '/docs/central-management-setup-client': '/en-us/central-management/setup/client', + '/docs/central-management-setup-database': '/en-us/central-management/setup/database', + '/docs/central-management-setup': '/en-us/central-management/setup/', + '/docs/central-management-setup-service': '/en-us/central-management/setup/service', + '/docs/central-management-setup-upgrade': '/en-us/central-management/setup/upgrade', + '/docs/central-management-setup-web': '/en-us/central-management/setup/website', + '/docs/central-management-api': '/en-us/central-management/usage/api/', + '/en-us/central-management/usage/examples/deployments': '/en-us/central-management/usage/examples/deployment-plans', + '/en-us/central-management/usage/website/sensitive-variables': '/en-us/central-management/usage/website/administration/sensitive-variables', + '/en-us/central-management/usage/website/encryption-passphrase': '/en-us/central-management/usage/website/administration/settings/encryption-passphrase', + '/en-us/central-management/usage/website/administration/settings/audit-retention': '/en-us/central-management/usage/website/administration/settings/retention', + '/en-us/central-management/usage/website/administration/settings/stale-computer-deletion': '/en-us/central-management/usage/website/administration/settings/retention', + '/docs/central-management-computers': '/en-us/central-management/usage/website/computers', + '/en-us/central-management/usage/computers': '/en-us/central-management/usage/website/computers', + '/docs/central-management-deployments': '/en-us/central-management/usage/website/deployments', + '/en-us/central-management/usage/deployments': '/en-us/central-management/usage/website/deployments', + '/docs/central-management-groups': '/en-us/central-management/usage/website/groups', + '/en-us/central-management/usage/groups': '/en-us/central-management/usage/website/groups', + '/docs/central-management-reports': '/en-us/central-management/usage/website/reports', + '/en-us/central-management/usage/reports': '/en-us/central-management/usage/website/reports', + '/docs/central-management-software': '/en-us/central-management/usage/website/software', + '/en-us/central-management/usage/software': '/en-us/central-management/usage/website/software', + '/docs/commandscache': '/en-us/choco/commands/cache', + '/docs/commands-cache': '/en-us/choco/commands/cache', + '/docs/commandsconfig': '/en-us/choco/commands/config', + '/docs/commands-config': '/en-us/choco/commands/config', + '/docs/commandsdownload': '/en-us/choco/commands/download', + '/docs/commands-download': '/en-us/choco/commands/download', + '/docs/commandsexport': '/en-us/choco/commands/export', + '/docs/commands-export': '/en-us/choco/commands/export', + '/docs/commandsfeature': '/en-us/choco/commands/feature', + '/docs/commands-feature': '/en-us/choco/commands/feature', + '/docs/commandsfeatures': '/en-us/choco/commands/features', + '/docs/commands-features': '/en-us/choco/commands/features', + '/docs/commandsfind': '/en-us/choco/commands/find', + '/docs/commands-find': '/en-us/choco/commands/find', + '/docs/commandshelp': '/en-us/choco/commands/help', + '/docs/commands-help': '/en-us/choco/commands/help', + '/docs/commandsreference': '/en-us/choco/commands/', + '/docs/commands-reference': '/en-us/choco/commands/', + '/docs/commandsinfo': '/en-us/choco/commands/info', + '/docs/commands-info': '/en-us/choco/commands/info', + '/docs/commandsinstall': '/en-us/choco/commands/install', + '/docs/commands-install': '/en-us/choco/commands/install', + '/docs/commandslist': '/en-us/choco/commands/list', + '/docs/commands-list': '/en-us/choco/commands/list', + '/docs/commandsoptimize': '/en-us/choco/commands/optimize', + '/docs/commands-optimize': '/en-us/choco/commands/optimize', + '/docs/commandsoutdated': '/en-us/choco/commands/outdated', + '/docs/commands-outdated': '/en-us/choco/commands/outdated', + '/docs/commandspin': '/en-us/choco/commands/pin', + '/docs/commands-pin': '/en-us/choco/commands/pin', + '/docs/commandssearch': '/en-us/choco/commands/search', + '/docs/commands-search': '/en-us/choco/commands/search', + '/docs/commandssetapikey': '/en-us/choco/commands/setapikey', + '/docs/commands-setapikey': '/en-us/choco/commands/setapikey', + '/docs/commandssource': '/en-us/choco/commands/source', + '/docs/commands-source': '/en-us/choco/commands/source', + '/docs/commandssources': '/en-us/choco/commands/sources', + '/docs/commands-sources': '/en-us/choco/commands/sources', + '/docs/commandssupport': '/en-us/choco/commands/support', + '/docs/commands-support': '/en-us/choco/commands/support', + '/docs/commandssync': '/en-us/choco/commands/sync', + '/docs/commands-sync': '/en-us/choco/commands/sync', + '/docs/commandssynchronize': '/en-us/choco/commands/synchronize', + '/docs/commands-synchronize': '/en-us/choco/commands/synchronize', + '/docs/commandsuninstall': '/en-us/choco/commands/uninstall', + '/docs/commands-uninstall': '/en-us/choco/commands/uninstall', + '/docs/commandsunpackself': '/en-us/choco/commands/unpackself', + '/docs/commands-unpackself': '/en-us/choco/commands/unpackself', + '/docs/commandsupgrade': '/en-us/choco/commands/upgrade', + '/docs/commands-upgrade': '/en-us/choco/commands/upgrade', + '/docs/release-notes-choco-cli': '/en-us/choco/release-notes', + '/docs/installation': '/en-us/choco/setup', + '/docs/install': '/en-us/choco/setup', + '/en-us/choco/installation': '/en-us/choco/setup', + '/docs/uninstallation': '/en-us/choco/uninstallation', + '/docs/chocolatey-gui-overview': '/en-us/chocolatey-gui/', + '/docs/chocolatey-gui-known-issues': '/en-us/chocolatey-gui/known-issues', + '/docs/release-notes-chocolatey-gui': '/en-us/chocolatey-gui/release-notes', + '/en-us/chocolatey-gui/setup/installation/chocolateygui': '/en-us/chocolatey-gui/setup/installation', + '/en-us/chocolatey-gui/setup/installation/chocolatey-gui': '/en-us/chocolatey-gui/setup/installation', + '/en-us/chocolatey-gui/setup/uninstallation/chocolatey-gui': '/en-us/chocolatey-gui/setup/uninstallation', + '/docs/chocolatey-install-ps1': '/en-us/chocolatey-install-ps1', + '/docs/chocolatey-story': '/en-us/chocolatey-story', + '/docs/chocolatey-vs-ninite': '/en-us/chocolatey-vs-ninite', + '/docs/community-packages-disclaimer': '/en-us/community-repository/community-packages-disclaimer', + '/docs/how-to-deprecate-a-chocolatey-package': '/en-us/community-repository/maintainers/deprecate-a-chocolatey-package', + '/docs/package-maintainer-handover': '/en-us/community-repository/maintainers/package-maintainer-handover', + '/docs/moderation': '/en-us/community-repository/moderation/', + '/docs/package-triage-process': '/en-us/community-repository/users/package-triage-process', + '/community-repository/users/package-triage-process#are-you-a-software-vendor': '/en-us/community-repository/users/software-vendor', + '/docs/chocolatey-configuration': '/en-us/configuration', + '/docs/automatic-packages': '/en-us/create/automatic-packages', + '/docs/commandsapikey': '/en-us/create/commands/api-key', + '/docs/commands-apikey': '/en-us/create/commands/api-key', + '/docs/commandsconvert': '/en-us/create/commands/convert', + '/docs/commands-convert': '/en-us/create/commands/convert', + '/docs/commandsnew': '/en-us/create/commands/new', + '/docs/commands-new': '/en-us/create/commands/new', + '/docs/commandspack': '/en-us/create/commands/pack', + '/docs/commands-pack': '/en-us/create/commands/pack', + '/docs/commandspush': '/en-us/create/commands/push', + '/docs/commands-push': '/en-us/create/commands/push', + '/docs/commandstemplate': '/en-us/create/commands/template', + '/docs/commands-template': '/en-us/create/commands/template', + '/docs/commandstemplates': '/en-us/create/commands/templates', + '/docs/commands-templates': '/en-us/create/commands/templates', + '/docs/createpackagesquickstart': '/en-us/create/create-packages-quick-start', + '/docs/create-packages-quick-start': '/en-us/create/create-packages-quick-start', + '/docs/create-packages': '/en-us/create/create-packages', + '/docs/CreatePackages': '/en-us/create/create-packages', + '/docs/helpers-format-file-size': '/en-us/create/functions/format-filesize', + '/docs/helpersformatfilesize': '/en-us/create/functions/format-filesize', + '/docs/helpers-get-checksum-valid': '/en-us/create/functions/get-checksumvalid', + '/docs/helpersgetchecksumvalid': '/en-us/create/functions/get-checksumvalid', + '/docs/helpers-get-chocolatey-config-value': '/en-us/create/functions/get-chocolateyconfigvalue', + '/docs/helpersgetchocolateyconfigvalue': '/en-us/create/functions/get-chocolateyconfigvalue', + '/docs/helpers-get-chocolatey-path': '/en-us/create/functions/get-chocolateypath', + '/docs/helpersgetchocolateypath': '/en-us/create/functions/get-chocolateypath', + '/docs/helpers-get-chocolatey-unzip': '/en-us/create/functions/get-chocolateyunzip', + '/docs/helpersgetchocolateyunzip': '/en-us/create/functions/get-chocolateyunzip', + '/docs/helpers-get-chocolatey-web-file': '/en-us/create/functions/get-chocolateywebfile', + '/docs/helpersgetchocolateywebfile': '/en-us/create/functions/get-chocolateywebfile', + '/docs/helpers-get-environment-variable': '/en-us/create/functions/get-environmentvariable', + '/docs/helpersgetenvironmentvariable': '/en-us/create/functions/get-environmentvariable', + '/docs/helpers-get-environment-variable-names': '/en-us/create/functions/get-environmentvariablenames', + '/docs/helpersgetenvironmentvariablenames': '/en-us/create/functions/get-environmentvariablenames', + '/docs/helpers-get-ftp-file': '/en-us/create/functions/get-ftpfile', + '/docs/helpersgetftpfile': '/en-us/create/functions/get-ftpfile', + '/docs/helpers-get-os-architecture-width': '/en-us/create/functions/get-osarchitecturewidth', + '/docs/helpersgetosarchitecturewidth': '/en-us/create/functions/get-osarchitecturewidth', + '/docs/helpers-get-o-s-architecture-width': '/en-us/create/functions/get-osarchitecturewidth', + '/docs/helpers-get-package-parameters': '/en-us/create/functions/get-packageparameters', + '/docs/helpersgetpackageparameters': '/en-us/create/functions/get-packageparameters', + '/docs/helpers-get-packageparameters': '/en-us/create/functions/get-packageparameters', + '/docs/helpers-get-tools-location': '/en-us/create/functions/get-toolslocation', + '/docs/helpersgettoolslocation': '/en-us/create/functions/get-toolslocation', + '/docs/helpers-get-uac-enabled': '/en-us/create/functions/get-uacenabled', + '/docs/helpersgetuacenabled': '/en-us/create/functions/get-uacenabled', + '/docs/helpers-get-uninstall-registry-key': '/en-us/create/functions/get-uninstallregistrykey', + '/docs/helpersgetuninstallregistrykey': '/en-us/create/functions/get-uninstallregistrykey', + '/docs/helpers-get-virus-check-valid': '/en-us/create/functions/get-viruscheckvalid', + '/docs/helpersgetviruscheckvalid': '/en-us/create/functions/get-viruscheckvalid', + '/docs/helpers-get-web-file': '/en-us/create/functions/get-webfile', + '/docs/helpersgetwebfile': '/en-us/create/functions/get-webfile', + '/docs/helpers-get-web-file-name': '/en-us/create/functions/get-webfilename', + '/docs/helpersgetwebfilename': '/en-us/create/functions/get-webfilename', + '/docs/helpers-get-web-headers': '/en-us/create/functions/get-webheaders', + '/docs/helpersgetwebheaders': '/en-us/create/functions/get-webheaders', + '/docs/helpers-reference': '/en-us/create/functions/', + '/docs/HelpersReference': '/en-us/create/functions/', + '/docs/helpers-install-bin-file': '/en-us/create/functions/install-binfile', + '/docs/helpersinstallbinfile': '/en-us/create/functions/install-binfile', + '/docs/helpers-install-chocolatey-environment-variable': '/en-us/create/functions/install-chocolateyenvironmentvariable', + '/docs/helpersinstallchocolateyenvironmentvariable': '/en-us/create/functions/install-chocolateyenvironmentvariable', + '/docs/helpers-install-chocolatey-explorer-menu-item': '/en-us/create/functions/install-chocolateyexplorermenuitem', + '/docs/helpersinstallchocolateyexplorermenuitem': '/en-us/create/functions/install-chocolateyexplorermenuitem', + '/docs/helpers-install-chocolatey-file-association': '/en-us/create/functions/install-chocolateyfileassociation', + '/docs/helpersinstallchocolateyfileassociation': '/en-us/create/functions/install-chocolateyfileassociation', + '/docs/helpers-install-chocolatey-install-package': '/en-us/create/functions/install-chocolateyinstallpackage', + '/docs/helpersinstallchocolateyinstallpackage': '/en-us/create/functions/install-chocolateyinstallpackage', + '/docs/helpers-install-chocolatey-package': '/en-us/create/functions/install-chocolateypackage', + '/docs/helpersinstallchocolateypackage': '/en-us/create/functions/install-chocolateypackage', + '/docs/helpers-install-chocolatey-path': '/en-us/create/functions/install-chocolateypath', + '/docs/helpersinstallchocolateypath': '/en-us/create/functions/install-chocolateypath', + '/docs/helpers-install-chocolatey-pinned-task-bar-item': '/en-us/create/functions/install-chocolateypinnedtaskbaritem', + '/docs/helpersinstallchocolateypinnedtaskbaritem': '/en-us/create/functions/install-chocolateypinnedtaskbaritem', + '/docs/helpers-install-chocolatey-powershell-command': '/en-us/create/functions/install-chocolateypowershellcommand', + '/docs/helpersinstallchocolateypowershellcommand': '/en-us/create/functions/install-chocolateypowershellcommand', + '/docs/helpers-install-chocolatey-shortcut': '/en-us/create/functions/install-chocolateyshortcut', + '/docs/helpersinstallchocolateyshortcut': '/en-us/create/functions/install-chocolateyshortcut', + '/docs/helpers-install-chocolatey-vsix-package': '/en-us/create/functions/install-chocolateyvsixpackage', + '/docs/helpersinstallchocolateyvsixpackage': '/en-us/create/functions/install-chocolateyvsixpackage', + '/docs/helpers-install-chocolatey-windows-service': '/en-us/create/functions/install-chocolateywindowsservice', + '/docs/helpers-install-chocolatey-zip-package': '/en-us/create/functions/install-chocolateyzippackage', + '/docs/helpersinstallchocolateyzippackage': '/en-us/create/functions/install-chocolateyzippackage', + '/docs/helpers-install-vsix': '/en-us/create/functions/install-vsix', + '/docs/helpersinstallvsix': '/en-us/create/functions/install-vsix', + '/docs/helpers-set-environment-variable': '/en-us/create/functions/set-environmentvariable', + '/docs/helperssetenvironmentvariable': '/en-us/create/functions/set-environmentvariable', + '/docs/helpers-set-power-shell-exit-code': '/en-us/create/functions/set-powershellexitcode', + '/docs/helperssetpowershellexitcode': '/en-us/create/functions/set-powershellexitcode', + '/docs/helpers-start-chocolatey-process-as-admin': '/en-us/create/functions/start-chocolateyprocessasadmin', + '/docs/helpersstartchocolateyprocessasadmin': '/en-us/create/functions/start-chocolateyprocessasadmin', + '/docs/helpers-start-chocolatey-windows-service': '/en-us/create/functions/start-chocolateywindowsservice', + '/docs/helpers-stop-chocolatey-windows-service': '/en-us/create/functions/stop-chocolateywindowsservice', + '/docs/helpers-test-process-admin-rights': '/en-us/create/functions/test-processadminrights', + '/docs/helperstestprocessadminrights': '/en-us/create/functions/test-processadminrights', + '/docs/helpers-uninstall-bin-file': '/en-us/create/functions/uninstall-binfile', + '/docs/helpersuninstallbinfile': '/en-us/create/functions/uninstall-binfile', + '/docs/helpers-uninstall-chocolatey-environment-variable': '/en-us/create/functions/uninstall-chocolateyenvironmentvariable', + '/docs/helpersuninstallchocolateyenvironmentvariable': '/en-us/create/functions/uninstall-chocolateyenvironmentvariable', + '/docs/helpers-uninstall-chocolatey-package': '/en-us/create/functions/uninstall-chocolateypackage', + '/docs/helpersuninstallchocolateypackage': '/en-us/create/functions/uninstall-chocolateypackage', + '/docs/helpers-uninstall-chocolatey-windows-service': '/en-us/create/functions/uninstall-chocolateywindowsservice', + '/docs/helpers-uninstall-chocolatey-zip-package': '/en-us/create/functions/uninstall-chocolateyzippackage', + '/docs/helpersuninstallchocolateyzippackage': '/en-us/create/functions/uninstall-chocolateyzippackage', + '/docs/helpers-update-session-environment': '/en-us/create/functions/update-sessionenvironment', + '/docs/helpersupdatesessionenvironment': '/en-us/create/functions/update-sessionenvironment', + '/docs/helpers-write-function-call-log-message': '/en-us/create/functions/write-functioncalllogmessage', + '/docs/helperswritefunctioncalllogmessage': '/en-us/create/functions/write-functioncalllogmessage', + '/docs/package-dependencies': '/en-us/create/package-dependencies', + '/docs/PackageDependencies': '/en-us/create/package-dependencies', + '/docs/default-chocolatey-install-reasoning': '/en-us/default-chocolatey-install-reasoning', + '/docs/chocolatey-faqs': '/en-us/faqs', + '/docs/features-branding': '/en-us/features/branding', + '/docs/features-chocolatey-central-management': '/en-us/features/chocolatey-central-management', + '/docs/how-to-create-extensions': '/en-us/features/extensions', + '/docs/how-to-host-feed': '/en-us/features/host-packages', + '/docs/features-install-directory-override': '/en-us/features/install-directory-override', + '/docs/features-infrastructure-automation': '/en-us/features/integrations', + '/docs/features-package-audit': '/en-us/features/package-audit', + '/docs/features-create-packages-from-installers': '/en-us/features/package-builder', + '/docs/features-automatically-recompile-packages': '/en-us/features/package-internalizer', + '/docs/features-package-reducer': '/en-us/features/package-reducer', + '/docs/features-synchronize': '/en-us/features/package-synchronization/', + '/docs/features-package-throttle': '/en-us/features/package-throttle', + '/docs/features-private-cdn': '/en-us/features/private-cdn', + '/docs/features-agent-service': '/en-us/features/self-service-anywhere', + '/docs/features-shim': '/en-us/features/shim', + '/docs/features-virus-check': '/en-us/features/virus-check', + '/docs/getting-started': '/en-us/getting-started', + '/docs/gettingstarted': '/en-us/getting-started', + '/docs/how-to-create-custom-package-templates': '/en-us/guides/create/create-custom-package-templates', + '/docs/how-to-mount-an-iso-in-chocolatey-package': '/en-us/guides/create/mount-an-iso-in-chocolatey-package', + '/docs/how-to-parse-package-parameters-argument': '/en-us/guides/create/parse-packageparameters-argument', + '/docs/how-to-recompile-packages': '/en-us/guides/create/recompile-packages', + '/docs/how-to-setup-internal-package-repository': '/en-us/guides/organizations/automate-package-internalization', + '/docs/how-to-setup-offline-installation': '/en-us/guides/organizations/organizational-deployment-guide', + '/docs/how-to-set-up-chocolatey-server': '/en-us/guides/organizations/set-up-chocolatey-server', + '/docs/how-to-change-cache': '/en-us/guides/usage/change-cache', + '/docs/development-environment-setup': '/en-us/guides/usage/development-environment-setup', + '/docs/how-to-install-upgrade-package-without-scripts': '/en-us/guides/usage/install-upgrade-package-without-scripts', + '/docs/proxy-settings-for-chocolatey': '/en-us/guides/usage/proxy-settings-for-chocolatey', + '/docs/hosting-chocolatey-packages-on-myget': '/en-us/hosting-chocolatey-packages-on-myget', + '/docs/history': '/en-us/information/history', + '/docs/presentations': '/en-us/information/learning-resources/presentations', + '/docs/resources': '/en-us/information/learning-resources/resources', + '/docs/videos': '/en-us/information/learning-resources/videos', + '/docs/legal': '/en-us/information/legal', + '/docs/release-notes': '/en-us/information/release-notes/floss', + '/docs/release-notes-licensed': '/en-us/information/release-notes/licensed', + '/docs/security': '/en-us/information/security', + '/docs/release-notes-extension': '/en-us/licensed-extension/release-notes', + '/docs/installation-licensed': '/en-us/licensed-extension/setup', + '/docs/logo-use-policy': '/en-us/logo-use-policy', + '/docs/migrate-old-chocolatey-directory-to-programdata': '/en-us/migrate-old-chocolatey-directory-to-programdata', + '/docs/packaging-next': '/en-us/packaging-next', + '/docs/roadmap': '/en-us/roadmap', + '/docs/troubleshooting': '/en-us/troubleshooting', + '/docs/why': '/en-us/why' + } +}); \ No newline at end of file diff --git a/package.json b/package.json index 88773e3b3e2..4036bbb6415 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,30 @@ { - "name": "", + "name": "docs", + "packageManager": "yarn@4.1.1", + "repository": { + "type": "git", + "url": "git+https://github.com/chocolatey/docs.git" + }, + "author": "chocolatey", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/chocolatey/docs/issues" + }, + "homepage": "https://github.com/chocolatey/docs#readme", "type": "module", "version": "0.0.1", "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro check && astro build", - "preview": "astro preview", - "astro": "astro" + "dev": "yarn dependencies && yarn telemetry && yarn choco-theme && npx astro dev", + "start": "yarn dev", + "build": "yarn dependencies && yarn telemetry && yarn choco-theme && npx astro check && npx astro build", + "preview": "npx astro preview", + "astro": "npx astro", + "telemetry": "npx astro telemetry disable", + "dependencies": "yarn install --immutable", + "choco-theme": "npx --quiet ts-node --skipIgnore node_modules/choco-theme/build/choco-theme.ts --repository=docs" }, "dependencies": { - "astro": "^4.7.0", - "@astrojs/check": "^0.5.10", - "typescript": "^5.4.5" + "choco-astro": "https://github.com/st3phhays/choco-astro#astro", + "choco-theme": "https://github.com/st3phhays/choco-theme#astro" } -} \ No newline at end of file +} diff --git a/public/downloads/create-embedded-script-package-tutorial.ps1 b/public/downloads/create-embedded-script-package-tutorial.ps1 new file mode 100644 index 00000000000..11d84ff27a3 --- /dev/null +++ b/public/downloads/create-embedded-script-package-tutorial.ps1 @@ -0,0 +1,8 @@ +$string = @' + Congrats! + +You've just successfully created and used your first Chocolatey script package!! +You're one step closer to becoming a Master Chocolatier. +'@ + +Write-Host $string \ No newline at end of file diff --git a/public/downloads/create-embedded-zip-package-tutorial.zip b/public/downloads/create-embedded-zip-package-tutorial.zip new file mode 100644 index 00000000000..4f38a01e9ae Binary files /dev/null and b/public/downloads/create-embedded-zip-package-tutorial.zip differ diff --git a/public/favicon.svg b/public/favicon.svg deleted file mode 100644 index f157bd1c5e2..00000000000 --- a/public/favicon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/public/images/C4B-implementation-diagram.jpg b/public/images/C4B-implementation-diagram.jpg new file mode 100644 index 00000000000..9981bc590ed Binary files /dev/null and b/public/images/C4B-implementation-diagram.jpg differ diff --git a/public/images/ChocolateyPackagingPublicVsPrivate.png b/public/images/ChocolateyPackagingPublicVsPrivate.png new file mode 100644 index 00000000000..1c2ed16da6b Binary files /dev/null and b/public/images/ChocolateyPackagingPublicVsPrivate.png differ diff --git a/public/images/Chocolatey_Future.png b/public/images/Chocolatey_Future.png new file mode 100644 index 00000000000..2ef2b01c298 Binary files /dev/null and b/public/images/Chocolatey_Future.png differ diff --git a/public/images/Chocolatey_Talk.png b/public/images/Chocolatey_Talk.png new file mode 100644 index 00000000000..590836199d9 Binary files /dev/null and b/public/images/Chocolatey_Talk.png differ diff --git a/public/images/DownloadChocolateyPackage.png b/public/images/DownloadChocolateyPackage.png new file mode 100644 index 00000000000..ade9f25577f Binary files /dev/null and b/public/images/DownloadChocolateyPackage.png differ diff --git a/public/images/automatic-packages/ketarin-jobs-advanced-settings.png b/public/images/automatic-packages/ketarin-jobs-advanced-settings.png new file mode 100644 index 00000000000..1cbc8ad39c9 Binary files /dev/null and b/public/images/automatic-packages/ketarin-jobs-advanced-settings.png differ diff --git a/public/images/c4b-ansible/playbook-prompts.jpg b/public/images/c4b-ansible/playbook-prompts.jpg new file mode 100644 index 00000000000..1825d6879d4 Binary files /dev/null and b/public/images/c4b-ansible/playbook-prompts.jpg differ diff --git a/public/images/c4b-azure/BasicsView-InstanceDetails.png b/public/images/c4b-azure/BasicsView-InstanceDetails.png new file mode 100644 index 00000000000..3b435447142 Binary files /dev/null and b/public/images/c4b-azure/BasicsView-InstanceDetails.png differ diff --git a/public/images/c4b-azure/BasicsView-LicenseUpload.png b/public/images/c4b-azure/BasicsView-LicenseUpload.png new file mode 100644 index 00000000000..7c2dfe92884 Binary files /dev/null and b/public/images/c4b-azure/BasicsView-LicenseUpload.png differ diff --git a/public/images/c4b-azure/BasicsView-ResourceGroupSelector.png b/public/images/c4b-azure/BasicsView-ResourceGroupSelector.png new file mode 100644 index 00000000000..147ce157a93 Binary files /dev/null and b/public/images/c4b-azure/BasicsView-ResourceGroupSelector.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-BackendCertAdd.png b/public/images/c4b-azure/Cert-AppGateway-BackendCertAdd.png new file mode 100644 index 00000000000..29b9ab11db8 Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-BackendCertAdd.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-BackendCertDetails.png b/public/images/c4b-azure/Cert-AppGateway-BackendCertDetails.png new file mode 100644 index 00000000000..cd3b36e3328 Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-BackendCertDetails.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-BackendCertSave.png b/public/images/c4b-azure/Cert-AppGateway-BackendCertSave.png new file mode 100644 index 00000000000..c8da357678e Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-BackendCertSave.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-BackendSettings.png b/public/images/c4b-azure/Cert-AppGateway-BackendSettings.png new file mode 100644 index 00000000000..03db302292c Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-BackendSettings.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-ListenersCert.png b/public/images/c4b-azure/Cert-AppGateway-ListenersCert.png new file mode 100644 index 00000000000..c01f572d657 Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-ListenersCert.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-ListenersSettings.png b/public/images/c4b-azure/Cert-AppGateway-ListenersSettings.png new file mode 100644 index 00000000000..31c78f7ea14 Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-ListenersSettings.png differ diff --git a/public/images/c4b-azure/Cert-AppGateway-Resource.png b/public/images/c4b-azure/Cert-AppGateway-Resource.png new file mode 100644 index 00000000000..a61b797e45a Binary files /dev/null and b/public/images/c4b-azure/Cert-AppGateway-Resource.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-AccessPolicies.png b/public/images/c4b-azure/Cert-KeyVault-AccessPolicies.png new file mode 100644 index 00000000000..bfdd52f1fa2 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-AccessPolicies.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-AddPrincipal.png b/public/images/c4b-azure/Cert-KeyVault-AddPrincipal.png new file mode 100644 index 00000000000..b65a9359dea Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-AddPrincipal.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-Cert-Import.png b/public/images/c4b-azure/Cert-KeyVault-Cert-Import.png new file mode 100644 index 00000000000..e8972620eb6 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-Cert-Import.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-Cert-New.png b/public/images/c4b-azure/Cert-KeyVault-Cert-New.png new file mode 100644 index 00000000000..c61300781c7 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-Cert-New.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-Cert-Version-List.png b/public/images/c4b-azure/Cert-KeyVault-Cert-Version-List.png new file mode 100644 index 00000000000..1853d2d4c9f Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-Cert-Version-List.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-Certificates.png b/public/images/c4b-azure/Cert-KeyVault-Certificates.png new file mode 100644 index 00000000000..42e92e289c2 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-Certificates.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-Resource.png b/public/images/c4b-azure/Cert-KeyVault-Resource.png new file mode 100644 index 00000000000..a7390538af1 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-Resource.png differ diff --git a/public/images/c4b-azure/Cert-KeyVault-SecretPermissions.png b/public/images/c4b-azure/Cert-KeyVault-SecretPermissions.png new file mode 100644 index 00000000000..4231be068c0 Binary files /dev/null and b/public/images/c4b-azure/Cert-KeyVault-SecretPermissions.png differ diff --git a/public/images/c4b-azure/DomainView-CustomDomain.png b/public/images/c4b-azure/DomainView-CustomDomain.png new file mode 100644 index 00000000000..521a46761ef Binary files /dev/null and b/public/images/c4b-azure/DomainView-CustomDomain.png differ diff --git a/public/images/c4b-azure/InternalizePackagesView.png b/public/images/c4b-azure/InternalizePackagesView.png new file mode 100644 index 00000000000..6504a0dcfff Binary files /dev/null and b/public/images/c4b-azure/InternalizePackagesView.png differ diff --git a/public/images/c4b-azure/Jenkins-Job-Fix-Internalize.png b/public/images/c4b-azure/Jenkins-Job-Fix-Internalize.png new file mode 100644 index 00000000000..83278c200bc Binary files /dev/null and b/public/images/c4b-azure/Jenkins-Job-Fix-Internalize.png differ diff --git a/public/images/c4b-azure/Jenkins-Play-Button.png b/public/images/c4b-azure/Jenkins-Play-Button.png new file mode 100644 index 00000000000..9dceee01d6c Binary files /dev/null and b/public/images/c4b-azure/Jenkins-Play-Button.png differ diff --git a/public/images/c4b-azure/KeyVault-AccessPolicies.png b/public/images/c4b-azure/KeyVault-AccessPolicies.png new file mode 100644 index 00000000000..6867b3bc25e Binary files /dev/null and b/public/images/c4b-azure/KeyVault-AccessPolicies.png differ diff --git a/public/images/c4b-azure/KeyVault-AddPrincipal.png b/public/images/c4b-azure/KeyVault-AddPrincipal.png new file mode 100644 index 00000000000..c1d4564ed0f Binary files /dev/null and b/public/images/c4b-azure/KeyVault-AddPrincipal.png differ diff --git a/public/images/c4b-azure/KeyVault-SecretPermissions.png b/public/images/c4b-azure/KeyVault-SecretPermissions.png new file mode 100644 index 00000000000..bc95b4d2e17 Binary files /dev/null and b/public/images/c4b-azure/KeyVault-SecretPermissions.png differ diff --git a/public/images/c4b-azure/KeyVault-Secrets.png b/public/images/c4b-azure/KeyVault-Secrets.png new file mode 100644 index 00000000000..13141b2f4df Binary files /dev/null and b/public/images/c4b-azure/KeyVault-Secrets.png differ diff --git a/public/images/c4b-azure/MMC-Browse-FileType.png b/public/images/c4b-azure/MMC-Browse-FileType.png new file mode 100644 index 00000000000..7bc52bf8c66 Binary files /dev/null and b/public/images/c4b-azure/MMC-Browse-FileType.png differ diff --git a/public/images/c4b-azure/MMC-Import-Certificate.png b/public/images/c4b-azure/MMC-Import-Certificate.png new file mode 100644 index 00000000000..8bcd9f27a0d Binary files /dev/null and b/public/images/c4b-azure/MMC-Import-Certificate.png differ diff --git a/public/images/c4b-azure/PublicIPAddress-EssentialsView.png b/public/images/c4b-azure/PublicIPAddress-EssentialsView.png new file mode 100644 index 00000000000..378320df540 Binary files /dev/null and b/public/images/c4b-azure/PublicIPAddress-EssentialsView.png differ diff --git a/public/images/c4b-azure/Rdp-IpConfiguration.png b/public/images/c4b-azure/Rdp-IpConfiguration.png new file mode 100644 index 00000000000..452c413f015 Binary files /dev/null and b/public/images/c4b-azure/Rdp-IpConfiguration.png differ diff --git a/public/images/c4b-azure/Rdp-IpCreation.png b/public/images/c4b-azure/Rdp-IpCreation.png new file mode 100644 index 00000000000..2272c7608f1 Binary files /dev/null and b/public/images/c4b-azure/Rdp-IpCreation.png differ diff --git a/public/images/c4b-azure/Rdp-NsgRuleAddition.png b/public/images/c4b-azure/Rdp-NsgRuleAddition.png new file mode 100644 index 00000000000..ee0ca1442f6 Binary files /dev/null and b/public/images/c4b-azure/Rdp-NsgRuleAddition.png differ diff --git a/public/images/c4b-server.png b/public/images/c4b-server.png new file mode 100644 index 00000000000..53281c0ec79 Binary files /dev/null and b/public/images/c4b-server.png differ diff --git a/public/images/ccm-manual/deployment-plans/email-deployment-success.png b/public/images/ccm-manual/deployment-plans/email-deployment-success.png new file mode 100644 index 00000000000..4d3965b351c Binary files /dev/null and b/public/images/ccm-manual/deployment-plans/email-deployment-success.png differ diff --git a/public/images/ccm-manual/deployment-plans/email-failed-scheduled-start.png b/public/images/ccm-manual/deployment-plans/email-failed-scheduled-start.png new file mode 100644 index 00000000000..87626fb7f35 Binary files /dev/null and b/public/images/ccm-manual/deployment-plans/email-failed-scheduled-start.png differ diff --git a/public/images/ccm-manual/deployment-plans/modal-import-deployment-plan.png b/public/images/ccm-manual/deployment-plans/modal-import-deployment-plan.png new file mode 100644 index 00000000000..479644b98b9 Binary files /dev/null and b/public/images/ccm-manual/deployment-plans/modal-import-deployment-plan.png differ diff --git a/public/images/ccm-manual/deployment-plans/notification-failed-start.png b/public/images/ccm-manual/deployment-plans/notification-failed-start.png new file mode 100644 index 00000000000..bbd840a9f03 Binary files /dev/null and b/public/images/ccm-manual/deployment-plans/notification-failed-start.png differ diff --git a/public/images/ccm-manual/notifications/system-timezone-invalid.png b/public/images/ccm-manual/notifications/system-timezone-invalid.png new file mode 100644 index 00000000000..781e0036b33 Binary files /dev/null and b/public/images/ccm-manual/notifications/system-timezone-invalid.png differ diff --git a/public/images/ccm-manual/notifications/user-timezone-invalid.png b/public/images/ccm-manual/notifications/user-timezone-invalid.png new file mode 100644 index 00000000000..0bf100a4b25 Binary files /dev/null and b/public/images/ccm-manual/notifications/user-timezone-invalid.png differ diff --git a/public/images/ccm-manual/screens-mockup.jpg b/public/images/ccm-manual/screens-mockup.jpg new file mode 100644 index 00000000000..3cdb549b0e0 Binary files /dev/null and b/public/images/ccm-manual/screens-mockup.jpg differ diff --git a/public/images/ccm-playwright/account/email-activation/alert-invalid-link.png b/public/images/ccm-playwright/account/email-activation/alert-invalid-link.png new file mode 100644 index 00000000000..c5279deb534 Binary files /dev/null and b/public/images/ccm-playwright/account/email-activation/alert-invalid-link.png differ diff --git a/public/images/ccm-playwright/account/forgot-password/alert-invalid-link.png b/public/images/ccm-playwright/account/forgot-password/alert-invalid-link.png new file mode 100644 index 00000000000..7f951c48ab4 Binary files /dev/null and b/public/images/ccm-playwright/account/forgot-password/alert-invalid-link.png differ diff --git a/public/images/ccm-playwright/account/login/alert-additional-settings.png b/public/images/ccm-playwright/account/login/alert-additional-settings.png new file mode 100644 index 00000000000..05da7ecd02a Binary files /dev/null and b/public/images/ccm-playwright/account/login/alert-additional-settings.png differ diff --git a/public/images/ccm-playwright/account/login/logo.png b/public/images/ccm-playwright/account/login/logo.png new file mode 100644 index 00000000000..9c989d659ee Binary files /dev/null and b/public/images/ccm-playwright/account/login/logo.png differ diff --git a/public/images/ccm-playwright/administration/audit-logs/left-menu-active.png b/public/images/ccm-playwright/administration/audit-logs/left-menu-active.png new file mode 100644 index 00000000000..1a2d83ca25b Binary files /dev/null and b/public/images/ccm-playwright/administration/audit-logs/left-menu-active.png differ diff --git a/public/images/ccm-playwright/administration/maintenance/left-menu-active.png b/public/images/ccm-playwright/administration/maintenance/left-menu-active.png new file mode 100644 index 00000000000..4c7d61f68dc Binary files /dev/null and b/public/images/ccm-playwright/administration/maintenance/left-menu-active.png differ diff --git a/public/images/ccm-playwright/administration/maintenance/tab-website-logs.png b/public/images/ccm-playwright/administration/maintenance/tab-website-logs.png new file mode 100644 index 00000000000..71b08f280ee Binary files /dev/null and b/public/images/ccm-playwright/administration/maintenance/tab-website-logs.png differ diff --git a/public/images/ccm-playwright/administration/roles/button-create-new-role.png b/public/images/ccm-playwright/administration/roles/button-create-new-role.png new file mode 100644 index 00000000000..71dde7e83ef Binary files /dev/null and b/public/images/ccm-playwright/administration/roles/button-create-new-role.png differ diff --git a/public/images/ccm-playwright/administration/roles/modal-new-role-tab-permissions.png b/public/images/ccm-playwright/administration/roles/modal-new-role-tab-permissions.png new file mode 100644 index 00000000000..d2616b74083 Binary files /dev/null and b/public/images/ccm-playwright/administration/roles/modal-new-role-tab-permissions.png differ diff --git a/public/images/ccm-playwright/administration/roles/modal-new-role-tab-role.png b/public/images/ccm-playwright/administration/roles/modal-new-role-tab-role.png new file mode 100644 index 00000000000..370ff018241 Binary files /dev/null and b/public/images/ccm-playwright/administration/roles/modal-new-role-tab-role.png differ diff --git a/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..813b4ccb1f6 Binary files /dev/null and b/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..3fc2b4595a8 Binary files /dev/null and b/public/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/administration/sensitive-variables/button-create-new-sensitive-variable.png b/public/images/ccm-playwright/administration/sensitive-variables/button-create-new-sensitive-variable.png new file mode 100644 index 00000000000..40488bf8e87 Binary files /dev/null and b/public/images/ccm-playwright/administration/sensitive-variables/button-create-new-sensitive-variable.png differ diff --git a/public/images/ccm-playwright/administration/sensitive-variables/button-quick-action-delete.png b/public/images/ccm-playwright/administration/sensitive-variables/button-quick-action-delete.png new file mode 100644 index 00000000000..170c5b84585 Binary files /dev/null and b/public/images/ccm-playwright/administration/sensitive-variables/button-quick-action-delete.png differ diff --git a/public/images/ccm-playwright/administration/sensitive-variables/modal-new-sensitive-variable.png b/public/images/ccm-playwright/administration/sensitive-variables/modal-new-sensitive-variable.png new file mode 100644 index 00000000000..e746f1ba92e Binary files /dev/null and b/public/images/ccm-playwright/administration/sensitive-variables/modal-new-sensitive-variable.png differ diff --git a/public/images/ccm-playwright/administration/settings/email-(smtp)-toast-success.png b/public/images/ccm-playwright/administration/settings/email-(smtp)-toast-success.png new file mode 100644 index 00000000000..316c9cfb863 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/email-(smtp)-toast-success.png differ diff --git a/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-audit-retention.png b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-audit-retention.png new file mode 100644 index 00000000000..c04f7416a3b Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-audit-retention.png differ diff --git a/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-deployment-plan-retention.png b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-deployment-plan-retention.png new file mode 100644 index 00000000000..e1366d3e0e4 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-deployment-plan-retention.png differ diff --git a/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-stale-computer-retention.png b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-stale-computer-retention.png new file mode 100644 index 00000000000..f2557f019d1 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-stale-computer-retention.png differ diff --git a/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-danger.png b/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-danger.png new file mode 100644 index 00000000000..85a2463475a Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-danger.png differ diff --git a/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-warning.png b/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-warning.png new file mode 100644 index 00000000000..6f056042a16 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/security-alert-new-passphrase-warning.png differ diff --git a/public/images/ccm-playwright/administration/settings/security-checkbox-enable-two-factor-authentication.png b/public/images/ccm-playwright/administration/settings/security-checkbox-enable-two-factor-authentication.png new file mode 100644 index 00000000000..52333635682 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/security-checkbox-enable-two-factor-authentication.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-dashboard.png b/public/images/ccm-playwright/administration/settings/tab-dashboard.png new file mode 100644 index 00000000000..1aee31bd0d3 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-dashboard.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-email-(smtp).png b/public/images/ccm-playwright/administration/settings/tab-email-(smtp).png new file mode 100644 index 00000000000..7531e3b8c2a Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-email-(smtp).png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-general.png b/public/images/ccm-playwright/administration/settings/tab-general.png new file mode 100644 index 00000000000..157ec823af3 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-general.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-retention-policies.png b/public/images/ccm-playwright/administration/settings/tab-retention-policies.png new file mode 100644 index 00000000000..72299654bc5 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-retention-policies.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-security.png b/public/images/ccm-playwright/administration/settings/tab-security.png new file mode 100644 index 00000000000..b8e1cb276c9 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-security.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-user-management.png b/public/images/ccm-playwright/administration/settings/tab-user-management.png new file mode 100644 index 00000000000..41755f2a61e Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-user-management.png differ diff --git a/public/images/ccm-playwright/administration/settings/tab-website.png b/public/images/ccm-playwright/administration/settings/tab-website.png new file mode 100644 index 00000000000..9b236177716 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/tab-website.png differ diff --git a/public/images/ccm-playwright/administration/settings/user-management-checkbox-enable-ldap.png b/public/images/ccm-playwright/administration/settings/user-management-checkbox-enable-ldap.png new file mode 100644 index 00000000000..51d9d0dd979 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/user-management-checkbox-enable-ldap.png differ diff --git a/public/images/ccm-playwright/administration/settings/user-management-modal-ldap-password.png b/public/images/ccm-playwright/administration/settings/user-management-modal-ldap-password.png new file mode 100644 index 00000000000..626a22a2964 Binary files /dev/null and b/public/images/ccm-playwright/administration/settings/user-management-modal-ldap-password.png differ diff --git a/public/images/ccm-playwright/administration/users/button-create-new-user.png b/public/images/ccm-playwright/administration/users/button-create-new-user.png new file mode 100644 index 00000000000..2b4d6f4737f Binary files /dev/null and b/public/images/ccm-playwright/administration/users/button-create-new-user.png differ diff --git a/public/images/ccm-playwright/administration/users/button-export.png b/public/images/ccm-playwright/administration/users/button-export.png new file mode 100644 index 00000000000..475cd4437e4 Binary files /dev/null and b/public/images/ccm-playwright/administration/users/button-export.png differ diff --git a/public/images/ccm-playwright/administration/users/modal-new-user-tab-information.png b/public/images/ccm-playwright/administration/users/modal-new-user-tab-information.png new file mode 100644 index 00000000000..b212eeca388 Binary files /dev/null and b/public/images/ccm-playwright/administration/users/modal-new-user-tab-information.png differ diff --git a/public/images/ccm-playwright/administration/users/modal-new-user-tab-roles.png b/public/images/ccm-playwright/administration/users/modal-new-user-tab-roles.png new file mode 100644 index 00000000000..e6bef1e01db Binary files /dev/null and b/public/images/ccm-playwright/administration/users/modal-new-user-tab-roles.png differ diff --git a/public/images/ccm-playwright/administration/users/modal-permissions.png b/public/images/ccm-playwright/administration/users/modal-permissions.png new file mode 100644 index 00000000000..7e077c0456b Binary files /dev/null and b/public/images/ccm-playwright/administration/users/modal-permissions.png differ diff --git a/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..0055d24e23c Binary files /dev/null and b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..14185beba4c Binary files /dev/null and b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-permissions.png b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-permissions.png new file mode 100644 index 00000000000..07a149f9d4b Binary files /dev/null and b/public/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-permissions.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-create-new-deployment-plan.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-create-new-deployment-plan.png new file mode 100644 index 00000000000..525f5aa17ef Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-create-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..1238ec08e83 Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-excel.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-excel.png new file mode 100644 index 00000000000..243518aa7ce Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-excel.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-packages.config.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-packages.config.png new file mode 100644 index 00000000000..24c023d681b Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-packages.config.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-pdf.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-pdf.png new file mode 100644 index 00000000000..b4537566727 Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-pdf.png differ diff --git a/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-upgrade-outdated-software.png b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-upgrade-outdated-software.png new file mode 100644 index 00000000000..18375c61b1b Binary files /dev/null and b/public/images/ccm-playwright/computers/details/button-action-dropdown-menu-upgrade-outdated-software.png differ diff --git a/public/images/ccm-playwright/computers/details/screen.png b/public/images/ccm-playwright/computers/details/screen.png new file mode 100644 index 00000000000..bb1ffbec677 Binary files /dev/null and b/public/images/ccm-playwright/computers/details/screen.png differ diff --git a/public/images/ccm-playwright/computers/dropdown-number-of-table-entries.png b/public/images/ccm-playwright/computers/dropdown-number-of-table-entries.png new file mode 100644 index 00000000000..70bafae8027 Binary files /dev/null and b/public/images/ccm-playwright/computers/dropdown-number-of-table-entries.png differ diff --git a/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-create-new-deployment-plan.png b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-create-new-deployment-plan.png new file mode 100644 index 00000000000..96b85367608 Binary files /dev/null and b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-create-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..3de7bb90715 Binary files /dev/null and b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-details.png b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-details.png new file mode 100644 index 00000000000..a59cb0ab9cc Binary files /dev/null and b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-details.png differ diff --git a/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..76839cc8e58 Binary files /dev/null and b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-upgrade-outdated-software.png b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-upgrade-outdated-software.png new file mode 100644 index 00000000000..2b22791c7b4 Binary files /dev/null and b/public/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-upgrade-outdated-software.png differ diff --git a/public/images/ccm-playwright/dashboard/alert-license-expiring.png b/public/images/ccm-playwright/dashboard/alert-license-expiring.png new file mode 100644 index 00000000000..0290598c8fe Binary files /dev/null and b/public/images/ccm-playwright/dashboard/alert-license-expiring.png differ diff --git a/public/images/ccm-playwright/dashboard/alert-passphrase-admin.png b/public/images/ccm-playwright/dashboard/alert-passphrase-admin.png new file mode 100644 index 00000000000..ae26fee91d9 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/alert-passphrase-admin.png differ diff --git a/public/images/ccm-playwright/dashboard/alert-passphrase-user.png b/public/images/ccm-playwright/dashboard/alert-passphrase-user.png new file mode 100644 index 00000000000..ad6867ceede Binary files /dev/null and b/public/images/ccm-playwright/dashboard/alert-passphrase-user.png differ diff --git a/public/images/ccm-playwright/dashboard/dark-mode.png b/public/images/ccm-playwright/dashboard/dark-mode.png new file mode 100644 index 00000000000..310497ed710 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/dark-mode.png differ diff --git a/public/images/ccm-playwright/dashboard/dropdown-menu-theme-toggle.png b/public/images/ccm-playwright/dashboard/dropdown-menu-theme-toggle.png new file mode 100644 index 00000000000..07f6c3aa59b Binary files /dev/null and b/public/images/ccm-playwright/dashboard/dropdown-menu-theme-toggle.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-api.png b/public/images/ccm-playwright/dashboard/left-menu-api.png new file mode 100644 index 00000000000..f534338ac6f Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-api.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-computers.png b/public/images/ccm-playwright/dashboard/left-menu-computers.png new file mode 100644 index 00000000000..151cbfde968 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-computers.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-dashboard.png b/public/images/ccm-playwright/dashboard/left-menu-dashboard.png new file mode 100644 index 00000000000..9ab02dccfd7 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-dashboard.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-deployment-plans.png b/public/images/ccm-playwright/dashboard/left-menu-deployment-plans.png new file mode 100644 index 00000000000..1fec244fbb6 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-deployment-plans.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-dropdown-administration.png b/public/images/ccm-playwright/dashboard/left-menu-dropdown-administration.png new file mode 100644 index 00000000000..ad84e75623e Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-dropdown-administration.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-dropdown-reports.png b/public/images/ccm-playwright/dashboard/left-menu-dropdown-reports.png new file mode 100644 index 00000000000..61da78fc68e Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-dropdown-reports.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-groups.png b/public/images/ccm-playwright/dashboard/left-menu-groups.png new file mode 100644 index 00000000000..64ef3aefb05 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-groups.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-audit-logs.png b/public/images/ccm-playwright/dashboard/left-menu-nested-audit-logs.png new file mode 100644 index 00000000000..6fbe91a5f65 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-audit-logs.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-deployment-plans.png b/public/images/ccm-playwright/dashboard/left-menu-nested-deployment-plans.png new file mode 100644 index 00000000000..563aa5929c8 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-deployment-plans.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-maintenance.png b/public/images/ccm-playwright/dashboard/left-menu-nested-maintenance.png new file mode 100644 index 00000000000..f656084eda7 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-maintenance.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-outdated-software.png b/public/images/ccm-playwright/dashboard/left-menu-nested-outdated-software.png new file mode 100644 index 00000000000..10557ebb80d Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-outdated-software.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-roles.png b/public/images/ccm-playwright/dashboard/left-menu-nested-roles.png new file mode 100644 index 00000000000..3cfe1aaa586 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-roles.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png b/public/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png new file mode 100644 index 00000000000..f47eadb4e8b Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-settings.png b/public/images/ccm-playwright/dashboard/left-menu-nested-settings.png new file mode 100644 index 00000000000..2cd58ab43ef Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-settings.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-nested-users.png b/public/images/ccm-playwright/dashboard/left-menu-nested-users.png new file mode 100644 index 00000000000..95f38374278 Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-nested-users.png differ diff --git a/public/images/ccm-playwright/dashboard/left-menu-software.png b/public/images/ccm-playwright/dashboard/left-menu-software.png new file mode 100644 index 00000000000..2a448f9b06b Binary files /dev/null and b/public/images/ccm-playwright/dashboard/left-menu-software.png differ diff --git a/public/images/ccm-playwright/dashboard/light-mode.png b/public/images/ccm-playwright/dashboard/light-mode.png new file mode 100644 index 00000000000..85d9b51554d Binary files /dev/null and b/public/images/ccm-playwright/dashboard/light-mode.png differ diff --git a/public/images/ccm-playwright/deployment-plans/button-create-new-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/button-create-new-deployment-plan.png new file mode 100644 index 00000000000..e97a37e5580 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/button-create-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/deployment-plans/button-import-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/button-import-deployment-plan.png new file mode 100644 index 00000000000..cafa925b6c6 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/button-import-deployment-plan.png differ diff --git a/public/images/ccm-playwright/deployment-plans/button-view-archived-deployment-plans.png b/public/images/ccm-playwright/deployment-plans/button-view-archived-deployment-plans.png new file mode 100644 index 00000000000..3dffada0b3d Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/button-view-archived-deployment-plans.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-add-deployment-step.png b/public/images/ccm-playwright/deployment-plans/edit/button-add-deployment-step.png new file mode 100644 index 00000000000..e87c421d3c8 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-add-deployment-step.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-add-schedule.png b/public/images/ccm-playwright/deployment-plans/edit/button-add-schedule.png new file mode 100644 index 00000000000..13b0694a881 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-add-schedule.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-duplicate-step.png b/public/images/ccm-playwright/deployment-plans/edit/button-duplicate-step.png new file mode 100644 index 00000000000..8032902b4f9 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-duplicate-step.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-edit-name.png b/public/images/ccm-playwright/deployment-plans/edit/button-edit-name.png new file mode 100644 index 00000000000..9c476775dc1 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-edit-name.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-edit-step.png b/public/images/ccm-playwright/deployment-plans/edit/button-edit-step.png new file mode 100644 index 00000000000..cd5e514aaa7 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-edit-step.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/button-export.png b/public/images/ccm-playwright/deployment-plans/edit/button-export.png new file mode 100644 index 00000000000..1dc38e9ca50 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/button-export.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/calendar-start-date-time.png b/public/images/ccm-playwright/deployment-plans/edit/calendar-start-date-time.png new file mode 100644 index 00000000000..71ac3a5ae3e Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/calendar-start-date-time.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/checkbox-restrict-schedule.png b/public/images/ccm-playwright/deployment-plans/edit/checkbox-restrict-schedule.png new file mode 100644 index 00000000000..3861d2fa824 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/checkbox-restrict-schedule.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/computers-modal-new-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/edit/computers-modal-new-deployment-plan.png new file mode 100644 index 00000000000..edb9e4f2e2f Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/computers-modal-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/computers-upgrade-outdated-software.png b/public/images/ccm-playwright/deployment-plans/edit/computers-upgrade-outdated-software.png new file mode 100644 index 00000000000..c68219709f5 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/computers-upgrade-outdated-software.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/groups-modal-new-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/edit/groups-modal-new-deployment-plan.png new file mode 100644 index 00000000000..0bdb359875e Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/groups-modal-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/input-execution-timeout-in-seconds.png b/public/images/ccm-playwright/deployment-plans/edit/input-execution-timeout-in-seconds.png new file mode 100644 index 00000000000..bc29e58c390 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/input-execution-timeout-in-seconds.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command-select-sensitive-variable.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command-select-sensitive-variable.png new file mode 100644 index 00000000000..2131fcae9ec Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command-select-sensitive-variable.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command.png new file mode 100644 index 00000000000..d42b09a8907 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-basic-command.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-basic-command.png new file mode 100644 index 00000000000..a8a80a63e1d Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-basic-command.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-create-sensitive-variable.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-create-sensitive-variable.png new file mode 100644 index 00000000000..50594e9af6e Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-create-sensitive-variable.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-save.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-save.png new file mode 100644 index 00000000000..8df4649f98f Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-button-save.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-input-execution-timeout-in-seconds.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-input-execution-timeout-in-seconds.png new file mode 100644 index 00000000000..1fb173ac347 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-input-execution-timeout-in-seconds.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-select-target-groups.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-select-target-groups.png new file mode 100644 index 00000000000..04ad3568033 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-select-target-groups.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step-tab-select-target-groups.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step-tab-select-target-groups.png new file mode 100644 index 00000000000..72ebc51667c Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step-tab-select-target-groups.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/modal-step.png b/public/images/ccm-playwright/deployment-plans/edit/modal-step.png new file mode 100644 index 00000000000..84129f0307e Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/modal-step.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/popover-ineligible-step.png b/public/images/ccm-playwright/deployment-plans/edit/popover-ineligible-step.png new file mode 100644 index 00000000000..d294e8f2509 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/popover-ineligible-step.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/select-repeat-period.png b/public/images/ccm-playwright/deployment-plans/edit/select-repeat-period.png new file mode 100644 index 00000000000..754da5ec3d0 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/select-repeat-period.png differ diff --git a/public/images/ccm-playwright/deployment-plans/edit/software-upgrade-outdated-software.png b/public/images/ccm-playwright/deployment-plans/edit/software-upgrade-outdated-software.png new file mode 100644 index 00000000000..16413d80ddf Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/edit/software-upgrade-outdated-software.png differ diff --git a/public/images/ccm-playwright/deployment-plans/modal-import-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/modal-import-deployment-plan.png new file mode 100644 index 00000000000..d668b7b38fb Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/modal-import-deployment-plan.png differ diff --git a/public/images/ccm-playwright/deployment-plans/table-row-icon-recurring-deployment-plan.png b/public/images/ccm-playwright/deployment-plans/table-row-icon-recurring-deployment-plan.png new file mode 100644 index 00000000000..b8d7678e1e0 Binary files /dev/null and b/public/images/ccm-playwright/deployment-plans/table-row-icon-recurring-deployment-plan.png differ diff --git a/public/images/ccm-playwright/groups/button-create-new-group.png b/public/images/ccm-playwright/groups/button-create-new-group.png new file mode 100644 index 00000000000..27dea7d0171 Binary files /dev/null and b/public/images/ccm-playwright/groups/button-create-new-group.png differ diff --git a/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-create-new-deployment-plan.png b/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-create-new-deployment-plan.png new file mode 100644 index 00000000000..7310666d5d5 Binary files /dev/null and b/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-create-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..bae2462736f Binary files /dev/null and b/public/images/ccm-playwright/groups/details/button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/groups/details/screen.png b/public/images/ccm-playwright/groups/details/screen.png new file mode 100644 index 00000000000..f2fbe699ed3 Binary files /dev/null and b/public/images/ccm-playwright/groups/details/screen.png differ diff --git a/public/images/ccm-playwright/groups/modal-create-new-group.png b/public/images/ccm-playwright/groups/modal-create-new-group.png new file mode 100644 index 00000000000..4fd69a07f3c Binary files /dev/null and b/public/images/ccm-playwright/groups/modal-create-new-group.png differ diff --git a/public/images/ccm-playwright/groups/modal-warning-legend.png b/public/images/ccm-playwright/groups/modal-warning-legend.png new file mode 100644 index 00000000000..13fc8e033d8 Binary files /dev/null and b/public/images/ccm-playwright/groups/modal-warning-legend.png differ diff --git a/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-create-new-deployment-plan.png b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-create-new-deployment-plan.png new file mode 100644 index 00000000000..dc47e0fa939 Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-create-new-deployment-plan.png differ diff --git a/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..a2efe7e08d9 Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-details.png b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-details.png new file mode 100644 index 00000000000..506b422983e Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-details.png differ diff --git a/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-duplicate.png b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-duplicate.png new file mode 100644 index 00000000000..b5204905347 Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-duplicate.png differ diff --git a/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..1a152c57ca2 Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/groups/table-row-icon-automatic-group-lock.png b/public/images/ccm-playwright/groups/table-row-icon-automatic-group-lock.png new file mode 100644 index 00000000000..5c34c6db126 Binary files /dev/null and b/public/images/ccm-playwright/groups/table-row-icon-automatic-group-lock.png differ diff --git a/public/images/ccm-playwright/reports/deployment-plans/screen.png b/public/images/ccm-playwright/reports/deployment-plans/screen.png new file mode 100644 index 00000000000..c9459104c91 Binary files /dev/null and b/public/images/ccm-playwright/reports/deployment-plans/screen.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/details/button-export.png b/public/images/ccm-playwright/reports/outdated-software/details/button-export.png new file mode 100644 index 00000000000..6740966c9ac Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/details/button-export.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/details/screen.png b/public/images/ccm-playwright/reports/outdated-software/details/screen.png new file mode 100644 index 00000000000..ae69a57b9fc Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/details/screen.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..8e441783e93 Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-details.png b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-details.png new file mode 100644 index 00000000000..e807d746fd0 Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-details.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-excel.png b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-excel.png new file mode 100644 index 00000000000..732fbf41e13 Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-excel.png differ diff --git a/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-pdf.png b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-pdf.png new file mode 100644 index 00000000000..d088c56008c Binary files /dev/null and b/public/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-pdf.png differ diff --git a/public/images/ccm-playwright/software/button-action-dropdown-menu-upgrade-outdated-software.png b/public/images/ccm-playwright/software/button-action-dropdown-menu-upgrade-outdated-software.png new file mode 100644 index 00000000000..6f2ff11f99f Binary files /dev/null and b/public/images/ccm-playwright/software/button-action-dropdown-menu-upgrade-outdated-software.png differ diff --git a/public/images/ccm-playwright/software/details/button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..af10286e7a2 Binary files /dev/null and b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/software/details/button-action-dropdown-menu-uninstall-software.png b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-uninstall-software.png new file mode 100644 index 00000000000..f48a3bd402f Binary files /dev/null and b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-uninstall-software.png differ diff --git a/public/images/ccm-playwright/software/details/button-action-dropdown-menu-upgrade-software.png b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-upgrade-software.png new file mode 100644 index 00000000000..a1051a9021f Binary files /dev/null and b/public/images/ccm-playwright/software/details/button-action-dropdown-menu-upgrade-software.png differ diff --git a/public/images/ccm-playwright/software/details/screen.png b/public/images/ccm-playwright/software/details/screen.png new file mode 100644 index 00000000000..c8fb1733fbc Binary files /dev/null and b/public/images/ccm-playwright/software/details/screen.png differ diff --git a/public/images/ccm-playwright/software/screen.png b/public/images/ccm-playwright/software/screen.png new file mode 100644 index 00000000000..7c9d8363179 Binary files /dev/null and b/public/images/ccm-playwright/software/screen.png differ diff --git a/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-delete.png b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-delete.png new file mode 100644 index 00000000000..6bb8f9192b3 Binary files /dev/null and b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-delete.png differ diff --git a/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-details.png b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-details.png new file mode 100644 index 00000000000..8b0bb942fed Binary files /dev/null and b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-details.png differ diff --git a/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-edit.png b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-edit.png new file mode 100644 index 00000000000..bfb4075ade4 Binary files /dev/null and b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-edit.png differ diff --git a/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-uninstall.png b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-uninstall.png new file mode 100644 index 00000000000..891308dc2dc Binary files /dev/null and b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-uninstall.png differ diff --git a/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-upgrade.png b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-upgrade.png new file mode 100644 index 00000000000..6f0b5c71630 Binary files /dev/null and b/public/images/ccm-playwright/software/table-row-button-action-dropdown-menu-upgrade.png differ diff --git a/public/images/choco-list-showing-side-by-side-install.png b/public/images/choco-list-showing-side-by-side-install.png new file mode 100644 index 00000000000..0bef191a8af Binary files /dev/null and b/public/images/choco-list-showing-side-by-side-install.png differ diff --git a/public/images/choco_info_cached.png b/public/images/choco_info_cached.png new file mode 100644 index 00000000000..d29f98b8ed3 Binary files /dev/null and b/public/images/choco_info_cached.png differ diff --git a/public/images/choco_install_cached.png b/public/images/choco_install_cached.png new file mode 100644 index 00000000000..1527f4986e8 Binary files /dev/null and b/public/images/choco_install_cached.png differ diff --git a/public/images/choco_integration.png b/public/images/choco_integration.png new file mode 100644 index 00000000000..5344a2e0907 Binary files /dev/null and b/public/images/choco_integration.png differ diff --git a/public/images/chocolatey-gui/Application_Loaded.png b/public/images/chocolatey-gui/Application_Loaded.png new file mode 100644 index 00000000000..40ccd8b72ea Binary files /dev/null and b/public/images/chocolatey-gui/Application_Loaded.png differ diff --git a/public/images/chocolatey-gui/Application_Refreshing.png b/public/images/chocolatey-gui/Application_Refreshing.png new file mode 100644 index 00000000000..253fd47dec6 Binary files /dev/null and b/public/images/chocolatey-gui/Application_Refreshing.png differ diff --git a/public/images/chocolatey-gui/Context_Menu_Usage.png b/public/images/chocolatey-gui/Context_Menu_Usage.png new file mode 100644 index 00000000000..bf92725cf3d Binary files /dev/null and b/public/images/chocolatey-gui/Context_Menu_Usage.png differ diff --git a/public/images/chocolatey-gui/Context_Menu_Usage_Local.png b/public/images/chocolatey-gui/Context_Menu_Usage_Local.png new file mode 100644 index 00000000000..7a2bfe53597 Binary files /dev/null and b/public/images/chocolatey-gui/Context_Menu_Usage_Local.png differ diff --git a/public/images/chocolatey-gui/Package_Details_Screen.png b/public/images/chocolatey-gui/Package_Details_Screen.png new file mode 100644 index 00000000000..c8d5a22dcc6 Binary files /dev/null and b/public/images/chocolatey-gui/Package_Details_Screen.png differ diff --git a/public/images/chocolatey-gui/Settings_About.png b/public/images/chocolatey-gui/Settings_About.png new file mode 100644 index 00000000000..25e2ced951c Binary files /dev/null and b/public/images/chocolatey-gui/Settings_About.png differ diff --git a/public/images/chocolatey-gui/Settings_Options.png b/public/images/chocolatey-gui/Settings_Options.png new file mode 100644 index 00000000000..b1d93350c7c Binary files /dev/null and b/public/images/chocolatey-gui/Settings_Options.png differ diff --git a/public/images/chocolatey-gui/Settings_Sources.png b/public/images/chocolatey-gui/Settings_Sources.png new file mode 100644 index 00000000000..4f0907ef977 Binary files /dev/null and b/public/images/chocolatey-gui/Settings_Sources.png differ diff --git a/public/images/chocolatey-gui/Showing_Only_Packages_With_Updates.png b/public/images/chocolatey-gui/Showing_Only_Packages_With_Updates.png new file mode 100644 index 00000000000..8a7829e68dc Binary files /dev/null and b/public/images/chocolatey-gui/Showing_Only_Packages_With_Updates.png differ diff --git a/public/images/chocolatey-gui/Showing_Search_Results.png b/public/images/chocolatey-gui/Showing_Search_Results.png new file mode 100644 index 00000000000..e7d5873b8e0 Binary files /dev/null and b/public/images/chocolatey-gui/Showing_Search_Results.png differ diff --git a/public/images/chocolatey-gui/access_to_settings_removed.png b/public/images/chocolatey-gui/access_to_settings_removed.png new file mode 100644 index 00000000000..6f8998fef94 Binary files /dev/null and b/public/images/chocolatey-gui/access_to_settings_removed.png differ diff --git a/public/images/chocolatey-gui/allow_non_admin_access_to_settings.png b/public/images/chocolatey-gui/allow_non_admin_access_to_settings.png new file mode 100644 index 00000000000..a6f2863bc4b Binary files /dev/null and b/public/images/chocolatey-gui/allow_non_admin_access_to_settings.png differ diff --git a/public/images/chocolatey-gui/feature_default_tile_view_local_disabled.png b/public/images/chocolatey-gui/feature_default_tile_view_local_disabled.png new file mode 100644 index 00000000000..da1d0936873 Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_tile_view_local_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_default_tile_view_local_enabled.png b/public/images/chocolatey-gui/feature_default_tile_view_local_enabled.png new file mode 100644 index 00000000000..2c306083d6d Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_tile_view_local_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_default_tile_view_remote_disabled.png b/public/images/chocolatey-gui/feature_default_tile_view_remote_disabled.png new file mode 100644 index 00000000000..a900e6a28e1 Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_tile_view_remote_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_default_tile_view_remote_enabled.png b/public/images/chocolatey-gui/feature_default_tile_view_remote_enabled.png new file mode 100644 index 00000000000..2ff840aa076 Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_tile_view_remote_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_default_to_dark_mode_disabled.png b/public/images/chocolatey-gui/feature_default_to_dark_mode_disabled.png new file mode 100644 index 00000000000..5669452bd79 Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_to_dark_mode_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_default_to_dark_mode_enabled.png b/public/images/chocolatey-gui/feature_default_to_dark_mode_enabled.png new file mode 100644 index 00000000000..96db34181f3 Binary files /dev/null and b/public/images/chocolatey-gui/feature_default_to_dark_mode_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_exclude_installed_packages_disabled.png b/public/images/chocolatey-gui/feature_exclude_installed_packages_disabled.png new file mode 100644 index 00000000000..a528e40baf9 Binary files /dev/null and b/public/images/chocolatey-gui/feature_exclude_installed_packages_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_exclude_installed_packages_enabled.png b/public/images/chocolatey-gui/feature_exclude_installed_packages_enabled.png new file mode 100644 index 00000000000..c4aaa783024 Binary files /dev/null and b/public/images/chocolatey-gui/feature_exclude_installed_packages_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_1.png b/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_1.png new file mode 100644 index 00000000000..bd907b1f5f8 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_1.png differ diff --git a/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_2.png b/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_2.png new file mode 100644 index 00000000000..41542594e45 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_2.png differ diff --git a/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_1.png b/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_1.png new file mode 100644 index 00000000000..aac69b82883 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_1.png differ diff --git a/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_2.png b/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_2.png new file mode 100644 index 00000000000..b2b1d5e18f3 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_package_download_count_disabled_2.png differ diff --git a/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_1.png b/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_1.png new file mode 100644 index 00000000000..d5f75a26531 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_1.png differ diff --git a/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_2.png b/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_2.png new file mode 100644 index 00000000000..4828d082322 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_package_download_count_enabled_2.png differ diff --git a/public/images/chocolatey-gui/feature_hide_this_pc_source_disabled.png b/public/images/chocolatey-gui/feature_hide_this_pc_source_disabled.png new file mode 100644 index 00000000000..900110c9356 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_this_pc_source_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_hide_this_pc_source_enabled.png b/public/images/chocolatey-gui/feature_hide_this_pc_source_enabled.png new file mode 100644 index 00000000000..ed98251f2a6 Binary files /dev/null and b/public/images/chocolatey-gui/feature_hide_this_pc_source_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_1.png b/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_1.png new file mode 100644 index 00000000000..d6d6e9eb348 Binary files /dev/null and b/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_1.png differ diff --git a/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_2.png b/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_2.png new file mode 100644 index 00000000000..ac9246acd00 Binary files /dev/null and b/public/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_2.png differ diff --git a/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_1.png b/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_1.png new file mode 100644 index 00000000000..d4de9f41fa4 Binary files /dev/null and b/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_1.png differ diff --git a/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_2.png b/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_2.png new file mode 100644 index 00000000000..41d03dc4590 Binary files /dev/null and b/public/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_2.png differ diff --git a/public/images/chocolatey-gui/feature_prevent_preload.png b/public/images/chocolatey-gui/feature_prevent_preload.png new file mode 100644 index 00000000000..06b4a1d16bd Binary files /dev/null and b/public/images/chocolatey-gui/feature_prevent_preload.png differ diff --git a/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_1.png b/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_1.png new file mode 100644 index 00000000000..faee263c89b Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_1.png differ diff --git a/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_2.png b/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_2.png new file mode 100644 index 00000000000..96ccaf3f8f9 Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_additional_package_information_disabled_2.png differ diff --git a/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_1.png b/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_1.png new file mode 100644 index 00000000000..ba360d11025 Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_1.png differ diff --git a/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_2.png b/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_2.png new file mode 100644 index 00000000000..60132816e50 Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_additional_package_information_enabled_2.png differ diff --git a/public/images/chocolatey-gui/feature_show_aggregated_source_disabled.png b/public/images/chocolatey-gui/feature_show_aggregated_source_disabled.png new file mode 100644 index 00000000000..2e816af47c5 Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_aggregated_source_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_show_aggregated_source_enabled.png b/public/images/chocolatey-gui/feature_show_aggregated_source_enabled.png new file mode 100644 index 00000000000..16a42add6f8 Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_aggregated_source_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_show_console_output_disabled.png b/public/images/chocolatey-gui/feature_show_console_output_disabled.png new file mode 100644 index 00000000000..b44212ed75c Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_console_output_disabled.png differ diff --git a/public/images/chocolatey-gui/feature_show_console_output_enabled.png b/public/images/chocolatey-gui/feature_show_console_output_enabled.png new file mode 100644 index 00000000000..99027d9d16a Binary files /dev/null and b/public/images/chocolatey-gui/feature_show_console_output_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_use_delayed_search_enabled.png b/public/images/chocolatey-gui/feature_use_delayed_search_enabled.png new file mode 100644 index 00000000000..cc81422db26 Binary files /dev/null and b/public/images/chocolatey-gui/feature_use_delayed_search_enabled.png differ diff --git a/public/images/chocolatey-gui/feature_use_keyboard_bindings.png b/public/images/chocolatey-gui/feature_use_keyboard_bindings.png new file mode 100644 index 00000000000..412c320b3cb Binary files /dev/null and b/public/images/chocolatey-gui/feature_use_keyboard_bindings.png differ diff --git a/public/images/chocolatey-gui/user_interface_about_credits.png b/public/images/chocolatey-gui/user_interface_about_credits.png new file mode 100644 index 00000000000..a1eb3a891e0 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_about_credits.png differ diff --git a/public/images/chocolatey-gui/user_interface_about_history.png b/public/images/chocolatey-gui/user_interface_about_history.png new file mode 100644 index 00000000000..278a1497a22 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_about_history.png differ diff --git a/public/images/chocolatey-gui/user_interface_about_release_notes.png b/public/images/chocolatey-gui/user_interface_about_release_notes.png new file mode 100644 index 00000000000..90ed66d0172 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_about_release_notes.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_check-for-outdated.png b/public/images/chocolatey-gui/user_interface_main-window_action_check-for-outdated.png new file mode 100644 index 00000000000..3f2ed45ff72 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_check-for-outdated.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_export_1.png b/public/images/chocolatey-gui/user_interface_main-window_action_export_1.png new file mode 100644 index 00000000000..fa10186bc2a Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_export_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_export_2.png b/public/images/chocolatey-gui/user_interface_main-window_action_export_2.png new file mode 100644 index 00000000000..6ff4ed9ce0b Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_export_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_export_3.png b/public/images/chocolatey-gui/user_interface_main-window_action_export_3.png new file mode 100644 index 00000000000..e095c80ebbf Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_export_3.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_refresh-packages.png b/public/images/chocolatey-gui/user_interface_main-window_action_refresh-packages.png new file mode 100644 index 00000000000..9c2c49f5240 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_refresh-packages.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_search_1.png b/public/images/chocolatey-gui/user_interface_main-window_action_search_1.png new file mode 100644 index 00000000000..2d0010fec2d Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_search_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_search_2.png b/public/images/chocolatey-gui/user_interface_main-window_action_search_2.png new file mode 100644 index 00000000000..fd32b5a0bfc Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_search_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_search_3.png b/public/images/chocolatey-gui/user_interface_main-window_action_search_3.png new file mode 100644 index 00000000000..42ea82e0ef6 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_search_3.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_search_4.png b/public/images/chocolatey-gui/user_interface_main-window_action_search_4.png new file mode 100644 index 00000000000..601db69544b Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_search_4.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_search_5.png b/public/images/chocolatey-gui/user_interface_main-window_action_search_5.png new file mode 100644 index 00000000000..34d8104cd6e Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_search_5.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_1.png b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_1.png new file mode 100644 index 00000000000..dc98ed4105e Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_2.png b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_2.png new file mode 100644 index 00000000000..86cdf0e16da Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_3.png b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_3.png new file mode 100644 index 00000000000..44e22645220 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_switch_display_3.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_1.png b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_1.png new file mode 100644 index 00000000000..7d688da4d24 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_2.png b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_2.png new file mode 100644 index 00000000000..86cdf0e16da Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_3.png b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_3.png new file mode 100644 index 00000000000..7b0dd4141ff Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_3.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_update-all_1.png b/public/images/chocolatey-gui/user_interface_main-window_action_update-all_1.png new file mode 100644 index 00000000000..e8bf9bc1fc2 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_update-all_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_action_update-all_2.png b/public/images/chocolatey-gui/user_interface_main-window_action_update-all_2.png new file mode 100644 index 00000000000..f1ff353bf4e Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_action_update-all_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_package-details.png b/public/images/chocolatey-gui/user_interface_main-window_package-details.png new file mode 100644 index 00000000000..0e774500a3f Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_package-details.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_package-details_install-advanced.png b/public/images/chocolatey-gui/user_interface_main-window_package-details_install-advanced.png new file mode 100644 index 00000000000..25500b10a9c Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_package-details_install-advanced.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments.png b/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments.png new file mode 100644 index 00000000000..ef6b5dd81ad Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments_empty.png b/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments_empty.png new file mode 100644 index 00000000000..62129a642f5 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments_empty.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_sections.png b/public/images/chocolatey-gui/user_interface_main-window_sections.png new file mode 100644 index 00000000000..699490cc7b2 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_sections.png differ diff --git a/public/images/chocolatey-gui/user_interface_main-window_update-all-removed.png b/public/images/chocolatey-gui/user_interface_main-window_update-all-removed.png new file mode 100644 index 00000000000..64c847514be Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_main-window_update-all-removed.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_actions_purge_icons.png b/public/images/chocolatey-gui/user_interface_settings_actions_purge_icons.png new file mode 100644 index 00000000000..d5641287f80 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_actions_purge_icons.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_actions_purge_outdated_packages.png b/public/images/chocolatey-gui/user_interface_settings_actions_purge_outdated_packages.png new file mode 100644 index 00000000000..a0b298686ee Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_actions_purge_outdated_packages.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_chocolatey.png b/public/images/chocolatey-gui/user_interface_settings_chocolatey.png new file mode 100644 index 00000000000..47aacc53e5b Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_chocolatey.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_chocolatey_gui.png b/public/images/chocolatey-gui/user_interface_settings_chocolatey_gui.png new file mode 100644 index 00000000000..51b9f0092b7 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_chocolatey_gui.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_language.png b/public/images/chocolatey-gui/user_interface_settings_language.png new file mode 100644 index 00000000000..0947c213fb5 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_language.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_sources.png b/public/images/chocolatey-gui/user_interface_settings_sources.png new file mode 100644 index 00000000000..deb07274967 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_sources.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_sources_add.png b/public/images/chocolatey-gui/user_interface_settings_sources_add.png new file mode 100644 index 00000000000..26e28aa2fd2 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_sources_add.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_sources_edit_1.png b/public/images/chocolatey-gui/user_interface_settings_sources_edit_1.png new file mode 100644 index 00000000000..b793aec91be Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_sources_edit_1.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_sources_edit_2.png b/public/images/chocolatey-gui/user_interface_settings_sources_edit_2.png new file mode 100644 index 00000000000..565e4b93267 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_sources_edit_2.png differ diff --git a/public/images/chocolatey-gui/user_interface_settings_sources_remove.png b/public/images/chocolatey-gui/user_interface_settings_sources_remove.png new file mode 100644 index 00000000000..828f0cf2c67 Binary files /dev/null and b/public/images/chocolatey-gui/user_interface_settings_sources_remove.png differ diff --git a/public/images/chocolatey-license.png b/public/images/chocolatey-license.png new file mode 100644 index 00000000000..39a1e57c46b Binary files /dev/null and b/public/images/chocolatey-license.png differ diff --git a/public/images/chocolatey-upgrade-to-2-banner.png b/public/images/chocolatey-upgrade-to-2-banner.png new file mode 100644 index 00000000000..3e2feebe1a4 Binary files /dev/null and b/public/images/chocolatey-upgrade-to-2-banner.png differ diff --git a/public/images/chocolatey-upgrade-to-2.mp4 b/public/images/chocolatey-upgrade-to-2.mp4 new file mode 100644 index 00000000000..78c8940a6be Binary files /dev/null and b/public/images/chocolatey-upgrade-to-2.mp4 differ diff --git a/public/images/chocolatey/dependency-resolution-failure-1.png b/public/images/chocolatey/dependency-resolution-failure-1.png new file mode 100644 index 00000000000..4a82a15a47a Binary files /dev/null and b/public/images/chocolatey/dependency-resolution-failure-1.png differ diff --git a/public/images/chocolatey/dependency-resolution-failure-2.png b/public/images/chocolatey/dependency-resolution-failure-2.png new file mode 100644 index 00000000000..771997fa368 Binary files /dev/null and b/public/images/chocolatey/dependency-resolution-failure-2.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-1.png b/public/images/chocolatey/kb-dependency-failure-1.png new file mode 100644 index 00000000000..b1ff683332a Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-1.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-2.png b/public/images/chocolatey/kb-dependency-failure-2.png new file mode 100644 index 00000000000..787ac1602c1 Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-2.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-3.png b/public/images/chocolatey/kb-dependency-failure-3.png new file mode 100644 index 00000000000..6f25b7b8d1c Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-3.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-4.png b/public/images/chocolatey/kb-dependency-failure-4.png new file mode 100644 index 00000000000..4ebad13c4da Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-4.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-5.png b/public/images/chocolatey/kb-dependency-failure-5.png new file mode 100644 index 00000000000..6c54333287a Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-5.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-6.png b/public/images/chocolatey/kb-dependency-failure-6.png new file mode 100644 index 00000000000..fc41d3f2374 Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-6.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-7.png b/public/images/chocolatey/kb-dependency-failure-7.png new file mode 100644 index 00000000000..a503b7364d4 Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-7.png differ diff --git a/public/images/chocolatey/kb-dependency-failure-8.png b/public/images/chocolatey/kb-dependency-failure-8.png new file mode 100644 index 00000000000..0c8f0c44c96 Binary files /dev/null and b/public/images/chocolatey/kb-dependency-failure-8.png differ diff --git a/public/images/chocolateyicon.gif b/public/images/chocolateyicon.gif new file mode 100644 index 00000000000..d38b30cda20 Binary files /dev/null and b/public/images/chocolateyicon.gif differ diff --git a/public/images/chocolateyicon.png b/public/images/chocolateyicon.png new file mode 100644 index 00000000000..cd062c4f66d Binary files /dev/null and b/public/images/chocolateyicon.png differ diff --git a/public/images/chocolateynhprofiler.png b/public/images/chocolateynhprofiler.png new file mode 100644 index 00000000000..69d389b93a2 Binary files /dev/null and b/public/images/chocolateynhprofiler.png differ diff --git a/public/images/chocopkgup/KetarinCustomCommand.png b/public/images/chocopkgup/KetarinCustomCommand.png new file mode 100644 index 00000000000..ae8e193c903 Binary files /dev/null and b/public/images/chocopkgup/KetarinCustomCommand.png differ diff --git a/public/images/chocopkgup/KetarinGlobalVariables.png b/public/images/chocopkgup/KetarinGlobalVariables.png new file mode 100644 index 00000000000..2d50d48768f Binary files /dev/null and b/public/images/chocopkgup/KetarinGlobalVariables.png differ diff --git a/public/images/chocopkgup/KetarinJobSettings.png b/public/images/chocopkgup/KetarinJobSettings.png new file mode 100644 index 00000000000..71209476dba Binary files /dev/null and b/public/images/chocopkgup/KetarinJobSettings.png differ diff --git a/public/images/chocopkgup/KetarinMain.png b/public/images/chocopkgup/KetarinMain.png new file mode 100644 index 00000000000..22a0c6653b6 Binary files /dev/null and b/public/images/chocopkgup/KetarinMain.png differ diff --git a/public/images/chocopkgup/KetarinSetVariables.png b/public/images/chocopkgup/KetarinSetVariables.png new file mode 100644 index 00000000000..e1864ca995d Binary files /dev/null and b/public/images/chocopkgup/KetarinSetVariables.png differ diff --git a/public/images/chocopkgup/KetarinSettings.png b/public/images/chocopkgup/KetarinSettings.png new file mode 100644 index 00000000000..03e7a904863 Binary files /dev/null and b/public/images/chocopkgup/KetarinSettings.png differ diff --git a/public/images/chocopkgup/KetarinShowCustomField.png b/public/images/chocopkgup/KetarinShowCustomField.png new file mode 100644 index 00000000000..bde55084a76 Binary files /dev/null and b/public/images/chocopkgup/KetarinShowCustomField.png differ diff --git a/public/images/chocopkgup/KetarinVariables.png b/public/images/chocopkgup/KetarinVariables.png new file mode 100644 index 00000000000..71a233f0b23 Binary files /dev/null and b/public/images/chocopkgup/KetarinVariables.png differ diff --git a/public/images/chocopro_features_installdirectory.png b/public/images/chocopro_features_installdirectory.png new file mode 100644 index 00000000000..86685043c42 Binary files /dev/null and b/public/images/chocopro_features_installdirectory.png differ diff --git a/public/images/cinst.png b/public/images/cinst.png new file mode 100644 index 00000000000..9818aa71e57 Binary files /dev/null and b/public/images/cinst.png differ diff --git a/public/images/clippy.svg b/public/images/clippy.svg new file mode 100644 index 00000000000..a72e2ddf14d --- /dev/null +++ b/public/images/clippy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/images/clistExample.png b/public/images/clistExample.png new file mode 100644 index 00000000000..765214ed4da Binary files /dev/null and b/public/images/clistExample.png differ diff --git a/public/images/cloudflare_ratelimiting.png b/public/images/cloudflare_ratelimiting.png new file mode 100644 index 00000000000..e6ee4153fcc Binary files /dev/null and b/public/images/cloudflare_ratelimiting.png differ diff --git a/public/images/cloudflare_ratelimiting_choco.png b/public/images/cloudflare_ratelimiting_choco.png new file mode 100644 index 00000000000..da547438b16 Binary files /dev/null and b/public/images/cloudflare_ratelimiting_choco.png differ diff --git a/public/images/cloudflare_ratelimiting_choco_install.png b/public/images/cloudflare_ratelimiting_choco_install.png new file mode 100644 index 00000000000..95085bb23d2 Binary files /dev/null and b/public/images/cloudflare_ratelimiting_choco_install.png differ diff --git a/public/images/cup.png b/public/images/cup.png new file mode 100644 index 00000000000..275c1cb5926 Binary files /dev/null and b/public/images/cup.png differ diff --git a/public/images/cverExample.png b/public/images/cverExample.png new file mode 100644 index 00000000000..77530d67802 Binary files /dev/null and b/public/images/cverExample.png differ diff --git a/public/images/faqs/email-from-validator.png b/public/images/faqs/email-from-validator.png new file mode 100644 index 00000000000..98a66f99b0d Binary files /dev/null and b/public/images/faqs/email-from-validator.png differ diff --git a/public/images/faqs/package-moderation-reject-package.png b/public/images/faqs/package-moderation-reject-package.png new file mode 100644 index 00000000000..f9071ab7058 Binary files /dev/null and b/public/images/faqs/package-moderation-reject-package.png differ diff --git a/public/images/faqs/verification-successful.png b/public/images/faqs/verification-successful.png new file mode 100644 index 00000000000..d8bc3d6e8f7 Binary files /dev/null and b/public/images/faqs/verification-successful.png differ diff --git a/public/images/features/ccm/agent_ccm_communication.png b/public/images/features/ccm/agent_ccm_communication.png new file mode 100644 index 00000000000..bd8e73649ff Binary files /dev/null and b/public/images/features/ccm/agent_ccm_communication.png differ diff --git a/public/images/features/ccm/agent_ccm_setup_good.png b/public/images/features/ccm/agent_ccm_setup_good.png new file mode 100644 index 00000000000..81cef8c7d43 Binary files /dev/null and b/public/images/features/ccm/agent_ccm_setup_good.png differ diff --git a/public/images/features/ccm/central-management.png b/public/images/features/ccm/central-management.png new file mode 100644 index 00000000000..50e8f2b5756 Binary files /dev/null and b/public/images/features/ccm/central-management.png differ diff --git a/public/images/features/ccm/error_when_sending_email_500.png b/public/images/features/ccm/error_when_sending_email_500.png new file mode 100644 index 00000000000..615c7c29141 Binary files /dev/null and b/public/images/features/ccm/error_when_sending_email_500.png differ diff --git a/public/images/features/ccm/updated_appsettingsjson_file.png b/public/images/features/ccm/updated_appsettingsjson_file.png new file mode 100644 index 00000000000..7f429b434f6 Binary files /dev/null and b/public/images/features/ccm/updated_appsettingsjson_file.png differ diff --git a/public/images/features/choco-templates-location.png b/public/images/features/choco-templates-location.png new file mode 100644 index 00000000000..248cd224dcb Binary files /dev/null and b/public/images/features/choco-templates-location.png differ diff --git a/public/images/features/features_auto_uninstall.png b/public/images/features/features_auto_uninstall.png new file mode 100644 index 00000000000..967ce548a27 Binary files /dev/null and b/public/images/features/features_auto_uninstall.png differ diff --git a/public/images/features/features_choco_sync.png b/public/images/features/features_choco_sync.png new file mode 100644 index 00000000000..a100c3044de Binary files /dev/null and b/public/images/features/features_choco_sync.png differ diff --git a/public/images/features/features_direct_installer.png b/public/images/features/features_direct_installer.png new file mode 100644 index 00000000000..e72ccc40193 Binary files /dev/null and b/public/images/features/features_direct_installer.png differ diff --git a/public/images/features/features_install_upgrade_refreshenv.png b/public/images/features/features_install_upgrade_refreshenv.png new file mode 100644 index 00000000000..d09f1fba192 Binary files /dev/null and b/public/images/features/features_install_upgrade_refreshenv.png differ diff --git a/public/images/features/features_non_admin_custom_source_error.png b/public/images/features/features_non_admin_custom_source_error.png new file mode 100644 index 00000000000..c10cdbda96c Binary files /dev/null and b/public/images/features/features_non_admin_custom_source_error.png differ diff --git a/public/images/features/features_non_admin_installer.png b/public/images/features/features_non_admin_installer.png new file mode 100644 index 00000000000..f686f2cb0c6 Binary files /dev/null and b/public/images/features/features_non_admin_installer.png differ diff --git a/public/images/features/features_non_admin_selfservice.png b/public/images/features/features_non_admin_selfservice.png new file mode 100644 index 00000000000..3924440a845 Binary files /dev/null and b/public/images/features/features_non_admin_selfservice.png differ diff --git a/public/images/features/features_outdated.png b/public/images/features/features_outdated.png new file mode 100644 index 00000000000..86963c991ea Binary files /dev/null and b/public/images/features/features_outdated.png differ diff --git a/public/images/features/features_override_install_directory.png b/public/images/features/features_override_install_directory.png new file mode 100644 index 00000000000..47a7532c043 Binary files /dev/null and b/public/images/features/features_override_install_directory.png differ diff --git a/public/images/features/features_package_audit.png b/public/images/features/features_package_audit.png new file mode 100644 index 00000000000..087618bdb44 Binary files /dev/null and b/public/images/features/features_package_audit.png differ diff --git a/public/images/features/features_package_audit_v2.png b/public/images/features/features_package_audit_v2.png new file mode 100644 index 00000000000..ffab244e85e Binary files /dev/null and b/public/images/features/features_package_audit_v2.png differ diff --git a/public/images/features/features_package_reducer.png b/public/images/features/features_package_reducer.png new file mode 100644 index 00000000000..fc85c0c0777 Binary files /dev/null and b/public/images/features/features_package_reducer.png differ diff --git a/public/images/features/features_package_reducer_optimize.png b/public/images/features/features_package_reducer_optimize.png new file mode 100644 index 00000000000..78fd102e19c Binary files /dev/null and b/public/images/features/features_package_reducer_optimize.png differ diff --git a/public/images/features/features_package_throttle.png b/public/images/features/features_package_throttle.png new file mode 100644 index 00000000000..989e3d7371f Binary files /dev/null and b/public/images/features/features_package_throttle.png differ diff --git a/public/images/features/features_packages_from_installers.png b/public/images/features/features_packages_from_installers.png new file mode 100644 index 00000000000..4c21a93cca3 Binary files /dev/null and b/public/images/features/features_packages_from_installers.png differ diff --git a/public/images/features/features_packages_in_programs_and_features.png b/public/images/features/features_packages_in_programs_and_features.png new file mode 100644 index 00000000000..c68c30808f2 Binary files /dev/null and b/public/images/features/features_packages_in_programs_and_features.png differ diff --git a/public/images/features/features_recompile_packages.png b/public/images/features/features_recompile_packages.png new file mode 100644 index 00000000000..921cf236649 Binary files /dev/null and b/public/images/features/features_recompile_packages.png differ diff --git a/public/images/features/features_selfservice_video1.jpg b/public/images/features/features_selfservice_video1.jpg new file mode 100644 index 00000000000..773f738f3d3 Binary files /dev/null and b/public/images/features/features_selfservice_video1.jpg differ diff --git a/public/images/features/features_selfservice_video2.jpg b/public/images/features/features_selfservice_video2.jpg new file mode 100644 index 00000000000..19ca4492c91 Binary files /dev/null and b/public/images/features/features_selfservice_video2.jpg differ diff --git a/public/images/features/features_shimgen.png b/public/images/features/features_shimgen.png new file mode 100644 index 00000000000..dd40d0ad766 Binary files /dev/null and b/public/images/features/features_shimgen.png differ diff --git a/public/images/features/features_software_audit.png b/public/images/features/features_software_audit.png new file mode 100644 index 00000000000..ea63483ef6b Binary files /dev/null and b/public/images/features/features_software_audit.png differ diff --git a/public/images/features/features_synchronize.png b/public/images/features/features_synchronize.png new file mode 100644 index 00000000000..08623af1815 Binary files /dev/null and b/public/images/features/features_synchronize.png differ diff --git a/public/images/features/features_upgrade.png b/public/images/features/features_upgrade.png new file mode 100644 index 00000000000..2f708be2b2a Binary files /dev/null and b/public/images/features/features_upgrade.png differ diff --git a/public/images/features/features_upgrade_everything.png b/public/images/features/features_upgrade_everything.png new file mode 100644 index 00000000000..80fbda1b843 Binary files /dev/null and b/public/images/features/features_upgrade_everything.png differ diff --git a/public/images/features/snags/features_autouninstall.snagproj b/public/images/features/snags/features_autouninstall.snagproj new file mode 100644 index 00000000000..3340c8521b9 Binary files /dev/null and b/public/images/features/snags/features_autouninstall.snagproj differ diff --git a/public/images/features/snags/features_choco_sync.snagproj b/public/images/features/snags/features_choco_sync.snagproj new file mode 100644 index 00000000000..88db82cf266 Binary files /dev/null and b/public/images/features/snags/features_choco_sync.snagproj differ diff --git a/public/images/features/snags/features_direct_installer.snagproj b/public/images/features/snags/features_direct_installer.snagproj new file mode 100644 index 00000000000..dd21caf4e50 Binary files /dev/null and b/public/images/features/snags/features_direct_installer.snagproj differ diff --git a/public/images/features/snags/features_install_upgrade_refreshenv.snagproj b/public/images/features/snags/features_install_upgrade_refreshenv.snagproj new file mode 100644 index 00000000000..ce60bb09877 Binary files /dev/null and b/public/images/features/snags/features_install_upgrade_refreshenv.snagproj differ diff --git a/public/images/features/snags/features_non_admin_installer.snagproj b/public/images/features/snags/features_non_admin_installer.snagproj new file mode 100644 index 00000000000..6434f4a3c06 Binary files /dev/null and b/public/images/features/snags/features_non_admin_installer.snagproj differ diff --git a/public/images/features/snags/features_non_admin_selfservice.snagproj b/public/images/features/snags/features_non_admin_selfservice.snagproj new file mode 100644 index 00000000000..613820a45dd Binary files /dev/null and b/public/images/features/snags/features_non_admin_selfservice.snagproj differ diff --git a/public/images/features/snags/features_outdated.snagproj b/public/images/features/snags/features_outdated.snagproj new file mode 100644 index 00000000000..736b7ba6d6d Binary files /dev/null and b/public/images/features/snags/features_outdated.snagproj differ diff --git a/public/images/features/snags/features_override_install_directory.snagproj b/public/images/features/snags/features_override_install_directory.snagproj new file mode 100644 index 00000000000..40c927ddb0b Binary files /dev/null and b/public/images/features/snags/features_override_install_directory.snagproj differ diff --git a/public/images/features/snags/features_package_audit.snagproj b/public/images/features/snags/features_package_audit.snagproj new file mode 100644 index 00000000000..89de526fb0c Binary files /dev/null and b/public/images/features/snags/features_package_audit.snagproj differ diff --git a/public/images/features/snags/features_package_reducer.snagproj b/public/images/features/snags/features_package_reducer.snagproj new file mode 100644 index 00000000000..ea3bd4567fb Binary files /dev/null and b/public/images/features/snags/features_package_reducer.snagproj differ diff --git a/public/images/features/snags/features_package_reducer_optimize.snagproj b/public/images/features/snags/features_package_reducer_optimize.snagproj new file mode 100644 index 00000000000..2a75b362614 Binary files /dev/null and b/public/images/features/snags/features_package_reducer_optimize.snagproj differ diff --git a/public/images/features/snags/features_package_throttle.snagproj b/public/images/features/snags/features_package_throttle.snagproj new file mode 100644 index 00000000000..fcde1325040 Binary files /dev/null and b/public/images/features/snags/features_package_throttle.snagproj differ diff --git a/public/images/features/snags/features_packages_from_installers.snagproj b/public/images/features/snags/features_packages_from_installers.snagproj new file mode 100644 index 00000000000..688345d21f5 Binary files /dev/null and b/public/images/features/snags/features_packages_from_installers.snagproj differ diff --git a/public/images/features/snags/features_packages_in_programs_and_features.snagproj b/public/images/features/snags/features_packages_in_programs_and_features.snagproj new file mode 100644 index 00000000000..886de4129ca Binary files /dev/null and b/public/images/features/snags/features_packages_in_programs_and_features.snagproj differ diff --git a/public/images/features/snags/features_recompile_packages.snagproj b/public/images/features/snags/features_recompile_packages.snagproj new file mode 100644 index 00000000000..de2b077a072 Binary files /dev/null and b/public/images/features/snags/features_recompile_packages.snagproj differ diff --git a/public/images/features/snags/features_shimgen.snagproj b/public/images/features/snags/features_shimgen.snagproj new file mode 100644 index 00000000000..ac3e9515bcb Binary files /dev/null and b/public/images/features/snags/features_shimgen.snagproj differ diff --git a/public/images/features/snags/features_software_audit.snagproj b/public/images/features/snags/features_software_audit.snagproj new file mode 100644 index 00000000000..dd37c669cb4 Binary files /dev/null and b/public/images/features/snags/features_software_audit.snagproj differ diff --git a/public/images/features/snags/features_synchronize.snagproj b/public/images/features/snags/features_synchronize.snagproj new file mode 100644 index 00000000000..11d09e68cdc Binary files /dev/null and b/public/images/features/snags/features_synchronize.snagproj differ diff --git a/public/images/features/snags/features_upgrade.snagproj b/public/images/features/snags/features_upgrade.snagproj new file mode 100644 index 00000000000..257df92e87f Binary files /dev/null and b/public/images/features/snags/features_upgrade.snagproj differ diff --git a/public/images/features/snags/features_upgrade_everything.snagproj b/public/images/features/snags/features_upgrade_everything.snagproj new file mode 100644 index 00000000000..4d4cfc7ec0b Binary files /dev/null and b/public/images/features/snags/features_upgrade_everything.snagproj differ diff --git a/public/images/features/sync-command-video.png b/public/images/features/sync-command-video.png new file mode 100644 index 00000000000..35ddf0009ba Binary files /dev/null and b/public/images/features/sync-command-video.png differ diff --git a/public/images/gifs/choco_business_features.gif b/public/images/gifs/choco_business_features.gif new file mode 100644 index 00000000000..d85032a7950 Binary files /dev/null and b/public/images/gifs/choco_business_features.gif differ diff --git a/public/images/gifs/choco_business_features_recompile.gif b/public/images/gifs/choco_business_features_recompile.gif new file mode 100644 index 00000000000..5f6e29ad4bc Binary files /dev/null and b/public/images/gifs/choco_business_features_recompile.gif differ diff --git a/public/images/gifs/choco_config.gif b/public/images/gifs/choco_config.gif new file mode 100644 index 00000000000..76475b775bd Binary files /dev/null and b/public/images/gifs/choco_config.gif differ diff --git a/public/images/gifs/choco_help.gif b/public/images/gifs/choco_help.gif new file mode 100644 index 00000000000..aa94babc972 Binary files /dev/null and b/public/images/gifs/choco_help.gif differ diff --git a/public/images/gifs/choco_install.gif b/public/images/gifs/choco_install.gif new file mode 100644 index 00000000000..9a318c7fb94 Binary files /dev/null and b/public/images/gifs/choco_install.gif differ diff --git a/public/images/gifs/choco_install_pro.gif b/public/images/gifs/choco_install_pro.gif new file mode 100644 index 00000000000..bcd3f2f0067 Binary files /dev/null and b/public/images/gifs/choco_install_pro.gif differ diff --git a/public/images/gifs/choco_outdated.gif b/public/images/gifs/choco_outdated.gif new file mode 100644 index 00000000000..caf9618a47f Binary files /dev/null and b/public/images/gifs/choco_outdated.gif differ diff --git a/public/images/gifs/choco_qde_update_apikey.gif b/public/images/gifs/choco_qde_update_apikey.gif new file mode 100644 index 00000000000..018a0f3d6a7 Binary files /dev/null and b/public/images/gifs/choco_qde_update_apikey.gif differ diff --git a/public/images/gifs/choco_search.gif b/public/images/gifs/choco_search.gif new file mode 100644 index 00000000000..78572d8c936 Binary files /dev/null and b/public/images/gifs/choco_search.gif differ diff --git a/public/images/gifs/choco_tab_completion.gif b/public/images/gifs/choco_tab_completion.gif new file mode 100644 index 00000000000..99d17dc1761 Binary files /dev/null and b/public/images/gifs/choco_tab_completion.gif differ diff --git a/public/images/gifs/choco_uninstall.gif b/public/images/gifs/choco_uninstall.gif new file mode 100644 index 00000000000..db2bd673b9c Binary files /dev/null and b/public/images/gifs/choco_uninstall.gif differ diff --git a/public/images/gifs/choco_upgrade.gif b/public/images/gifs/choco_upgrade.gif new file mode 100644 index 00000000000..f2eecf23b3c Binary files /dev/null and b/public/images/gifs/choco_upgrade.gif differ diff --git a/public/images/gifs/choco_upgrade_noop.gif b/public/images/gifs/choco_upgrade_noop.gif new file mode 100644 index 00000000000..b446b4b0043 Binary files /dev/null and b/public/images/gifs/choco_upgrade_noop.gif differ diff --git a/public/images/gifs/chocopro_features_installdirectory.gif b/public/images/gifs/chocopro_features_installdirectory.gif new file mode 100644 index 00000000000..4d420d60b67 Binary files /dev/null and b/public/images/gifs/chocopro_features_installdirectory.gif differ diff --git a/public/images/gifs/chocopro_install.gif b/public/images/gifs/chocopro_install.gif new file mode 100644 index 00000000000..6262162e843 Binary files /dev/null and b/public/images/gifs/chocopro_install.gif differ diff --git a/public/images/gifs/chocopro_install_stopped.gif b/public/images/gifs/chocopro_install_stopped.gif new file mode 100644 index 00000000000..0a95034d670 Binary files /dev/null and b/public/images/gifs/chocopro_install_stopped.gif differ diff --git a/public/images/gifs/chris-farley-disbelief.gif b/public/images/gifs/chris-farley-disbelief.gif new file mode 100644 index 00000000000..3150f0f0e44 Binary files /dev/null and b/public/images/gifs/chris-farley-disbelief.gif differ diff --git a/public/images/gifs/clint-eastwood-nodding.gif b/public/images/gifs/clint-eastwood-nodding.gif new file mode 100644 index 00000000000..4a463b3a7d5 Binary files /dev/null and b/public/images/gifs/clint-eastwood-nodding.gif differ diff --git a/public/images/gifs/shia-labeouf-magic.gif b/public/images/gifs/shia-labeouf-magic.gif new file mode 100644 index 00000000000..8b9d4c1de9a Binary files /dev/null and b/public/images/gifs/shia-labeouf-magic.gif differ diff --git a/public/images/git-tfs.png b/public/images/git-tfs.png new file mode 100644 index 00000000000..db73a11c64e Binary files /dev/null and b/public/images/git-tfs.png differ diff --git a/public/images/git-tfs2.png b/public/images/git-tfs2.png new file mode 100644 index 00000000000..235f265b252 Binary files /dev/null and b/public/images/git-tfs2.png differ diff --git a/public/images/gui/in-action-with-branding.gif b/public/images/gui/in-action-with-branding.gif new file mode 100644 index 00000000000..fe6fb884bd7 Binary files /dev/null and b/public/images/gui/in-action-with-branding.gif differ diff --git a/public/images/gui/in-action.gif b/public/images/gui/in-action.gif new file mode 100644 index 00000000000..69562d30c68 Binary files /dev/null and b/public/images/gui/in-action.gif differ diff --git a/public/images/gui/main-screen-with-branding.png b/public/images/gui/main-screen-with-branding.png new file mode 100644 index 00000000000..7b84a0069ae Binary files /dev/null and b/public/images/gui/main-screen-with-branding.png differ diff --git a/public/images/gui/main-screen.png b/public/images/gui/main-screen.png new file mode 100644 index 00000000000..99e0dd57fc5 Binary files /dev/null and b/public/images/gui/main-screen.png differ diff --git a/public/images/hero.png b/public/images/hero.png new file mode 100644 index 00000000000..15fdfcd50e8 Binary files /dev/null and b/public/images/hero.png differ diff --git a/public/images/install-upgrade-chocolatey-extension.png b/public/images/install-upgrade-chocolatey-extension.png new file mode 100644 index 00000000000..17e02f058d6 Binary files /dev/null and b/public/images/install-upgrade-chocolatey-extension.png differ diff --git a/public/images/internalizer/architecture-diagram.png b/public/images/internalizer/architecture-diagram.png new file mode 100644 index 00000000000..fec24c75eab Binary files /dev/null and b/public/images/internalizer/architecture-diagram.png differ diff --git a/public/images/internalizer/jenkins-ps-plugin.png b/public/images/internalizer/jenkins-ps-plugin.png new file mode 100644 index 00000000000..ce836d90992 Binary files /dev/null and b/public/images/internalizer/jenkins-ps-plugin.png differ diff --git a/public/images/intune/add-client-secret.png b/public/images/intune/add-client-secret.png new file mode 100644 index 00000000000..f8d208816c1 Binary files /dev/null and b/public/images/intune/add-client-secret.png differ diff --git a/public/images/intune/api-permissions.png b/public/images/intune/api-permissions.png new file mode 100644 index 00000000000..4adca4d92be Binary files /dev/null and b/public/images/intune/api-permissions.png differ diff --git a/public/images/intune/app-registration.png b/public/images/intune/app-registration.png new file mode 100644 index 00000000000..a29fc10c542 Binary files /dev/null and b/public/images/intune/app-registration.png differ diff --git a/public/images/intune/certificates-and-secrets.png b/public/images/intune/certificates-and-secrets.png new file mode 100644 index 00000000000..66dc8f6ac1a Binary files /dev/null and b/public/images/intune/certificates-and-secrets.png differ diff --git a/public/images/intune/get-app-information.png b/public/images/intune/get-app-information.png new file mode 100644 index 00000000000..3233ce9d258 Binary files /dev/null and b/public/images/intune/get-app-information.png differ diff --git a/public/images/intune/grant-admin-consent.png b/public/images/intune/grant-admin-consent.png new file mode 100644 index 00000000000..ce8c344d94a Binary files /dev/null and b/public/images/intune/grant-admin-consent.png differ diff --git a/public/images/intune/new-client-secret.png b/public/images/intune/new-client-secret.png new file mode 100644 index 00000000000..c09f7bda048 Binary files /dev/null and b/public/images/intune/new-client-secret.png differ diff --git a/public/images/intune/new-registration.png b/public/images/intune/new-registration.png new file mode 100644 index 00000000000..8f03a73b054 Binary files /dev/null and b/public/images/intune/new-registration.png differ diff --git a/public/images/intune/remove-existing-permissions.png b/public/images/intune/remove-existing-permissions.png new file mode 100644 index 00000000000..7acf3c00d93 Binary files /dev/null and b/public/images/intune/remove-existing-permissions.png differ diff --git a/public/images/intune/select-application-permissions.png b/public/images/intune/select-application-permissions.png new file mode 100644 index 00000000000..6931e9e79b3 Binary files /dev/null and b/public/images/intune/select-application-permissions.png differ diff --git a/public/images/intune/select-device-apps-read-write.png b/public/images/intune/select-device-apps-read-write.png new file mode 100644 index 00000000000..fee16079a4c Binary files /dev/null and b/public/images/intune/select-device-apps-read-write.png differ diff --git a/public/images/intune/select-graph.png b/public/images/intune/select-graph.png new file mode 100644 index 00000000000..49d2f2d7ffa Binary files /dev/null and b/public/images/intune/select-graph.png differ diff --git a/public/images/jenkins-upgrade-notification.png b/public/images/jenkins-upgrade-notification.png new file mode 100644 index 00000000000..adc6ddc37fb Binary files /dev/null and b/public/images/jenkins-upgrade-notification.png differ diff --git a/public/images/maintainer-handover/github-repository-link.png b/public/images/maintainer-handover/github-repository-link.png new file mode 100644 index 00000000000..b80a215c102 Binary files /dev/null and b/public/images/maintainer-handover/github-repository-link.png differ diff --git a/public/images/maintainer-handover/package-source-link.png b/public/images/maintainer-handover/package-source-link.png new file mode 100644 index 00000000000..4cff44d0e6c Binary files /dev/null and b/public/images/maintainer-handover/package-source-link.png differ diff --git a/public/images/maintainers/unlist-package-status-listed.png b/public/images/maintainers/unlist-package-status-listed.png new file mode 100644 index 00000000000..722f6d1871e Binary files /dev/null and b/public/images/maintainers/unlist-package-status-listed.png differ diff --git a/public/images/maintainers/unlist-package-status-unlisted.png b/public/images/maintainers/unlist-package-status-unlisted.png new file mode 100644 index 00000000000..ceda4a3d2dc Binary files /dev/null and b/public/images/maintainers/unlist-package-status-unlisted.png differ diff --git a/public/images/maintainers/unlist-package.png b/public/images/maintainers/unlist-package.png new file mode 100644 index 00000000000..9f01b39885c Binary files /dev/null and b/public/images/maintainers/unlist-package.png differ diff --git a/public/images/moderation-1.jpg b/public/images/moderation-1.jpg new file mode 100644 index 00000000000..d523dcd6943 Binary files /dev/null and b/public/images/moderation-1.jpg differ diff --git a/public/images/moderation-10.jpg b/public/images/moderation-10.jpg new file mode 100644 index 00000000000..6fa4d093b8c Binary files /dev/null and b/public/images/moderation-10.jpg differ diff --git a/public/images/moderation-11.jpg b/public/images/moderation-11.jpg new file mode 100644 index 00000000000..d4aab41faa5 Binary files /dev/null and b/public/images/moderation-11.jpg differ diff --git a/public/images/moderation-13.jpg b/public/images/moderation-13.jpg new file mode 100644 index 00000000000..f15b5986efc Binary files /dev/null and b/public/images/moderation-13.jpg differ diff --git a/public/images/moderation-4.jpg b/public/images/moderation-4.jpg new file mode 100644 index 00000000000..6fe1e481318 Binary files /dev/null and b/public/images/moderation-4.jpg differ diff --git a/public/images/moderation-5.jpg b/public/images/moderation-5.jpg new file mode 100644 index 00000000000..007e82cc3e8 Binary files /dev/null and b/public/images/moderation-5.jpg differ diff --git a/public/images/moderation-6.jpg b/public/images/moderation-6.jpg new file mode 100644 index 00000000000..4e6d8ebf53f Binary files /dev/null and b/public/images/moderation-6.jpg differ diff --git a/public/images/moderation/invalid-markdown-rendering.png b/public/images/moderation/invalid-markdown-rendering.png new file mode 100644 index 00000000000..c95d0ce981f Binary files /dev/null and b/public/images/moderation/invalid-markdown-rendering.png differ diff --git a/public/images/moderation/moderation-previous-comments.png b/public/images/moderation/moderation-previous-comments.png new file mode 100644 index 00000000000..6682c30fff0 Binary files /dev/null and b/public/images/moderation/moderation-previous-comments.png differ diff --git a/public/images/moderation/moderation-queue.png b/public/images/moderation/moderation-queue.png new file mode 100644 index 00000000000..0630a2ae6cb Binary files /dev/null and b/public/images/moderation/moderation-queue.png differ diff --git a/public/images/msysgit.png b/public/images/msysgit.png new file mode 100644 index 00000000000..a5a73a0cac3 Binary files /dev/null and b/public/images/msysgit.png differ diff --git a/public/images/msysgit2.png b/public/images/msysgit2.png new file mode 100644 index 00000000000..52fc4a4367e Binary files /dev/null and b/public/images/msysgit2.png differ diff --git a/public/images/package-builder/package-builder-cli-video.png b/public/images/package-builder/package-builder-cli-video.png new file mode 100644 index 00000000000..f0c7e4a7850 Binary files /dev/null and b/public/images/package-builder/package-builder-cli-video.png differ diff --git a/public/images/package-builder/package-builder-programs-features-video.png b/public/images/package-builder/package-builder-programs-features-video.png new file mode 100644 index 00000000000..4fa9ff1f5b3 Binary files /dev/null and b/public/images/package-builder/package-builder-programs-features-video.png differ diff --git a/public/images/package-builder/package-builder-ui-video.png b/public/images/package-builder/package-builder-ui-video.png new file mode 100644 index 00000000000..9a8d930d3ab Binary files /dev/null and b/public/images/package-builder/package-builder-ui-video.png differ diff --git a/public/images/package-builder/package-builder-ui.png b/public/images/package-builder/package-builder-ui.png new file mode 100644 index 00000000000..5912ab92700 Binary files /dev/null and b/public/images/package-builder/package-builder-ui.png differ diff --git a/public/images/packagepage-versionhistory.jpg b/public/images/packagepage-versionhistory.jpg new file mode 100644 index 00000000000..0906f177417 Binary files /dev/null and b/public/images/packagepage-versionhistory.jpg differ diff --git a/public/images/proxy-config-changes.png b/public/images/proxy-config-changes.png new file mode 100644 index 00000000000..791e1ddbbe0 Binary files /dev/null and b/public/images/proxy-config-changes.png differ diff --git a/public/images/quickdeploy/QDE-architecture.gif b/public/images/quickdeploy/QDE-architecture.gif new file mode 100644 index 00000000000..d382c829abc Binary files /dev/null and b/public/images/quickdeploy/QDE-architecture.gif differ diff --git a/public/images/quickdeploy/QDE-hyperv.gif b/public/images/quickdeploy/QDE-hyperv.gif new file mode 100644 index 00000000000..6727d65013e Binary files /dev/null and b/public/images/quickdeploy/QDE-hyperv.gif differ diff --git a/public/images/quickdeploy/QDE-hypervapp.gif b/public/images/quickdeploy/QDE-hypervapp.gif new file mode 100644 index 00000000000..84095d1ea43 Binary files /dev/null and b/public/images/quickdeploy/QDE-hypervapp.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-pw-error.png b/public/images/quickdeploy/QDE-nexus-pw-error.png new file mode 100644 index 00000000000..fc41bc44385 Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-pw-error.png differ diff --git a/public/images/quickdeploy/QDE-nexus-web-1.gif b/public/images/quickdeploy/QDE-nexus-web-1.gif new file mode 100644 index 00000000000..002d0ab717c Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-1.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-2.gif b/public/images/quickdeploy/QDE-nexus-web-2.gif new file mode 100644 index 00000000000..457ad683826 Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-2.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-3.gif b/public/images/quickdeploy/QDE-nexus-web-3.gif new file mode 100644 index 00000000000..dd66a5d1a07 Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-3.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-4.gif b/public/images/quickdeploy/QDE-nexus-web-4.gif new file mode 100644 index 00000000000..a96f206975b Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-4.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-5.gif b/public/images/quickdeploy/QDE-nexus-web-5.gif new file mode 100644 index 00000000000..772c615e430 Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-5.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-6.gif b/public/images/quickdeploy/QDE-nexus-web-6.gif new file mode 100644 index 00000000000..f2b505941de Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-6.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-7.gif b/public/images/quickdeploy/QDE-nexus-web-7.gif new file mode 100644 index 00000000000..751f21d7b26 Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-7.gif differ diff --git a/public/images/quickdeploy/QDE-nexus-web-8.gif b/public/images/quickdeploy/QDE-nexus-web-8.gif new file mode 100644 index 00000000000..866a15137ef Binary files /dev/null and b/public/images/quickdeploy/QDE-nexus-web-8.gif differ diff --git a/public/images/quickdeploy/QDE-vmdk-esx.gif b/public/images/quickdeploy/QDE-vmdk-esx.gif new file mode 100644 index 00000000000..7aa1fede3d2 Binary files /dev/null and b/public/images/quickdeploy/QDE-vmdk-esx.gif differ diff --git a/public/images/quickdeploy/QDE-vmdk-fusion.gif b/public/images/quickdeploy/QDE-vmdk-fusion.gif new file mode 100644 index 00000000000..73d081057bb Binary files /dev/null and b/public/images/quickdeploy/QDE-vmdk-fusion.gif differ diff --git a/public/images/recompile/choco_delete_pkg_files.png b/public/images/recompile/choco_delete_pkg_files.png new file mode 100644 index 00000000000..e240e141d8c Binary files /dev/null and b/public/images/recompile/choco_delete_pkg_files.png differ diff --git a/public/images/recompile/choco_download_zip.png b/public/images/recompile/choco_download_zip.png new file mode 100644 index 00000000000..917a80b1934 Binary files /dev/null and b/public/images/recompile/choco_download_zip.png differ diff --git a/public/images/recompile/choco_npp_download.png b/public/images/recompile/choco_npp_download.png new file mode 100644 index 00000000000..e46d6351353 Binary files /dev/null and b/public/images/recompile/choco_npp_download.png differ diff --git a/public/images/recompile/choco_rename_nupkg_zip.png b/public/images/recompile/choco_rename_nupkg_zip.png new file mode 100644 index 00000000000..68a558833d6 Binary files /dev/null and b/public/images/recompile/choco_rename_nupkg_zip.png differ diff --git a/public/images/reducemoderationemail.png b/public/images/reducemoderationemail.png new file mode 100644 index 00000000000..a1d8f12e3c1 Binary files /dev/null and b/public/images/reducemoderationemail.png differ diff --git a/public/images/script-builder/sb-add-list.jpg b/public/images/script-builder/sb-add-list.jpg new file mode 100644 index 00000000000..83ab42fea32 Binary files /dev/null and b/public/images/script-builder/sb-add-list.jpg differ diff --git a/public/images/script-builder/sb-add-package-page.jpg b/public/images/script-builder/sb-add-package-page.jpg new file mode 100644 index 00000000000..bfa81531280 Binary files /dev/null and b/public/images/script-builder/sb-add-package-page.jpg differ diff --git a/public/images/script-builder/sb-add-version.jpg b/public/images/script-builder/sb-add-version.jpg new file mode 100644 index 00000000000..3582e98560f Binary files /dev/null and b/public/images/script-builder/sb-add-version.jpg differ diff --git a/public/images/script-builder/sb-individual.gif b/public/images/script-builder/sb-individual.gif new file mode 100644 index 00000000000..e9a1e619982 Binary files /dev/null and b/public/images/script-builder/sb-individual.gif differ diff --git a/public/images/script-builder/sb-internal-url.jpg b/public/images/script-builder/sb-internal-url.jpg new file mode 100644 index 00000000000..5e4840f360d Binary files /dev/null and b/public/images/script-builder/sb-internal-url.jpg differ diff --git a/public/images/script-builder/sb-organization.gif b/public/images/script-builder/sb-organization.gif new file mode 100644 index 00000000000..19e3115c37a Binary files /dev/null and b/public/images/script-builder/sb-organization.gif differ diff --git a/public/images/script-builder/sb-package-list.jpg b/public/images/script-builder/sb-package-list.jpg new file mode 100644 index 00000000000..d6b2e2f96fe Binary files /dev/null and b/public/images/script-builder/sb-package-list.jpg differ diff --git a/public/images/search-by-algolia-dark-background.svg b/public/images/search-by-algolia-dark-background.svg new file mode 100644 index 00000000000..f8c944a72d9 --- /dev/null +++ b/public/images/search-by-algolia-dark-background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/search-by-algolia-light-background.svg b/public/images/search-by-algolia-light-background.svg new file mode 100644 index 00000000000..f1c841e7f88 --- /dev/null +++ b/public/images/search-by-algolia-light-background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/snags/ChocolateyPackagingPublicVsPrivate.snagproj b/public/images/snags/ChocolateyPackagingPublicVsPrivate.snagproj new file mode 100644 index 00000000000..e44db7be13a Binary files /dev/null and b/public/images/snags/ChocolateyPackagingPublicVsPrivate.snagproj differ diff --git a/public/images/snags/DownloadChocolateyPackage.snagproj b/public/images/snags/DownloadChocolateyPackage.snagproj new file mode 100644 index 00000000000..516a416d9cc Binary files /dev/null and b/public/images/snags/DownloadChocolateyPackage.snagproj differ diff --git a/public/images/statlight.png b/public/images/statlight.png new file mode 100644 index 00000000000..48cc3bc0d15 Binary files /dev/null and b/public/images/statlight.png differ diff --git a/public/images/system-proxy-settings.png b/public/images/system-proxy-settings.png new file mode 100644 index 00000000000..780ca1d70b8 Binary files /dev/null and b/public/images/system-proxy-settings.png differ diff --git a/public/images/triage-broken.jpg b/public/images/triage-broken.jpg new file mode 100644 index 00000000000..88656fd7060 Binary files /dev/null and b/public/images/triage-broken.jpg differ diff --git a/public/images/triage-download.jpg b/public/images/triage-download.jpg new file mode 100644 index 00000000000..4444ea3172c Binary files /dev/null and b/public/images/triage-download.jpg differ diff --git a/public/images/triage-maintainerlinks.jpg b/public/images/triage-maintainerlinks.jpg new file mode 100644 index 00000000000..3e90fb70f0f Binary files /dev/null and b/public/images/triage-maintainerlinks.jpg differ diff --git a/public/images/triage-maintainerrepository.jpg b/public/images/triage-maintainerrepository.jpg new file mode 100644 index 00000000000..cb6222e79c2 Binary files /dev/null and b/public/images/triage-maintainerrepository.jpg differ diff --git a/public/images/triage-maintainers.jpg b/public/images/triage-maintainers.jpg new file mode 100644 index 00000000000..066aa5e7674 Binary files /dev/null and b/public/images/triage-maintainers.jpg differ diff --git a/public/images/triage-packagesource.jpg b/public/images/triage-packagesource.jpg new file mode 100644 index 00000000000..15e13daec85 Binary files /dev/null and b/public/images/triage-packagesource.jpg differ diff --git a/public/images/triage-reportabuse.jpg b/public/images/triage-reportabuse.jpg new file mode 100644 index 00000000000..31915ea00f9 Binary files /dev/null and b/public/images/triage-reportabuse.jpg differ diff --git a/public/images/triage-siteadmins.jpg b/public/images/triage-siteadmins.jpg new file mode 100644 index 00000000000..46b57851a1c Binary files /dev/null and b/public/images/triage-siteadmins.jpg differ diff --git a/public/images/triage-waiting.jpg b/public/images/triage-waiting.jpg new file mode 100644 index 00000000000..164cb3bff0a Binary files /dev/null and b/public/images/triage-waiting.jpg differ diff --git a/public/images/virus_scan_flagged.png b/public/images/virus_scan_flagged.png new file mode 100644 index 00000000000..e7ba39290ee Binary files /dev/null and b/public/images/virus_scan_flagged.png differ diff --git a/public/images/virus_scan_normal.png b/public/images/virus_scan_normal.png new file mode 100644 index 00000000000..8d0ec51e06e Binary files /dev/null and b/public/images/virus_scan_normal.png differ diff --git a/setup.ps1 b/setup.ps1 new file mode 100644 index 00000000000..60be6d59d1a --- /dev/null +++ b/setup.ps1 @@ -0,0 +1,20 @@ +$scriptDir = $(Split-Path -parent $MyInvocation.MyCommand.Definition) + +# Install chocolatey if required +Try +{ + Get-Command choco -ErrorAction Stop +} +Catch +{ + Write-Host "Chocolatey not installed..." + Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + + $ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" + if (Test-Path($ChocolateyProfile)) { + Import-Module "$ChocolateyProfile" + } +} + +Write-Host "Installing base line applications for Chocolatey docs..." +choco upgrade nodejs-lts -y --no-progress \ No newline at end of file diff --git a/src/components/Breadcrumbs.astro b/src/components/Breadcrumbs.astro new file mode 100644 index 00000000000..148367689ce --- /dev/null +++ b/src/components/Breadcrumbs.astro @@ -0,0 +1,40 @@ +--- +import { getEntry } from 'astro:content'; +const { isHome } = Astro.props; + +const paths = Astro.url.pathname.split('/').filter(x => x); + +const parts = [{ + text: 'Chocolatey', + href: 'en-us' +}]; + +const buildPartsList = async () => { + for (let i = 0; i < paths.length; i++) { + const href = `${paths.slice(0, i + 1).join('/')}`; + + if (href !== 'en-us') { + const blogPost = await getEntry('docs', href); + + if (blogPost) { + parts.push({ + text: blogPost.data.title, + href: blogPost.slug + }); + } + } + } +} + +await buildPartsList(); +--- + + diff --git a/src/components/Children.astro b/src/components/Children.astro new file mode 100644 index 00000000000..4c34fb42610 --- /dev/null +++ b/src/components/Children.astro @@ -0,0 +1,80 @@ +--- +import type { ContentTree } from '@scripts/types'; +import { generateContentTree } from '@scripts/generate-content-tree.ts'; + +import Xref from '@components/Xref.astro'; + +let { content, filter, value } = Astro.props; + +if (!content) { + content = await generateContentTree(); +} + +interface Props { + content: ContentTree[]; + filter?: string; + value?: string; +} + +const findObjectBySlug = async (obj: ContentTree, slug: string): Promise => { + // Base case: If obj is not an object or is null, return null + if (!obj || typeof obj !== 'object') { + return null; + } + + // Check if the current object has the specified slug + if (slug === obj.slug || slug === obj.slug.slice(0, -1)) { + return obj; + } + + // Check if the current object has children + if (obj.children && obj.children.length > 0) { + // Recursively search through the children + for (const child of obj.children) { + const result = await findObjectBySlug(child, slug); + + // If the object with the specified slug is found in any child, return it + if (result !== null) { + return result; + } + } + } + + // If the object is not found, return null + return null; +}; + +let doc = await findObjectBySlug(content[0], Astro.url.pathname); + +if (doc) { + if (doc.children && doc.children.length > 0 && filter && value) { + doc = { + ...doc, + children: doc.children.filter((child: { data: { [key: string]: any } }) => child.data[filter] === value) + }; + } else if (doc.children && doc.children.length > 0 && doc.data.hideChildPages) { + doc = { + ...doc, + children: [] + }; + } +} +--- + +{(doc && doc.children && doc.children.length > 0) && ( +
+ {doc.children.map(child => ( +
+ +
+ ))} +
+)} diff --git a/src/components/Collapse.astro b/src/components/Collapse.astro new file mode 100644 index 00000000000..7349a028cc5 --- /dev/null +++ b/src/components/Collapse.astro @@ -0,0 +1,17 @@ +--- +import { collapseSchema } from '@scripts/types.ts'; +import type { Collapse } from '@scripts/types.ts'; +const { content } = Astro.props; + +interface Props { + content: Collapse +} + +// Validate the content +collapseSchema.parse(content); +--- + + +
+ +
diff --git a/src/components/DateTime.astro b/src/components/DateTime.astro new file mode 100644 index 00000000000..4e9e66e6258 --- /dev/null +++ b/src/components/DateTime.astro @@ -0,0 +1,11 @@ +--- +const { dateTime } = Astro.props; + +const weekday = dateTime.toLocaleString('en-US', { weekday: 'long' }); +const day = dateTime.getDate(); +const month = dateTime.toLocaleString('en-US', { month: 'long' }); +const year = dateTime.getFullYear(); +const friendlyDate = `${weekday}, ${day} ${month}, ${year}`; +--- + + diff --git a/src/components/TopAlertBanner.astro b/src/components/TopAlertBanner.astro new file mode 100644 index 00000000000..8b8bc97167b --- /dev/null +++ b/src/components/TopAlertBanner.astro @@ -0,0 +1,12 @@ +--- +const topNoticeText = "Don't miss a byte of Chocolatey goodness! Explore our livestream events now!"; +--- + +{topNoticeText && ( + +)} diff --git a/src/components/Xref.astro b/src/components/Xref.astro new file mode 100644 index 00000000000..fd112101b06 --- /dev/null +++ b/src/components/Xref.astro @@ -0,0 +1,10 @@ +--- +import { xref } from '@scripts/xref.ts'; + +const { title, value, anchor, classes, icon } = Astro.props; +const link = await xref(value, anchor); +const allClasses = classes ? classes : ''; +const iconTitle = `${title}`; +--- + +{icon ? : title} diff --git a/src/components/docs/AvailableFeatures.mdx b/src/components/docs/AvailableFeatures.mdx new file mode 100644 index 00000000000..472a42a296a --- /dev/null +++ b/src/components/docs/AvailableFeatures.mdx @@ -0,0 +1,22 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- diff --git a/src/components/docs/AvailableSettings.mdx b/src/components/docs/AvailableSettings.mdx new file mode 100644 index 00000000000..49bc56c0d30 --- /dev/null +++ b/src/components/docs/AvailableSettings.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +- +- +- diff --git a/src/components/docs/ChocolateyComponentDependencies.mdx b/src/components/docs/ChocolateyComponentDependencies.mdx new file mode 100644 index 00000000000..e3427eb9c96 --- /dev/null +++ b/src/components/docs/ChocolateyComponentDependencies.mdx @@ -0,0 +1,56 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +## Chocolatey Component Package Dependencies + +Some of the Chocolatey component packages have dependencies on other Chocolatey components. +The following table aims to illustrate those dependencies, based on the latest shipped version of each component. +Please refer to our for details on which versions are supported for licensed and open source customers. + +| Package Name / Dependency | chocolatey | chocolatey.extension | chocolateygui | +| ------------------------------ | ----------- | -------------------- | ------------- | +| chocolatey v2.2.2 | | | | +| chocolatey.extension v6.1.3 | v2.0.0 | | | +| chocolatey-agent v2.1.2 | | v6.0.0 | | +| chocolateygui v2.1.1 | v2.0.0 | | | +| chocolateygui.extension v2.0.0 | | v6.0.0 | v2.0.0 | +| chocolatey v1.4.0 | | | | +| chocolatey.extension v5.0.6 | v1.2.0 | | | +| chocolatey-agent v1.1.4 | | v4.0.0 | | +| chocolateygui v1.1.3 | v1.0.0 | | | +| chocolateygui.extension v1.0.3 | | v4.0.0 | v1.1.2 | + +> :choco-warning: **WARNING** +> +> Due to the nature of how Chocolatey package dependencies work, we can ensure that all the required package versions are +> installed. For example, if you were to install chocolateygui.extension then it would make sure that the following tree +> of packages, with as a minimum these package versions, are installed: +> +> | Package Name | Version | +> | ----------------------- | ------- | +> | chocolateygui.extension | v2.0.0 | +> | chocolateygui | v2.0.0 | +> | chocolatey.extension | v6.0.0 | +> | chocolatey | v2.0.0 | + +> :choco-info: **NOTE** +> +> Newer package versions may be available at the time of installation, and Chocolatey will pick the highest +> available that matches the defined dependency range. +> +> However, there is nothing that can be done to ensure that indirect dependencies are satisfied. +> For example, if you currently have chocolateygui v0.18.1 installed along with chocolateygui.extension +> v0.2.1 and you first upgrade to chocolateygui v0.19.0, then you will see errors if you attempt to +> run Chocolatey GUI, since the chocolateygui.extension package also needs to be updated. +> +> Based on the package releases, the recommended installation/upgrade order is the following: +> +> * chocolateygui.extension +> * chocolateygui +> * chocolatey-agent +> * chocolatey.extension +> * chocolatey +> +> This will ensure that all dependencies, both direct and indirect, are installed. diff --git a/src/components/docs/ChocolateyComponentDependenciesLink.mdx b/src/components/docs/ChocolateyComponentDependenciesLink.mdx new file mode 100644 index 00000000000..89e274830e5 --- /dev/null +++ b/src/components/docs/ChocolateyComponentDependenciesLink.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +## Chocolatey Component Package Dependencies + +Please check out the section for more information about how each package version relates to the other. diff --git a/src/components/docs/ConfigurationManagers.mdx b/src/components/docs/ConfigurationManagers.mdx new file mode 100644 index 00000000000..20aafedc881 --- /dev/null +++ b/src/components/docs/ConfigurationManagers.mdx @@ -0,0 +1,60 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +For common integrations, it's handy to refer to the table below to know what configuration manager to choose. Most of the implementations below are written and managed by the companies behind the product. These implementations are typically open source and each part could be added by community contributions for those familiar with the code implementations. If you are unable to provide code implementations for adding necessary functionality to the integrations, we find it best if you create issues/tickets with those organizations if you are a customer as you will have more leverage into getting them implemented. + +> :choco-info: **NOTE** +> +> If you are a configuration manager company identified in the table and you have implemented anything in the below or you find our information is incorrect, please let us know so we can get it fixed. + +| Configuration Managers | [Ansible][ansible_main] | [Chef][chef_main] | [PowerShell DSC][dsc_main] | [Puppet][pp_main] | [Salt][salt_main] | [Otter][otter_main] | +|-----------------------------------------------------|-------------------------|--------------------|----------------------------|-------------------|-------------------|---------------------| +| Manage Packages | [x][ansible_main] | [x][chef_main] | [x][dsc_pkgs] | [x][pp_pkgs] | [x][salt_pkgs] | [x][otter_pkgs] | +| | [x][ansible_main] | [x][chef_cookbook] | [x][dsc_install] | [x][pp_install] | [x][salt_install] | [x][otter_install] | +| Install Chocolatey from internal source | [x][ansible_main] | [x][chef_cookbook] | [x][dsc_install] | [x][pp_install] | | [x][otter_install] | +| | [x][ansible_source] | [x][chef_source] | [x][dsc_source] | [x][pp_source] | [x][salt_source] | [x][otter_source] | +| Manage Source Type (Admin/Self-Service) | [x][ansible_source] | | | [x][pp_source] | | | +| | [x][ansible_feature] | | [x][dsc_feature] | [x][pp_feature] | | [x][otter_feature] | +| | [x][ansible_config] | [x][chef_config] | | [x][pp_config] | | | + +> :choco-info: **NOTE** +> +> Each *x* is linked to the specific feature documentation. + +For most of these, those configuration managers have some sort of exec you could use to manage those additional aspects, but it would be best if they supported all aspects of configuration of Chocolatey as part of the provider implementations. + +[ansible_main]:https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html +[ansible_source]: https://docs.ansible.com/ansible/latest/modules/win_chocolatey_source_module.html +[ansible_feature]:https://docs.ansible.com/ansible/latest/modules/win_chocolatey_feature_module.html +[ansible_config]:https://docs.ansible.com/ansible/latest/modules/win_chocolatey_config_module.html + +[chef_main]:https://docs.chef.io/resource_chocolatey_package.html +[chef_cookbook]:https://supermarket.chef.io/cookbooks/chocolatey/ +[chef_source]:https://docs.chef.io/resource_chocolatey_source.html +[chef_config]:https://docs.chef.io/resource_chocolatey_config.html + +[dsc_main]:https://www.powershellgallery.com/packages/cChoco +[dsc_pkgs]:https://github.com/chocolatey/cChoco/blob/development/DSCResources/cChocoPackageInstall/cChocoPackageInstall.schema.mof +[dsc_install]:https://github.com/chocolatey/cChoco/blob/development/DSCResources/cChocoInstaller/cChocoInstaller.schema.mof +[dsc_source]:https://github.com/chocolatey/cChoco/blob/development/DSCResources/cChocoSource/cChocoSource.schema.mof +[dsc_feature]:https://github.com/chocolatey/cChoco/blob/master/DSCResources/cChocoFeature/cChocoFeature.schema.mof + +[pp_main]:https://forge.puppet.com/puppetlabs/chocolatey +[pp_pkgs]:https://forge.puppet.com/puppetlabs/chocolatey#package-provider-chocolatey +[pp_install]:https://forge.puppet.com/puppetlabs/chocolatey#class-chocolatey +[pp_source]:https://forge.puppet.com/puppetlabs/chocolatey#chocolateysource +[pp_feature]:https://forge.puppet.com/puppetlabs/chocolatey#chocolateyfeature +[pp_config]:https://forge.puppet.com/puppetlabs/chocolatey#chocolateyconfig + +[salt_main]:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html +[salt_pkgs]:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html#salt.modules.chocolatey.install +[salt_install]:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html#salt.modules.chocolatey.bootstrap +[salt_source]:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html#salt.modules.chocolatey.add_source + +[otter_main]:https://inedo.com/den/inedox/chocolatey +[otter_pkgs]:https://github.com/Inedo/inedox-chocolatey/blob/master/Chocolatey/InedoExtension/Configurations/ChocolateyPackageConfiguration.cs +[otter_install]:https://github.com/Inedo/inedox-chocolatey/blob/master/Chocolatey/InedoExtension/Configurations/ChocolateyInstalledConfiguration.cs +[otter_source]:https://github.com/Inedo/inedox-chocolatey/blob/master/Chocolatey/InedoExtension/Configurations/ChocolateySourceConfiguration.cs +[otter_feature]:https://github.com/Inedo/inedox-chocolatey/blob/master/Chocolatey/InedoExtension/Configurations/ChocolateyFeatureConfiguration.cs diff --git a/src/components/docs/HidingSources.mdx b/src/components/docs/HidingSources.mdx new file mode 100644 index 00000000000..51da6fd81fe --- /dev/null +++ b/src/components/docs/HidingSources.mdx @@ -0,0 +1,10 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> It is not possible to use both the and the features at the same time. +> Doing this would effectively mean that there is nothing to display within the Chocolatey GUI Application. +> If both of these features are enabled at the same time, the HideAllRemoteChocolateySources feature takes precedence and only the This PC source will be displayed. diff --git a/src/components/docs/IisWsusChocolatey.mdx b/src/components/docs/IisWsusChocolatey.mdx new file mode 100644 index 00000000000..cd87c100935 --- /dev/null +++ b/src/components/docs/IisWsusChocolatey.mdx @@ -0,0 +1,41 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +If you are running Chocolatey Products, namely Simple Server or Central Management, next to a WSUS admin-site, you need to change some settings in the IIS-Configuration for making the Simple Server/Central Management Web interface work correctly again. +This is due to the fact that the WSUS admin-site installation registers two modules in the IIS root configuration, which will be passed down to all other sites running on that IIS instance, including the Simple Server and Central Management sites. + +To make things work again, you will need to disable inheritance for these modules in order to remove them from the Chocolatey product site you are working with. + +*Before making changes to your IIS configuration, read all steps carefully and make sure that you have a backup* + +You can do this either by PowerShell: +```powershell +# Import WebAdministration +Import-Module WebAdministration + +# Remove locks from modules +Remove-WebConfigurationLock -Filter "system.webServer/modules/add[@name='DynamicCompressionModule']" -PSPath IIS:\ +Remove-WebConfigurationLock -Filter "system.webServer/modules/add[@name='StaticCompressionModule']" -PSPath IIS:\ + +# Remove modules from the Chocolatey Simple Server site +Disable-WebGlobalModule -PSPath 'IIS:\Sites\ChocolateyServer\' -Name DynamicCompressionModule +Disable-WebGlobalModule -PSPath 'IIS:\Sites\ChocolateyServer\' -Name StaticCompressionModule + +# Restart website +Stop-Website -Name "ChocolateyServer" #Or ChocolateyCentralManagement +Start-Website -Name "ChocolateyServer" #Or ChocolateyCentralManagement +``` +or manual: + 1. Open the IIS Management Console + 2. Click on the server name on the upper left pane + 3. On the right pane double-click on `Modules`. All available modules will show up + 4. Search for `DynamicCompressionModule`, right-click it and choose `Unlock` + 5. Do the same for `StaticCompressionModule` + 6. Under `Sites` on the left pane click on the site for your Chocolatey Simple Server, most likely `ChocolateyServer` + 7. Again, search for `Modules` on the right pane and double-click it + 8. Search for `DynamicCompressionModule`, right-click it and choose `Remove` + 9. Restart the Chocolatey Simple Server/Central Management site + +The website should now be able to handle requests correctly again. diff --git a/src/components/docs/ImportDeploymentPlan.mdx b/src/components/docs/ImportDeploymentPlan.mdx new file mode 100644 index 00000000000..1bc5e5f087a --- /dev/null +++ b/src/components/docs/ImportDeploymentPlan.mdx @@ -0,0 +1,27 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +## Importing a Deployment Plan + +A Deployment Plan can be imported using a `.json` file. + +1. Prepare your `.json` file or export an existing Deployment Plan. + +1. From the Chocolatey Central Management dashboard, select `Deployment Plans` from the left sidebar. + + ![Chocolatey Central Management dashboard, arrow pointing to Deployment Plans menu in the left sidebar](/images/ccm-playwright/dashboard/left-menu-deployment-plans.png) + +1. Select the **Import Deployment Plan** button at the top of the page. + + ![Chocolatey Central Management Deployment Plans page, arrow pointing to Import Deployment Plan button](/images/ccm-playwright/deployment-plans/button-import-deployment-plan.png) + +1. Click the **Choose File** button to select your `.json` file. Review the imported Deployment Plan and then click the **Import** button. + + ![Chocolatey Central Management import Deployment Plan modal, arrow pointing to the Choose Deployment Plan button and the Import button](/images/ccm-playwright/deployment-plans/modal-import-deployment-plan.png) + + * The Deployment Plan name is shown along with all Deployment Steps after choosing a `.json` file. + * A yellow badge will appear next to any Deployment Steps that are privileged, along with a warning that gives more information. + +1. Once the Deployment Plan has been successfully created, you will be taken to the edit page ready to make any additional required changes. diff --git a/src/components/docs/IntuneDownloadArchitect.mdx b/src/components/docs/IntuneDownloadArchitect.mdx new file mode 100644 index 00000000000..b3743a962ce --- /dev/null +++ b/src/components/docs/IntuneDownloadArchitect.mdx @@ -0,0 +1,6 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +* If you are using an Architect license, run `choco download chocolatey chocolatey.extension chocolateygui --ignore-dependencies` diff --git a/src/components/docs/IntuneDownloadBusiness.mdx b/src/components/docs/IntuneDownloadBusiness.mdx new file mode 100644 index 00000000000..2a238027e35 --- /dev/null +++ b/src/components/docs/IntuneDownloadBusiness.mdx @@ -0,0 +1,6 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +* If you are using a Business license, run `choco download chocolatey chocolatey.extension chocolateygui chocolateygui.extension chocolatey-agent --ignore-dependencies` diff --git a/src/components/docs/IntuneNote.mdx b/src/components/docs/IntuneNote.mdx new file mode 100644 index 00000000000..3d560e20e0d --- /dev/null +++ b/src/components/docs/IntuneNote.mdx @@ -0,0 +1,12 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> The Chocolatey Intune integration shipped as part of v3.0.0 of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> The Chocolatey Intune integration requires a valid Chocolatey for Business or Chocolatey for Business Trial license. diff --git a/src/components/docs/MaintenanceAndSupport.mdx b/src/components/docs/MaintenanceAndSupport.mdx new file mode 100644 index 00000000000..8701909e99d --- /dev/null +++ b/src/components/docs/MaintenanceAndSupport.mdx @@ -0,0 +1,32 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +## Maintenance and Support Contract Considerations for Perpetual License Customers + +Having a Maintenance and Support contract with Chocolatey Software, Inc. consists of two parts: + +- Maintenance - allows you to download newer versions of the licensed components of Chocolatey. +- Support - allows you to submit issue tickets to our Helpdesk and also have access to our Support Team. + +During the active period of the contract, you have access to both `Maintenance` and `Support`. +Once that expires, you would simply need to purchase that contract again to continue access to newer versions of those components. + +A Perpetual License means that you have a license which never expires and you are able to use the Chocolatey Licensed Extension with versions of Chocolatey CLI that are compatible. +While your Maintenance contract is valid, you are able to download updates to the licensed components. + +A Perpetual License customer that does not have an active Maintenance contract will not be in a position to upgrade to the latest version of Chocolatey Licensed Extension. +This can cause problems when there is a dependency that exists between a new version of Chocolatey CLI and Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> We added the dependency requirement to the of v1.0.0 of Chocolatey CLI but some customers continued to experience the issue. +> In the and the releases of Chocolatey CLI we implemented changes to allow Chocolatey CLI to work with the latest version of Chocolatey Licensed Extension. There are no guarantees that these changes will be applied in the same way to future versions. + +If you are in this position, we suggest that you take one of the following actions: + +- Request a Maintenance and Support contract renewal, upgrade the Chocolatey Licensed Extension to the latest version and then upgrade Chocolatey CLI. +- Forego the Maintenance and Support contract renewal and stay with the version of Chocolatey CLI and Chocolatey Licensed Extension that you use. To prevent accidental upgrade of Chocolatey CLI we would suggest that you to the version you use and ensure you are using an . + +If you have any questions about your Perpetual License or your Maintenance and Support contract, please [reach out to the Sales team](https://chocolatey.org/contact/sales-general). diff --git a/src/components/docs/MaintenanceAndSupportLink.mdx b/src/components/docs/MaintenanceAndSupportLink.mdx new file mode 100644 index 00000000000..bf10f3b6d2f --- /dev/null +++ b/src/components/docs/MaintenanceAndSupportLink.mdx @@ -0,0 +1,9 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +## Maintenance and Support contract considerations for Perpetual License customers + + +Please check out the section for more information. diff --git a/src/components/docs/NetshBindingsNote.mdx b/src/components/docs/NetshBindingsNote.mdx new file mode 100644 index 00000000000..8152ddc47a7 --- /dev/null +++ b/src/components/docs/NetshBindingsNote.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> Starting with CCM 0.6.0, netsh bindings are no longer created during the installation of the CCM Service package. On installing the 0.6.0 CCM Service package, any existing netsh bindings that were created specifically for CCM usage will be removed. diff --git a/src/components/docs/PackageValidatorRuleGuideline.mdx b/src/components/docs/PackageValidatorRuleGuideline.mdx new file mode 100644 index 00000000000..56e6a4f9836 --- /dev/null +++ b/src/components/docs/PackageValidatorRuleGuideline.mdx @@ -0,0 +1,10 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This rule has been marked as a Guideline +> +> Guidelines are strong suggestions that improve the quality of a package version. These are considered something to fix for next time to increase the quality of the package. Over time Guidelines can become Requirements. A package version can be approved without addressing Guideline comments but will reduce the quality of the package. diff --git a/src/components/docs/PackageValidatorRuleNote.mdx b/src/components/docs/PackageValidatorRuleNote.mdx new file mode 100644 index 00000000000..3ddcb0b9354 --- /dev/null +++ b/src/components/docs/PackageValidatorRuleNote.mdx @@ -0,0 +1,10 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This rule has been marked as a Note +> +> Notes typically flag things for both you and the reviewer to go over. Sometimes this is the use of things that may or may not be necessary given the constraints of what you are trying to do and/or are harder for automation to flag for other reasons. Items found in Notes might be Requirements depending on the context. A package version can be approved without addressing Note comments. diff --git a/src/components/docs/PackageValidatorRuleRequirement.mdx b/src/components/docs/PackageValidatorRuleRequirement.mdx new file mode 100644 index 00000000000..2f2e99d8463 --- /dev/null +++ b/src/components/docs/PackageValidatorRuleRequirement.mdx @@ -0,0 +1,10 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This rule has been marked as a Requirement. +> +> Requirements represent the minimum quality of a package that is acceptable. When a package version has failed requirements, the package version requires fixing and/or response by the maintainer. Provided a Requirement has flagged correctly, it must be fixed before the package version can be approved. The exact same version should be uploaded during moderation review. diff --git a/src/components/docs/PackageValidatorRuleSuggestion.mdx b/src/components/docs/PackageValidatorRuleSuggestion.mdx new file mode 100644 index 00000000000..f4d33892b03 --- /dev/null +++ b/src/components/docs/PackageValidatorRuleSuggestion.mdx @@ -0,0 +1,10 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This rule has been marked as a Suggestion. +> +> Suggestions are either newly introduced items that will later become Guidelines or items that are don't carry enough weight to become a Guideline. Either way they should be considered. A package version can be approved without addressing Suggestion comments. diff --git a/src/components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx b/src/components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx new file mode 100644 index 00000000000..d57a87dbb81 --- /dev/null +++ b/src/components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> This is a Chocolatey for Business feature, and will require install of the . diff --git a/src/components/docs/RestartRequiredWarning.mdx b/src/components/docs/RestartRequiredWarning.mdx new file mode 100644 index 00000000000..4b589d7064f --- /dev/null +++ b/src/components/docs/RestartRequiredWarning.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> In order for this change to take effect, it will be necessary to close and re-open Chocolatey GUI. diff --git a/src/components/docs/SensitiveVariablesNote.mdx b/src/components/docs/SensitiveVariablesNote.mdx new file mode 100644 index 00000000000..5629768b11d --- /dev/null +++ b/src/components/docs/SensitiveVariablesNote.mdx @@ -0,0 +1,8 @@ +--- + +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> To ensure that you don't accidentally leak sensitive information into Chocolatey logs, be sure to use them with . diff --git a/src/components/global/CollapsingRightSidebarContent.astro b/src/components/global/CollapsingRightSidebarContent.astro new file mode 100644 index 00000000000..ad96fbf6624 --- /dev/null +++ b/src/components/global/CollapsingRightSidebarContent.astro @@ -0,0 +1,117 @@ + + + + + +
+ +
+
+ + Unpacking Software Livestream + +

Join our monthly Unpacking Software livestream to hear about the latest news, chat and opinion on packaging, software deployment and lifecycle management!

+ Learn More +
+
+
+ + Chocolatey Product Spotlight + +

Join the Chocolatey Team on our regular monthly stream where we put a spotlight on the most recent Chocolatey product releases. You'll have a chance to have your questions answered in a live Ask Me Anything format.

+ Learn More +
+
+
+ + Chocolatey Coding Livestream + +

Join us for the Chocolatey Coding Livestream, where members of our team dive into the heart of open source development by coding live on various Chocolatey projects. Tune in to witness real-time coding, ask questions, and gain insights into the world of package management. Don't miss this opportunity to engage with our team and contribute to the future of Chocolatey!

+ Learn More +
+
+
+
+ + Calling All Chocolatiers! Whipping Up Windows Automation with Chocolatey Central Management + +

Webinar from
Wednesday, 17 January 2024

+

We are delighted to announce the release of Chocolatey Central Management v0.12.0, featuring seamless Deployment Plan creation, time-saving duplications, insightful Group Details, an upgraded Dashboard, bug fixes, user interface polishing, and refined documentation. As an added bonus we'll have members of our Solutions Engineering team on-hand to dive into some interesting ways you can leverage the new features available!

+ Watch On-Demand +
+
+
+ + Chocolatey Community Coffee Break + +

Join the Chocolatey Team as we discuss all things Community, what we do, how you can get involved and answer your Chocolatey questions.

+ Watch The Replays +
+
+
+ + Chocolatey and Intune Overview + +

Webinar Replay from
Wednesday, 30 March 2022

+

At Chocolatey Software we strive for simple, and teaching others. Let us teach you just how simple it could be to keep your 3rd party applications updated across your devices, all with Intune!

+ Watch On-Demand +
+
+
+ + Chocolatey For Business. In Azure. In One Click. + +

Livestream from
Thursday, 9 June 2022

+

Join James and Josh to show you how you can get the Chocolatey For Business recommended infrastructure and workflow, created, in Azure, in around 20 minutes.

+ Watch On-Demand +
+
+
+ + The Future of Chocolatey CLI + +

Livestream from
Thursday, 04 August 2022

+

Join Paul and Gary to hear more about the plans for the Chocolatey CLI in the not so distant future. We'll talk about some cool new features, long term asks from Customers and Community and how you can get involved!

+ Watch On-Demand +
+
+
+ + Hacktoberfest Tuesdays 2022 + +

Livestreams from
October 2022

+

For Hacktoberfest, Chocolatey ran a livestream every Tuesday! Re-watch Cory, James, Gary, and Rain as they share knowledge on how to contribute to open-source projects such as Chocolatey CLI.

+ Watch On-Demand +
+
+
diff --git a/src/components/global/GlobalNavigation.astro b/src/components/global/GlobalNavigation.astro new file mode 100644 index 00000000000..f89f87022a2 --- /dev/null +++ b/src/components/global/GlobalNavigation.astro @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/src/components/global/GoogleTag.astro b/src/components/global/GoogleTag.astro new file mode 100644 index 00000000000..fb83a2a7a18 --- /dev/null +++ b/src/components/global/GoogleTag.astro @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/src/components/global/SocialMedia.astro b/src/components/global/SocialMedia.astro new file mode 100644 index 00000000000..6479717dd8e --- /dev/null +++ b/src/components/global/SocialMedia.astro @@ -0,0 +1,79 @@ + \ No newline at end of file diff --git a/src/components/global/SvgStyles.astro b/src/components/global/SvgStyles.astro new file mode 100644 index 00000000000..e0cf82c507b --- /dev/null +++ b/src/components/global/SvgStyles.astro @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/global/TermsContent.astro b/src/components/global/TermsContent.astro new file mode 100644 index 00000000000..e3e4a8392c7 --- /dev/null +++ b/src/components/global/TermsContent.astro @@ -0,0 +1,500 @@ +

1. Agreement to Terms

+

+ These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and Chocolatey Software, Inc + ("Company", "we", "us", or "our"), concerning your access to and use of the + https://chocolatey.org and https://community.chocolatey.org websites as well as any + other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the "Site"). We are + registered in Kansas, United States and have our registered office at 6021 SW 29th St Ste A302, Topeka, KS 66614. + You agree that by accessing the Site, you have read, understood, and agree to be bound by all of these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, + THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY. +

+

+ Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve + the right, in our sole discretion, to make changes or modifications to these Terms of Use from time to time. We will alert you about any changes by updating the + "Last updated" date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms + every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the + changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted. +

+

+ The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would + be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to + access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable. +

+
+

+ The Site is intended for users who are at least 18 years old. Persons under the age of 18 are not permitted to use or register for the Site. +

+

2. Intellectual Property Rights

+

+ Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, + and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or + licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international + copyright laws, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly + provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, + translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. +

+

+ Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to + which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks. +

+ +

3. User Representations

+

+ By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the + accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; + (4) you are not a minor in the jurisdiction in which you reside; (5) you will not access the Site through automated or non-human means, whether through a bot, script or otherwise; + (6) you will not use the Site for any illegal or unauthorized purpose; and (7) your use of the Site will not violate any applicable law or regulation. +

+

+ If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current + or future use of the Site (or any portion thereof). +

+ +

4. User Registration

+

+ You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. + We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable. +

+ +

5. Fees and Payment

+

+ We accept the following forms of payment: +

+
    +
  • Visa
  • +
  • Mastercard
  • +
  • Discover
  • +
  • PayPal
  • +
  • Other payment terms supported by payment provider
  • +
+

+ You may be required to purchase or pay a fee to access some of our services. You agree to provide current, complete, and accurate purchase and account information for all + purchases made via the Site. You further agree to promptly update account and payment information, including email address, payment method, and payment card expiration date, + so that we can complete your transactions and contact you as needed. We bill you through an online billing account for purchases made via the Site. Sales tax will be added + to the price of purchases as deemed required by us. We may change prices at any time. All payments shall be in U.S. dollars. +

+

+ You agree to pay all charges or fees at the prices then in effect for your purchases, and you authorize us to charge your chosen payment provider for any such amounts upon making your purchase. +

+

+ We reserve the right to correct any errors or mistakes in pricing, even if we have already requested or received payment. We also reserve the right to refuse any order placed through the Site. +

+

6. Cancellation

+

+ All purchases are non-refundable. You can cancel your subscription at any time by contacting us using the contact information provided below. + Your cancellation will take effect at the end of the current paid term. +

+

+ If you are unsatisfied with our services, please email us at sales@chocolatey.io. +

+ +

7. Software

+

+ We may include software for use in connection with our services. If such software is accompanied by an end user license agreement ("EULA"), the terms of the EULA will + govern your use of the software. If such software is not accompanied by a EULA, then we grant to you a non-exclusive, revocable, personal, and non-transferable license + to use such software solely in connection with our services and in accordance with these Terms of Use. Any Software and any related documentation is provided "as is" without + warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. + You accept any and all risk arising out of use or performance of any Software. You may not reproduce or redistribute any software except in accordance with the EULA or these Terms of Use. +

+ +

8. Prohibited Activities

+

+ You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial + endeavors except those that are specifically endorsed or approved by us. +

+

+ As a user of the Site, you agree not to: +

+
    +
  • + Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us. +
      +
    • + The one exception to this is the use of package repository solutions that use the community repository as an "upstream" to cache packages locally on that repository server. +
    • +
    +
  • +
  • + Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords. +
  • +
  • + Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein. +
  • +
  • + Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site. +
  • +
  • + Use any information obtained from the Site in order to harass, abuse, or harm another person. +
  • +
  • + Make improper use of our support services or submit false reports of abuse or misconduct. +
  • +
  • + Use the Site in a manner inconsistent with any applicable laws or regulations. +
  • +
  • + Engage in unauthorized framing of or linking to the Site. +
  • +
  • + Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party's uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site. +
  • +
  • + Engage in any automated use of the system, such as using scripts to send comments or messages, or using any data mining, robots, or similar data gathering and extraction tools. +
  • +
  • + Delete the copyright or other proprietary rights notice from any Content. +
  • +
  • + Attempt to impersonate another user or person or use the username of another user. +
  • +
  • + Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats ("gifs"), 1×1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as "spyware" or "passive collection mechanisms" or "pcms"). +
  • +
  • + Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site. +
  • +
  • + Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you. +
  • +
  • + Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site. +
  • +
  • + Copy or adapt the Site's software, including but not limited to Flash, PHP, HTML, JavaScript, or other code. +
  • +
  • + Except as permitted by applicable law, decipher, decompile, disassemble, or reverse engineer any of the software comprising or in any way making up a part of the Site. +
  • +
  • + Except as may be the result of standard search engine or Internet browser usage, use, launch, develop, or distribute any automated system, including without limitation, any spider, robot, cheat utility, scraper, or offline reader that accesses the Site, or using or launching any unauthorized script or other software. +
  • +
  • + Make any unauthorized use of the Site, including collecting usernames and/or email addresses of users by electronic or other means for the purpose of sending unsolicited email, or creating user accounts by automated means or under false pretenses. +
  • +
  • + Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise. +
  • +
  • + Use the Site and associated services in any product (such as use of the Chocolatey Community Repository in an Endpoint Management Application), commercial or otherwise, without express written permission from us. +
  • +
  • + Use the Site to advertise or offer to sell goods and services. +
  • +
  • + Sell or otherwise transfer your profile. +
  • +
+

9. User Generated Contributions

+

+ The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to + create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, + video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other + users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make + available any Contributions, you thereby represent and warrant that: +

+
    +
  • + The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party. +
  • +
  • + You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use. +
  • +
  • + You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use. +
  • +
  • + Your Contributions are not false, inaccurate, or misleading. +
  • +
  • + Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation. +
  • +
  • + Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us). +
  • +
  • + Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone. +
  • +
  • + Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people. +
  • +
  • + Your Contributions do not violate any applicable law, regulation, or rule. +
  • +
  • + Your Contributions do not violate the privacy or publicity rights of any third party. +
  • +
  • + Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors. +
  • +
  • + Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap. +
  • +
  • + Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation. +
  • +
+

+ Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site. +

+

10. Contribution License

+

+ By posting your Contributions to any part of the Site or making Contributions accessible to the Site by linking your account from the Site to any of your social networking accounts, + you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, + royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, + publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, + commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. + The use and distribution may occur in any media formats and through any media channels. +

+

+ This license will apply to any form, media, or technology now known or hereafter developed, and includes our use of your name, company name, and franchise name, as applicable, + and any of the trademarks, service marks, trade names, logos, and personal and commercial images you provide. You waive all moral rights in your Contributions, and you warrant + that moral rights have not otherwise been asserted in your Contributions. +

+

+ We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated + with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your + Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions. +

+

+ We have the right, in our sole and absolute discretion, (1) to edit, redact, or otherwise change any Contributions; (2) to re-categorize any Contributions to place them in more + appropriate locations on the Site; and (3) to pre-screen or delete any Contributions at any time and for any reason, without notice. We have no obligation to monitor your Contributions. +

+

11. Guidelines for Comments and Reviews

+

+ We may provide you areas on the Site to leave comments, reviews, or ratings. When posting, you must comply with the following criteria: (1) you should have firsthand experience + with the person/entity being reviewed; (2) your reviews should not contain offensive profanity, or abusive, racist, offensive, or hate language; (3) your reviews should not contain + discriminatory references based on religion, race, gender, national origin, age, marital status, sexual orientation, or disability; (4) your reviews should not contain references to + illegal activity; (5) you should not be affiliated with competitors if posting negative reviews; (6) you should not make any conclusions as to the legality of conduct; (7) you may + not post any false or misleading statements; and (8) you may not organize a campaign encouraging others to post reviews, whether positive or negative. +

+

+ We may accept, reject, or remove comments and reviews in our sole discretion. We have absolutely no obligation to screen comments/reviews or to delete comments/reviews, even if + anyone considers reviews objectionable or inaccurate. Comments and reviews are not endorsed by us, and do not necessarily represent our opinions or the views of any of our + affiliates or partners. We do not assume liability for any review or for any claims, liabilities, or losses resulting from any review. By posting a review, you hereby grant to us a + perpetual, non-exclusive, worldwide, royalty-free, fully-paid, assignable, and sublicensable right and license to reproduce, modify, translate, transmit by any means, display, + perform, and/or distribute all content relating to reviews. +

+

12. Social Media

+

+ As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a "Third-Party Account") + by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access your Third-Party Account, as is permitted under the applicable terms + and conditions that govern your use of each Third-Party Account. You represent and warrant that you are entitled to disclose your Third-Party Account login information to us and/or + grant us access to your Third-Party Account, without breach by you of any of the terms and conditions that govern your use of the applicable Third-Party Account, and without obligating + us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of the Third-Party Account. By granting us access to any Third-Party Accounts, + you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in your Third-Party Account (the "Social Network Content") + so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from your Third-Party Account additional + information to the extent you are notified when you link your account with the Third-Party Account. Depending on the Third-Party Accounts you choose and subject to the privacy settings that + you have set in such Third-Party Accounts, personally identifiable information that you post to your Third-Party Accounts may be available on and through your account on the Site. Please note + that if a Third-Party Account or associated service becomes unavailable or our access to such Third-Party Account is terminated by the third-party service provider, then Social Network Content + may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and your Third-Party Accounts at any time. + PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS. + We make no effort to review any Social Network Content for any purpose, including but not limited to, for accuracy, legality, or non-infringement, and we are not responsible for any + Social Network Content. You acknowledge and agree that we may access your email address book associated with a Third-Party Account and your contacts list stored on your mobile device + or tablet computer solely for purposes of identifying and informing you of those contacts who have also registered to use the Site. You can deactivate the connection between the Site and + your Third-Party Account by contacting us using the contact information below or through your account settings (if applicable). We will attempt to delete any information stored on our servers + that was obtained through such Third-Party Account, except the username and profile picture that become associated with your account. +

+

13. Submissions

+

+ You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential + and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these + Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby + warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual + infringement or misappropriation of any proprietary right in your Submissions. +

+

14. Third-Party Websites and Content

+

+ The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, + information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not + investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party + Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in + the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply + approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you + should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate + from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, + and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the + products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us + harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites. +

+

15. U.S. Government Rights

+

+ Our services are "commercial items" as defined in Federal Acquisition Regulation ("FAR") 2.101. If our services are acquired by or on behalf of any agency not within the + Department of Defense ("DOD"), our services are subject to the terms of these Terms of Use in accordance with FAR 12.212 (for computer software) and FAR 12.211 (for technical data). + If our services are acquired by or on behalf of any agency within the Department of Defense, our services are subject to the terms of these Terms of Use in accordance with + Defense Federal Acquisition Regulation ("DFARS") 227.7202 3. In addition, DFARS 252.227 7015 applies to technical data acquired by the DOD. This U.S. Government Rights clause is in lieu of, + and supersedes, any other FAR, DFARS, or other clause or provision that addresses government rights in computer software or technical data under these Terms of Use. +

+

16. Site Management

+

+ We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, + violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict + access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, + notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the + Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site. +

+

17. Privacy Policy

+

+ We care about data privacy and security. Please review our Privacy Policy: https://chocolatey.org/privacy. By using the Site, + you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site is hosted in the United States. If you access the Site + from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in the United States, + then through your continued use of the Site, you are transferring your data to the United States, and you agree to have your data transferred to and processed in the United States. +

+ +

+ We respect the intellectual property rights of others. If you believe that any material available on or through the Site infringes upon any copyright you own or control, + please immediately notify us using the contact information provided below (a "Notification"). A copy of your Notification will be sent to the person who posted or stored + the material addressed in the Notification. Please be advised that pursuant to applicable law you may be held liable for damages if you make material misrepresentations + in a Notification. Thus, if you are not sure that material located on or linked to by the Site infringes your copyright, you should consider first contacting an attorney. +

+

19. Term and Termination

+

+ These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, + IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR + FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. + WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION. +

+

+ If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, + or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right + to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress. +

+

20. Modifications and Interruptions

+

+ We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to + update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third + party for any modification, price change, suspension, or discontinuance of the Site. +

+

+ We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, + resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any + reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site + during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, + updates, or releases in connection therewith. +

+

21. Governing Law

+

+ These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of the State of Delaware applicable to agreements made and to be + entirely performed within the State of Delaware, without regard to its conflict of law principles. +

+

22. Dispute Resolution

+

Informal Negotiations

+

+ To expedite resolution and control the cost of any dispute, controversy, or claim related to these Terms of Use (each "Dispute" and collectively, the "Disputes") brought by either you + or us (individually, a "Party" and collectively, the "Parties"), the Parties agree to first attempt to negotiate any Dispute (except those Disputes expressly provided below) informally + for at least sixty (60) days before initiating arbitration. Such informal negotiations commence upon written notice from one Party to the other Party. +

+

Binding Arbitration

+

+ If the Parties are unable to resolve a Dispute through informal negotiations, the Dispute (except those Disputes expressly excluded below) will be finally and exclusively + resolved by binding arbitration. YOU UNDERSTAND THAT WITHOUT THIS PROVISION, YOU WOULD HAVE THE RIGHT TO SUE IN COURT AND HAVE A JURY TRIAL. The arbitration shall be commenced and + conducted under the Commercial Arbitration Rules of the American Arbitration Association ("AAA") and, where appropriate, the AAA's Supplementary Procedures for Consumer Related Disputes + ("AAA Consumer Rules"), both of which are available at the AAA website www.adr.org. Your arbitration fees and your share of arbitrator compensation shall be governed by the AAA Consumer Rules + and, where appropriate, limited by the AAA Consumer Rules. The arbitration may be conducted in person, through the submission of documents, by phone, or online. The arbitrator will make a + decision in writing, but need not provide a statement of reasons unless requested by either Party. The arbitrator must follow applicable law, and any award may be challenged if the arbitrator + fails to do so. Except where otherwise required by the applicable AAA rules or applicable law, the arbitration will take place in Shawnee, Kansas. Except as otherwise provided herein, + the Parties may litigate in court to compel arbitration, stay proceedings pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. +

+

+ If for any reason, a Dispute proceeds in court rather than arbitration, the Dispute shall be commenced or prosecuted in the state and federal courts located in Shawnee, Kansas, and the + Parties hereby consent to, and waive all defenses of lack of personal jurisdiction, and forum non conveniens with respect to venue and jurisdiction in such state and federal courts. + Application of the United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use. +

+

+ In no event shall any Dispute brought by either Party related in any way to the Site be commenced more than one (1) years after the cause of action arose. If this provision is found to + be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute + shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court. +

+

Restrictions

+

+ The Parties agree that any arbitration shall be limited to the Dispute between the Parties individually. To the full extent permitted by law, (a) no arbitration shall be joined with any + other proceeding; (b) there is no right or authority for any Dispute to be arbitrated on a class-action basis or to utilize class action procedures; and (c) there is no right or authority + for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons. +

+

Exceptions to Informal Negotiations and Arbitration

+

+ The Parties agree that the following Disputes are not subject to the above provisions concerning informal negotiations and binding arbitration: (a) any Disputes seeking to enforce or protect, + or concerning the validity of, any of the intellectual property rights of a Party; (b) any Dispute related to, or arising from, allegations of theft, piracy, invasion of privacy, + or unauthorized use; and (c) any claim for injunctive relief. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling + within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, + and the Parties agree to submit to the personal jurisdiction of that court. +

+

23. Corrections

+

+ There may be information on the Site that contains typographical errors, inaccuracies, or omissions, including descriptions, pricing, availability, and various other information. + We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice. +

+

24. Disclaimer

+

+ THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, + WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE'S CONTENT OR THE CONTENT OF ANY + WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR + PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL + INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE + WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED + AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT + OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, + AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE + OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. +

+

25. Limitations of Liability

+

+ IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, + INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING + ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO THE LESSER OF THE + AMOUNT PAID, IF ANY, BY YOU TO US DURING THE SIX (6) MONTH PERIOD PRIOR TO ANY CAUSE OF ACTION ARISING OR $500.00 USD. CERTAIN US STATE LAWS AND INTERNATIONAL LAWS DO NOT ALLOW + LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, + AND YOU MAY HAVE ADDITIONAL RIGHTS. +

+

26. Indemnification

+

+ You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, + from and against any loss, damage, liability, claim, or demand, including reasonable attorneys' fees and expenses, made by any third party due to or arising out of: (1) your Contributions; + (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, + including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, + we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, + with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it. +

+

27. User Data

+

+ We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. + Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. + You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data. +

+

28. Electronic Communications, Transactions, and Signatures

+

+ Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, + notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. + YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED + OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require + an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means. +

+

29. California Users and Residents

+

+ If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer + Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254. +

+

30. Miscellaneous

+

+ These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. + Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the + fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, + delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, + or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. + There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these + Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use + and the lack of signing by the parties hereto to execute these Terms of Use. +

+

31. Contact Us

+

+ In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at: +

+

+ + Chocolatey Software, Inc
+ 6021 SW 29th St Ste A302
+ Topeka, KS 66614
+ United States
+ https://chocolatey.org/contact/general +
+

\ No newline at end of file diff --git a/src/components/global/TermsLastUpdated.astro b/src/components/global/TermsLastUpdated.astro new file mode 100644 index 00000000000..6582e76ab66 --- /dev/null +++ b/src/components/global/TermsLastUpdated.astro @@ -0,0 +1 @@ +Last updated 01 January 2021 \ No newline at end of file diff --git a/src/components/global/TermsToc.astro b/src/components/global/TermsToc.astro new file mode 100644 index 00000000000..386a24ddee9 --- /dev/null +++ b/src/components/global/TermsToc.astro @@ -0,0 +1,38 @@ + + \ No newline at end of file diff --git a/src/components/global/ThemeToggle.astro b/src/components/global/ThemeToggle.astro new file mode 100644 index 00000000000..10d33ffe414 --- /dev/null +++ b/src/components/global/ThemeToggle.astro @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/src/components/highlights/Highlight.astro b/src/components/highlights/Highlight.astro new file mode 100644 index 00000000000..9ea779bfe93 --- /dev/null +++ b/src/components/highlights/Highlight.astro @@ -0,0 +1,39 @@ +--- +import type { CollectionEntry } from 'astro:content'; +import Xref from '@components/Xref.astro'; +import DateTime from '@components/DateTime.astro'; + +interface Props { + content: CollectionEntry<'docs'>[]; +} + +const { content } = Astro.props; + +let sortedHighlights; + +if (content) { + sortedHighlights = content.sort((a, b) => { + const aDateTime = a.data.highlight?.postedDateTime || ''; + const bDateTime = b.data.highlight?.postedDateTime || ''; + return Math.floor(new Date(bDateTime).getTime() / 1000) - Math.floor(new Date(aDateTime).getTime() / 1000); + }); +} +--- + +{(sortedHighlights && sortedHighlights.length > 0) && ( +
+
    + {sortedHighlights.map((highlight, index) => ( + (highlight && highlight.data && highlight.data.highlight) && ( +
  • + +

    {highlight.data.title}

    +

    Posted on

    +

    {highlight.data.description}

    + +
  • + ) + ))} +
+
+)} \ No newline at end of file diff --git a/src/components/highlights/HighlightsByMonth.astro b/src/components/highlights/HighlightsByMonth.astro new file mode 100644 index 00000000000..a782b3dfeb3 --- /dev/null +++ b/src/components/highlights/HighlightsByMonth.astro @@ -0,0 +1,50 @@ +--- +import { getCollection } from 'astro:content'; +import type { CollectionEntry } from 'astro:content'; + +import Highlight from '@components/highlights/Highlight.astro'; + +const highlights = await getCollection('docs', ({ data }) => { + return data.highlight && data.highlight.showOnHighlights; +}); + +const organizeByMonth = (posts: CollectionEntry<'docs'>[]): Record[]> => { + const result: Record[]> = {}; + + posts.forEach(post => { + const highlight = post.data.highlight; + + if (!highlight) { + return; + } + + const postedDateTime = new Date(highlight.postedDateTime); + const month = postedDateTime.toLocaleString('default', { month: 'long' }); + const year = postedDateTime.getFullYear(); + const key = `${month} ${year}`; + + if (!result[key]) { + result[key] = []; + } + + result[key].push(post); + }); + + // Reverse the entire postsByMonth object + const reversedResult: Record[]> = {}; + const keys = Object.keys(result).toReversed(); + + keys.forEach(key => { + reversedResult[key] = result[key]; + }); + + return reversedResult; +}; + +const highlightsByMonth = organizeByMonth(highlights); +--- + +{Object.entries(highlightsByMonth).map(([month, highlight]) => ( +

{month}

+ +))} diff --git a/src/components/highlights/HighlightsHome.astro b/src/components/highlights/HighlightsHome.astro new file mode 100644 index 00000000000..77de48ffeee --- /dev/null +++ b/src/components/highlights/HighlightsHome.astro @@ -0,0 +1,11 @@ +--- +import { getCollection } from 'astro:content'; + +import Highlight from '@components/highlights/Highlight.astro'; + +const highlightsHome = await getCollection('docs', ({ data }) => { + return data.highlight && data.highlight.showOnHome; +}); +--- + + diff --git a/src/components/highlights/HighlightsSidebar.astro b/src/components/highlights/HighlightsSidebar.astro new file mode 100644 index 00000000000..51daa8f754e --- /dev/null +++ b/src/components/highlights/HighlightsSidebar.astro @@ -0,0 +1,23 @@ +--- +import { getCollection } from 'astro:content'; + +import Xref from '@components/Xref.astro'; + +const highlightsSidebar = await getCollection('docs', ({ data }) => { + return data.highlight && data.highlight.showInSidebar; +}); +--- + +{(highlightsSidebar && highlightsSidebar.length > 0) && ( +
  • + {highlightsSidebar.map((highlight, index) => ( + (highlight && highlight.data && highlight.data.highlight) && ( +
    0 ? "mt-3" : ''}`}> +

    {highlight.data.title}

    +

    {highlight.data.description}

    + +
    + ) + ))} +
  • +)} diff --git a/src/components/sidebar/Sidebar.astro b/src/components/sidebar/Sidebar.astro new file mode 100644 index 00000000000..48f7ff29c28 --- /dev/null +++ b/src/components/sidebar/Sidebar.astro @@ -0,0 +1,24 @@ +--- +import type { ContentTree } from '@scripts/types'; + +// Components +import HighlightsSidebar from '@components/highlights/HighlightsSidebar.astro'; +import SidebarSelf from '@components/sidebar/SidebarSelf.astro'; +import SidebarListItem from '@components/sidebar/SidebarListItem.astro'; + +interface Props { + content: ContentTree[]; +} + +const { content } = Astro.props; +--- + + diff --git a/src/components/sidebar/SidebarListItem.astro b/src/components/sidebar/SidebarListItem.astro new file mode 100644 index 00000000000..9de59667e26 --- /dev/null +++ b/src/components/sidebar/SidebarListItem.astro @@ -0,0 +1,19 @@ +--- +import type { ContentTree } from '@scripts/types'; +const activeSlug = Astro.url.pathname; + +interface Props { + content: ContentTree; + paddingClass: string; +} + +const { content, paddingClass } = Astro.props; + +const isActivePage = () => { + return content.slug === activeSlug || content.slug.slice(0, -1) === activeSlug; +}; +--- + +
  • + {content.data.title} +
  • diff --git a/src/components/sidebar/SidebarSelf.astro b/src/components/sidebar/SidebarSelf.astro new file mode 100644 index 00000000000..b03124de34c --- /dev/null +++ b/src/components/sidebar/SidebarSelf.astro @@ -0,0 +1,115 @@ +--- +import type { ContentTree } from '@scripts/types'; +import { slugId } from '@scripts/helpers'; + +import SidebarListItem from '@components/sidebar/SidebarListItem.astro'; + +interface Props { + content: ContentTree[]; +} + +const { content } = Astro.props; +const activeSlug = Astro.url.pathname; +const listItemPaddingClass = (depth: number) => { + let paddingClass = ''; + switch (depth) { + case 1: + paddingClass = 'ps-c2'; + break; + case 2: + paddingClass = 'ps-5'; + break; + case 3: + paddingClass = 'ps-c4'; + break; + case 4: + paddingClass = 'ps-c5'; + break; + case 5: + paddingClass = 'ps-c6'; + break; + case 6: + paddingClass = 'ps-c7'; + break; + } + + return paddingClass; +}; + +const listPaddingClass = (depth: number) => { + let paddingClass = ''; + switch (depth) { + case 1: + paddingClass = 'ps-3'; + break; + case 2: + paddingClass = 'ps-c2'; + break; + case 3: + paddingClass = 'ps-5'; + break; + case 4: + paddingClass = 'ps-c4'; + break; + case 5: + paddingClass = 'ps-c5'; + break; + } + + return paddingClass; +}; + +const isActiveChild = (doc: ContentTree) => { + // Create a stack to store documents to be checked + const stack = [doc]; + + // Iterate through the stack until it's empty + while (stack.length > 0) { + // Pop the last document from the stack + const currentDoc: ContentTree | undefined = stack.pop(); + + if (!currentDoc) { + return false; + } + + // Check if the current document's slug matches the activeSlug + if (currentDoc.slug === activeSlug || currentDoc.slug.slice(0, -1) === activeSlug) { + return true; + } + + // If the current document has children, push them onto the stack to explore further + if (currentDoc.children) { + for (const child of currentDoc.children) { + stack.push(child); + } + } + } + + // If the activeSlug is not found in any document, return false + return false; +}; + +const isActivePage = (doc: ContentTree) => { + return doc.slug === activeSlug || doc.slug.slice(0, -1) === activeSlug; +}; +--- + +{content.filter(doc => doc.data.showInSidebar === true).map(doc => ( + doc.children && doc.children.length > 0 ? ( +
  • + +
    + +
    +
  • + ) : ( + + ) +))} diff --git a/src/components/tabs/TabsPane.astro b/src/components/tabs/TabsPane.astro new file mode 100644 index 00000000000..773206d9a2d --- /dev/null +++ b/src/components/tabs/TabsPane.astro @@ -0,0 +1,8 @@ + +--- +const { content } = Astro.props; +--- + +
    + +
    diff --git a/src/components/tabs/TabsPaneContainer.astro b/src/components/tabs/TabsPaneContainer.astro new file mode 100644 index 00000000000..3860146cfad --- /dev/null +++ b/src/components/tabs/TabsPaneContainer.astro @@ -0,0 +1,7 @@ +--- + +--- + +
    + +
    diff --git a/src/components/tabs/TabsTabContainer.astro b/src/components/tabs/TabsTabContainer.astro new file mode 100644 index 00000000000..b14fb20b8b3 --- /dev/null +++ b/src/components/tabs/TabsTabContainer.astro @@ -0,0 +1,32 @@ + +--- +import { tabsSchema } from '@scripts/types.ts'; +import type { Tabs } from '@scripts/types.ts'; +const { content, multi } = Astro.props; + +interface Props { + content: Tabs[], + multi: string +} + +if (multi === 'version') { + content.map((item, index: number) => { + item.multiTab = `{"choco-version": "choco-v${content.length - index}"}`; + }); +} + +content.map(item => { + // Validate the content + tabsSchema.parse(item); +}); +--- + + \ No newline at end of file diff --git a/src/components/toc/TableOfContents.astro b/src/components/toc/TableOfContents.astro new file mode 100644 index 00000000000..7241bb7183b --- /dev/null +++ b/src/components/toc/TableOfContents.astro @@ -0,0 +1,30 @@ +--- +import type { ContentToc } from '@scripts/types'; +import packageJson from '@root/package.json'; +import TableOfContentsSelf from "@components/toc/TableOfContentsSelf.astro"; + +interface Props { + content: ContentToc[]; +} + +const { content } = Astro.props; +const editLink = `https://github.com/${packageJson.author}/${packageJson.name}/edit/master/src/content${Astro.url.pathname}.mdx`; +--- + +{(content && content.length > 0) && ( +
    + + +
    +)} \ No newline at end of file diff --git a/src/components/toc/TableOfContentsSelf.astro b/src/components/toc/TableOfContentsSelf.astro new file mode 100644 index 00000000000..2c76a5f3274 --- /dev/null +++ b/src/components/toc/TableOfContentsSelf.astro @@ -0,0 +1,23 @@ +--- +import type { ContentToc } from '@scripts/types'; +const { heading } = Astro.props; + +interface Props { + heading: ContentToc; +} +--- + + \ No newline at end of file diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 00000000000..b63db062f12 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,32 @@ +// 1. Import utilities from `astro:content` +import { z, defineCollection } from 'astro:content'; + +// 2. Define your collection(s) +const docsCollection = defineCollection({ + type: 'content', + schema: z.object({ + order: z.number(), + xref: z.string(), + title: z.string(), + description: z.string(), + ogImage: z.string().url().optional(), + twitterImage: z.string().url().optional(), + ruleType: z.string().optional(), + showInSidebar: z.boolean().optional().default(true), + hideChildPages: z.boolean().optional().default(false), + highlight: z.object({ + ctaXref: z.string(), + ctaAnchor: z.string().optional(), + ctaText: z.string(), + postedDateTime: z.date(), + showOnHome: z.boolean().optional().default(true), + showOnHighlights: z.boolean().optional().default(true), + showInSidebar: z.boolean().optional().default(false) + }).optional() + }), +}); + +// 3. Export a single `collections` object to register your collection(s) +export const collections = { + 'docs': docsCollection +}; diff --git a/src/content/docs/en-us/agent/index.mdx b/src/content/docs/en-us/agent/index.mdx new file mode 100644 index 00000000000..f5dcdd4e13d --- /dev/null +++ b/src/content/docs/en-us/agent/index.mdx @@ -0,0 +1,8 @@ +--- +order: 130 +xref: chocolatey-agent +title: Chocolatey Agent +description: This is a Windows Services which Chocolatey uses to perform Self-Service installs, as well as to communicate with Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/agent/release-notes.mdx b/src/content/docs/en-us/agent/release-notes.mdx new file mode 100644 index 00000000000..01e8e392fe8 --- /dev/null +++ b/src/content/docs/en-us/agent/release-notes.mdx @@ -0,0 +1,445 @@ +--- +order: 10 +xref: agent-release-notes +title: Release Notes +description: Release Notes for Chocolatey Agent +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-agent-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-agent-twitter.png +--- +import Xref from '@components/Xref.astro'; +import ChocolateyComponentDependenciesLink from '@components/docs/ChocolateyComponentDependenciesLink.mdx'; + +# Chocolatey Release Notes - Chocolatey Agent Service + +## Summary + +This covers the release notes for the Chocolatey Agent Service (`chocolatey-agent`) package, which covers Self-Service and Central Management client functionality. For more information, installation options, etc, please refer to . + +> :choco-info: **NOTE** +> +> This package is available to Chocolatey for Business (C4B) customers only. + +## Other Release Notes + +- Refer to as commercial editions build on top of open source. +- Chocolatey for Business (C4B) customers - also refer to and . + +## Known Issues + +- Please see https://github.com/chocolatey/chocolatey-licensed-issues/labels/AgentService + + + + +## 2.1.2 (January 31, 2024) \{#january-31-2024} + +### Bug Fix + +- [Security] Fix - Prevent usage of options when running in Self-Service mode. + - See the [documentation](https://docs.chocolatey.org/en-us/features/self-service-anywhere#background-service-restricted-options). + + +## 1.1.4 (January 31, 2024) \{#january-31-2024} + +### Bug Fix + +- [Security] Fix - Prevent usage of options when running in Self-Service mode. + - See the [documentation](https://docs.chocolatey.org/en-us/features/self-service-anywhere#background-service-restricted-options). + + +## 2.1.1 (December 19, 2023) \{#december-19-2023} + +### Bug Fix + +- [Security] Fix - Prevent usage of options when running in Self-Service mode. + - See the [documentation](https://docs.chocolatey.org/en-us/features/self-service-anywhere#background-service-restricted-options). + + +## 1.1.3 (December 19, 2023) \{#december-19-2023} + +### Bug Fix + +- [Security] Fix - Prevent usage of options when running in Self-Service mode. + - See the [documentation](https://docs.chocolatey.org/en-us/features/self-service-anywhere#background-service-restricted-options). + + +## 2.1.0 (June 29, 2023) \{#june-29-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fix + +- Fix - Outdated packages are not being reported to Chocolatey Central Management Service. + +### Improvement + +- Make use of option to skip HTTP cache when running Chocolatey CLI commands. + + +## 2.0.0 (May 31, 2023) \{#may-31-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.0.0. + +### Breaking Changes + +- Upgrade to target version 4.8 of the .NET Framework. +- Upgrade to target version 2.0.0 of Chocolatey.Lib and version 6.0.0 of Chocolatey.Licensed.Lib assemblies. + +### Bug Fix + +- Fix - Handle the removal of deprecated configurations from Config class in Chocolatey CLI. + +### Improvements + +- Update to use latest releases of Chocolatey products. +- Migrate from Rx-* packages to System.Reactive.* packages. + + +## 1.1.2 (May 10, 2023) \{#may-10-2023} + +### Bug Fix + +- Fix - Update version ranges in nuspec file to use maximum inclusive rather than maximum exclusive. + + +## 2.0.0-beta-20230426 (April 26, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey Agent and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey Agent we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey products. + + +## 2.0.0-beta-20230412 (April 12, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey Agent and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey Agent we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey Components. + + +## 2.0.0-beta-20230321 (March 21, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey Agent and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey Agent we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Migrate from Rx-* packages to System.Reactive.* packages. + +### Bug Fix + +- Fix - Handle the removal of deprecated configurations from Config class in Chocolatey CLI. + + +## 2.0.0-alpha-20230221 (February 21, 2023) \{#alpha-20230221-february-21-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey Agent and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey Agent we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Changes + +- Upgrade to target version 4.8 of the .NET Framework. +- Upgrade to target version 2.0.0 of Chocolatey.Lib and version 6.0.0 of Chocolatey.Licensed.Lib assemblies. + + +## 1.1.1 (October 12, 2022) \{#october-12-2022} + +### Improvements + +- Update package version range for Chocolatey Licensed Extension to support 5.0.0+. + +## 1.1.0 (August 22, 2022) \{#august-22-2022} + +### Features + +- Add scheduled automatic log cleaner for Chocolatey and Chocolatey Agent rollover log files - see [licensed #214](https://github.com/chocolatey/chocolatey-licensed-issues/issues/214). + +### Improvements + +- Chocolatey Central Management - Add retry logic for running Deployment Steps acquired from Chocolatey Central Management Service. +- Recheck the license on a schedule and shut down if it is invalid. + +### Bug Fix + +- Fix - Logging - Exception handling for all the tasks. + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 1.0.0 (March 21, 2022) \{#march-21-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolatey-agent package have changed in this release. It now requires Chocolatey Licensed Extension v4.0.0. + +### Breaking Change + +- Update Chocolatey Licensed Extension dependency to v4.0.0. + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.13.0 (February 28, 2022) \{#february-28-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolatey-agent package have changed in this release, and it now requires Chocolatey Licensed Extension v3.2.0+. + +### Breaking Changes + +- Chocolatey Central Management - Enhanced communication method for reporting information in Chocolatey Central Management. + - **NOTE:** This version of Chocolatey Agent is backwards compatible with versions of Chocolatey Central Management earlier than 0.8.0. However, we always recommend updating to the latest version of Chocolatey Central Management. + +### Improvements + +- Chocolatey Central Management + - Add logic to retry reporting of a Deployment Step result to Chocolatey Central Management if it initially fails. + - Ensure that no expanded sensitive variables are captured in log that is returned to Chocolatey Central Management. + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.12.1 (September 14, 2021) \{#september-14-2021} + +### Bug Fix + +- [Security] Fix - Deployments - Sensitive arguments are included in log file when advanced Deployment Steps are executed via Chocolatey Central Management - see [licensed #255](https://github.com/chocolatey/chocolatey-licensed-issues/issues/255). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.12.0 (September 2, 2021) \{#september-2-2021} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolatey-agent package have changed in this release, and it now requires chocolatey.extension v2.2.0. + +### Bug Fixes + +- Central Management + - Fix - Second and subsequent Deployment Steps to Chocolatey Agent with PowerShell v4 come back inconclusive (possibly earlier PowerShell versions as well) - see [licensed #237](https://github.com/chocolatey/chocolatey-licensed-issues/issues/237). + - Fix - Deployments - Log does not contain all information under error circumstances. + +### Improvements + +- [Security] XML External Entity attack in log4net (CVE-2018-1285) - see [licensed #253](https://github.com/chocolatey/chocolatey-licensed-issues/issues/253). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.11.2 (November 5, 2020) \{#november-5-2020} + +### Bug Fix + +- Fix - Deployments - An execution timeout in seconds value of `0` for a Deployment Step is not treated as infinite. + +### Improvements + +- Provide clarity in log messages when salt additive configuration values are misconfigured. + +## 0.11.1 (October 5, 2020) \{#october-5-2020} + +### Bug Fix + +- Fix - CCM - Prevent incorrect exit code of -1 from successful PowerShell script Deployment Step when no exit code is explicitly supplied by the script. + +## 0.11.0 (June 25, 2020) \{#june-25-2020} + +### Breaking Changes + +- Chocolatey Agent v0.11.0 will only work with Central Management v0.3.0+. Upgrade order doesn't matter as you'll need to be on CCM v0.3.0 and Agent v0.11.0 before things start working again. See https://docs.chocolatey.org/en-us/central-management/#ccm-component-compatibility-matrix. + +### Bug Fixes + +- Fix - CCM - passphrases do not match on check-in (report_computer_information) - see [Licensed #152](https://github.com/chocolatey/chocolatey-licensed-issues/issues/152). +- Fix - CCM Deployments - Deployments agent exit code of -1 reports successful Deployment Step - see [Licensed #153](https://github.com/chocolatey/chocolatey-licensed-issues/issues/153). + +## 0.10.0 (June 18, 2020) \{#june-18-2020} + +### Breaking Changes + +- Chocolatey Agent v0.10.0 will only work with Central Management v0.2.0+. Please upgrade Central Management first if you are using CCM with the agent service. + +> :choco-info: **NOTE** +> +> Log locations have changed. Please see for more information. + +### Features + +- Execution for Chocolatey Central Management Deployments. + +### Bug Fixes + +- Fix - Monitoring `chocolatey.config` for changes could potentially lock the file from being written to by Chocolatey CLI. +- Fix - Logging - the service stops responding to calls and stops logging after choco configuration file is edited. +- Fix - CCM Reporting - Do not report unfound packages as outdated. + +### Improvements + +- Logging - Log to the root logs folder of Chocolatey installation. + +## 0.9.3 (March 26, 2020) \{#march-26-2020} + +### Bug Fixes + +- Central Management Reporting: + - Fix - Ensure best available TLS is used - see [Licensed #132](https://github.com/chocolatey/chocolatey-licensed-issues/issues/132). + +## 0.9.2 (January 30, 2020) \{#january-30-2020} + +### Improvements + +- When reporting into CCM, add the URL that is being used in log to aid when debugging issues. + +## 0.9.1 (April 30, 2019) \{#april-30-2019} + +### Bug Fixes + +- Self-Service / Background Mode: + - Fix - Multiple quoted options being parsed incorrectly - see [Licensed #78](https://github.com/chocolatey/chocolatey-licensed-issues/issues/78). + +## 0.9.0 (March 18, 2019) \{#march-18-2019} + +### Features + +- Chocolatey Central Management Reporting - Clients can now report into Chocolatey Central Management on a configurable basis. For more information, please see [the documentation](https://docs.chocolatey.org/en-us/features/chocolatey-central-management). + +### Bug Fixes + +- Self-Service / Background Mode: + - Fix - Package Arguments not being passed from Chocolatey Agent to Chocolatey CLI properly - see [Licensed #60](https://github.com/chocolatey/chocolatey-licensed-issues/issues/60). + - Fix - Chocolatey Agent does not pass the exit code back to the console (service side) - see [Licensed #51](https://github.com/chocolatey/chocolatey-licensed-issues/issues/51). + - Fix - Execution times out after 10 minutes - ignores configuration - see [Licensed #41](https://github.com/chocolatey/chocolatey-licensed-issues/issues/41). + +## 0.8.1 (September 28, 2017) \{#september-28-2017} + +### Bug Fixes + +- Fix - bump dependency on Chocolatey Licensed Extension to ensure user is created with complex password instead of created with no password and then updated with complex password. + +## 0.8.0 (September 27, 2017) \{#september-27-2017} + +### Breaking Changes + +- [Security] Use 'ChocolateyLocalAdmin' user and manage the user by default - using LocalSystem doesn't work well with all software installations. Using a local user that is an admin works much better for ensuring applications are installed. If you need the previous functionality, pass `/UseDefaultChocolateyConfigUser`. This will use whatever Chocolatey is configured to use by default for new service installations. You can also pass in a username and optionally a password for a domain account or local administrator account. + +### Improvements + +- Upgrade - Pass `/NoRestartService` to upgrade the service without shutting down the current running service. You will need to restart the service to take advantage of the new changes - see [#26](https://github.com/chocolatey/chocolatey-licensed-issues/issues/26). +- Install/Upgrade - Pick username/password for runtime. Pass `/Username:value /Password:value2` through package parameters. +- Install/Upgrade - Pass `/EnterPassword` through package parameters to have Chocolatey ask for the user password at runtime during installation. Captures as a secure string. + +## 0.7.0 (June 27, 2017) \{#june-27-2017} + +### Breaking Changes + +- Fix - Use a URI with WCF named pipes that doesn't exclusively hold a lock on the root (blocking other services) - see [#12](https://github.com/chocolatey/chocolatey-licensed-issues/issues/12). + +### Bug Fixes + +- Fix - Allow chocolatey.lib (not just calls from choco.exe) to run self-service. + +## 0.6.0 (March 20, 2017) \{#march-20-2017} + +### Breaking Changes + +- Sources must be opted in for self-service if the feature `UseBackgroundServiceWithSelfServiceSourcesOnly` is turned on. This is automatically the case with Chocolatey Licensed v1.10.0+ (and Chocolatey 0.10.4+). + +### Bug Fixes + +- Fix - Sources using nupkg/nuspec were being allowed. This is now disabled as well. + +## 0.5.0 (January 14, 2017) \{#january-14-2017} + +### Breaking Changes + +- New pattern for dependencies requires a reload of the interface that works between the Agent and Chocolatey.Extension, requiring a bump in the sub v1. + +## 0.4.0 (January 4, 2017) \{#january-4-2017} + +Initial Release + +### Features + +- Streams logging messages back to the caller in realtime. +- Audits disallowed calls / attempted abuses of the service. +- Only runs Chocolatey functions. +- Ensures installation from approved sources only. +- Receives and passes user context to Chocolatey functions. +- Works exclusively with Chocolatey for Business - checks passcode prior to running command. +- Processes one command at a time with locking algorithm. diff --git a/src/content/docs/en-us/agent/setup.mdx b/src/content/docs/en-us/agent/setup.mdx new file mode 100644 index 00000000000..650cab025bb --- /dev/null +++ b/src/content/docs/en-us/agent/setup.mdx @@ -0,0 +1,411 @@ +--- +order: 20 +xref: setup-agent +title: Setup +description: Information on how to setup Chocolatey Agent +--- +import Xref from '@components/Xref.astro'; + +To install the Chocolatey Agent service, you need to install the `chocolatey-agent` package. The Chocolatey Agent is only available for business edition customers to install from the licensed source (customers trialling the business edition will be provided instructions on how to install). + +## Requirements + +* Chocolatey (`chocolatey` package) +* Chocolatey for Business (C4B) Edition +* Chocolatey Licensed Extension (`chocolatey.extension` package) +* Chocolatey Agent Service (`chocolatey-agent` package) + +> :choco-info: **NOTE** +> +> The Chocolatey Agent Service requires Log On As Service and Log On As Batch rights. We attempt to set these rights on the user at the time of installation via Local Policy, but if you have a restrictive Group Policy that will be applied to the system, please ensure that the user account you are attempting to use (or ChocolateyLocalAdmin as the default) has the correct permissions applied in your Group Policy. + +## Chocolatey Agent Install Options + +Starting with Chocolatey Agent v0.8.0+, the service will install as a local administrative user `ChocolateyLocalAdmin` by default (and manage the password as well). However you can specify your own user with package parameters (or have it use `LocalSystem`). Using a local administrator account allows for more things to be installed without issues. It also will allow easier shortcuts and other items to be put back on the correct user (the original requestor). You can specify a domain account as well. Prior to `v0.8.0`, Chocolatey Agent would install as LocalSystem (`SYSTEM`) and would require additional customization. + +> :choco-warning: **WARNING** +> +> Chocolatey Agent should **not** be installed on a machine that is acting as a domain controller. Doing so is not a supported configuration. Domain controllers do not have local accounts other than the LocalSystem (`SYSTEM`) account. Any other local administrator account, such as the default `ChocolateyLocalAdmin` account, used to install Chocolatey Agent on a domain controller will by default become a domain administrator account. + +> :choco-info: **NOTE** +> +> If you are using file shares for sources, you may want to ensure the account or computer has network access permissions for the file share(s). + +## Package Parameters + +Note items with "`:`" mean a value should be provided, items without are simply switches. + +* `/Username:` - provide username - instead of using the default 'ChocolateyLocalAdmin' user. This user will need to be a member of local administrators due to the privileges needed for this service - this is typically ensured during installation. `Logon as Service` and `Logon as Batch` privileges are also ensured. +* `/Password:` - optional password for the user. +* `/EnterPassword` - receive the password at runtime as a secure string +* `/UseDefaultChocolateyConfigUser` - use the default username from Chocolatey's configuration. This may be LocalSystem. +* `/NoRestartService` - do not shut down and restart the service. You will need to restart later to take advantage of new service information. + +## Chocolatey Managed Password + +When Chocolatey manages the password for a local administrator, it creates a very complex password: + +* It is 32 characters long. +* It uses uppercase, lowercase, numbers, and symbols to meet very stringent complexity requirements. +* The password is different for every machine. +* Due to the way that it is generated, it is completely unguessable. +* No one at Chocolatey Software could even tell you what the password is for a particular machine without local access. + +See [FAQ](#faq) below for more discussion on security aspects. + +### Chocolatey Agent Service Windows Account Considerations + +* Windows Account (required, defaults to `ChocolateyLocalAdmin`) + * The Chocolatey Agent Service requires **an** administrative account, whether that is a domain account or a local account - it just needs to be a local admin (a member of the Administrators group). + * The agent service doesn't specifically require the `ChocolateyLocalAdmin` account, any Windows account can be used. The `ChocolateyLocalAdmin` is used as the default if one is not specified. + * Upon use of an account during installation, it will make that account a member of the Administrators account. + * The account used will also be granted LogonAsService and LogonAsBatch privileges. +* Managed Password (optional, default) + * When the `ChocolateyLocalAdmin` account is used, it generates a managed password that is different on every machine, 32 characters long, meets complexity requirements, and basically very strong. + * To determine the managed password, it would take access to the box and someone from Chocolatey Software who has access to the algorithm used to generate the password (more information in the FAQs below). +* Rotating/Updating Passwords + * If a different account with a rotating password is used, the service will need to be updated with the new credentials and restarted soon after changing that password. + * The managed password is not currently updated/rotated, but it is something we are looking at how best to implement. + +## Self-Service Anywhere Setup + +See [Background Mode Setup](#background-mode-setup). + +## Background Mode Setup + +To set Chocolatey in background mode, you need to run the following: + +* `choco upgrade chocolatey-agent ` (see [agent install options](#chocolatey-agent-install-options)) +* `choco feature disable --name="'showNonElevatedWarnings'"` +* `choco feature enable --name="'useBackgroundService'"` +* You also need to opt in sources in for self-service packages. See (and `--allow-self-service`). You can also run `choco source -?` to get the help menu. + * OPTIONAL (not recommended): Alternatively, you can allow any configured source to be used for self-service by running the following: `choco feature disable --name="'useBackgroundServiceWithSelfServiceSourcesOnly'"` . We do not recommend this as it could be a security finding if you shut it off. +* OPTIONAL (highly recommended): If you want self-service to apply only to non-administrators, run `choco feature enable --name="'useBackgroundServiceWithNonAdministratorsOnly'"` (requires Chocolatey Extension v1.11.1+). Do understand this means that a real non-administrator, not an administrator in a non-elevated UAC context (that scenario will go the normal route and will not go through background mode). +* OPTIONAL (varied recommendations): If you want to configure custom commands (not just install/upgrade), use something like `choco config set --name backgroundServiceAllowedCommands --value "install,upgrade,pin,sync"` (with the commands you want to allow, requires Chocolatey Extension v1.12.4+). See [commands consideration](#command-customization-consideration) below. +* OPTIONAL (highly recommended): If you want to allow non-admins to uninstall packages, you can also restrict down to only the packages they have installed/upgraded. Run `choco feature enable --name="'allowBackgroundServiceUninstallsFromUserInstallsOnly'"` (requires Chocolatey Extension v2.0+). +* OPTIONAL (highly recommended): For use with Chocolatey GUI, you need Chocolatey Extension v1.12.4+, and at least Chocolatey GUI v0.15.0. **Uninstall any version of the GUI you already have installed first**, then run `choco upgrade chocolateygui -y --allow-downgrade` (you will also need at least .NET 4.5.2 installed) +* DOES NOT WORK WITH UAC, DO NOT USE UNTIL [FIX IS ANNOUNCED](https://groups.google.com/group/chocolatey-announce)! OPTIONAL (recommended if you use installers that are not completely silent): If you want self-service to interactively manage installations, run `choco feature enable --name="'useBackgroundServiceInteractively'"` (requires Chocolatey Extension v1.12.10+). This requires that you use the `ChocolateyLocalAdmin` account with the Chocolatey-managed password as passwords are not stored and the service would need to produce that at runtime. There are some security considerations and why this is not turned on by default. Please see [interactive self-service consideration](#interactive-self-service-consideration). + +> :choco-info: **NOTE** +> +> Once you are all setup, please review the [Common Errors and Resolutions](#common-errors-and-resolutions) section so you will be familiar if you run into any issues with working with sources. + +An example script: + +This carries our typical recommendations, but you could adjust from above. + +```powershell +choco upgrade chocolatey-agent -y +choco feature disable --name="'showNonElevatedWarnings'" +choco feature enable --name="'useBackgroundService'" +choco feature enable --name="'useBackgroundServiceWithNonAdministratorsOnly'" +# allow uninstalls as well: +#choco config set --name backgroundServiceAllowedCommands --value "install,upgrade,uninstall" +# restrict uninstalls to just packages the user has installed/upgraded (requires Chocolatey Extension v2.0+): +#choco feature enable --name="'allowBackgroundServiceUninstallsFromUserInstallsOnly'" + +# TODO: opt in your sources with --allow-self-service - run choco source -? for details +``` + +> Best practices in scripts are noted here: +> * Use `upgrade` instead of `install` - upgrade is more making the script reusable when newer versions are available. +> * Always use `-y` to ensure nothing stops and prompts for more than 30 seconds. +> * When using options prefer a longer name (`--name` versus the short `-n`) to make the scripts more self-documenting +> * When using options that have a value passed, add an `=` between and surround the value with `"''"` (`--name="'value'"`). This ensures that the argument is not split between different versions/editions of Chocolatey. This also ensures that values like `.` and `\\` are not escaped by PowerShell. + +### Command Customization Consideration + +Starting with Chocolatey Licensed Extension v1.12.4, you are allowed to configure what commands can be routed through the background service. Please note that Chocolatey Licensed defaults to `install` and `upgrade` as that is the most secure experience. However you can add uninstall and some other commands as well. Uninstall does have some security considerations as it would allow a non-administrator to remove software that you may have installed, including the background service itself. + +**Available Commands**: + +* info - do not add if you want sources hidden from non-admins +* list/search - do not add if you want sources hidden from non-admins +* outdated - do not add if you want sources hidden from non-admins +* install - default +* upgrade - default +* uninstall - keep in mind there may be security implications for this +* optimize +* pin +* sync +* download - Chocolatey Licensed Extension v1.12.12+ - keep in mind if you have shut off a non-admin's ability to run this they still won't be able to without also disabling the `adminOnlyExecutionForDownloadCommand` feature. + +**Blacklisted Commands**: + +* config +* feature +* source +* apikey + +Chocolatey does not allow for configuration changing commands to be routed through the background service as that would allow users to be able to change configuration and that could be detrimental. For instance, a user could add a local source with a package they've created that promotes themselves to an administrator (escalation of privilege). As that constitutes a security issue, we do not allow it. + +For the same reason, we do not recommend allowing sources you do not control to be allowed for self-service. + +### Interactive Self-Service Consideration + +When using the self-service with `useBackgroundServiceInteractively`, it is similar to "Run As". Microsoft used to allow Windows services to interact with the desktop but removed the functionality (of "Allow Service to Interact with the Desktop") in Windows Vista and limited all services into what is known as Session 0 isolation. In Session 0, those services can access a desktop, but not the interactive user's desktop (at least it is very, very difficult to do so). Microsoft did this as a security consideration as allowing a privileged account to run executables in a non-administrative user context opens the potential to allow a non-admin to gain privileges to a system (known as escalation of privilege). Depending on what is allowed for folks to install, as long as those package installations do not open a command shell and wait for user input, the potential is quite low. However it is something to keep in mind and assess before turning on this feature (and why it is off by default). + +However sometimes you work with installers that refuse to be silent. You might get them down to unattended (meaning they still have required input or window pop ups, but they are all handled and automatically closed), but they won't get to silent without a different option. Here are some options from most preferred to least preferred in getting those installers that are not fully silent to work: + +* (Silent) Find a portable version of the tool that doesn't run a badly behaved installer. Looked for a zipped up version, you can easily create a Chocolatey package from these. +* (Silent) Find an alternative that does the same thing, but has silent installers. It's a consideration, but maybe not something you can or are willing to explore. Moving on... +* (Silent) Use MSI repackaging to produce a completely silent installer. It works by recording everything that happens when you run the install and creates an MSI to do the same. This would need to be done for every version. There are tools out there that can do this, some of which are VERY expensive. +* (Unattended/Interactive) Use AutoHotKey or AutoIT (or some other tool) to automate the key presses and values being sent to the interfaces. This can be brittle, but can typically be quickly implemented. + +If you must run in the context of working with "unattended", non-silent installations, you need to take the above security consideration into account if you want to be able to manage those installations using the background service. + +## Chocolatey Central Management Agent Setup + +Please see for details. + +> :choco-info: **NOTE** +> +> This will also contain more FAQs and Common Errors and Resolutions related to communication with Central Management. + +## Log File Location For Chocolatey Agent + +The Chocolatey Agent log file is located at `$env:ChocolateyInstall\logs\chocolatey-agent.log`. If you are on a version of Chocolatey Agent prior to v0.10.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service\logs\chocolatey-agent.log`. + +## Chocolatey Agent Roadmap + +* Maintenance Windows: Admins will be able to schedule when upgrades occur. +* Toast Notifications: Let users know when things are happening, and let users know when upgrades are available for Self-Served applications +* ~~Self-Service: Admins will be able to configure what commands can be run through the background service.~~ Completed with Chocolatey Extension v1.12.4. +* Self-Service: Admins will have more granular control of what certain users can install. +* ~~Report into Central Management~~ - completed May 2019 +* ~~Handle tasks from Central Management Deployments~~ - completed June 2020 + +## FAQ + +### How do I take advantage of Chocolatey Agent? + +You must have a [Business edition of Chocolatey](https://chocolatey.org/compare). Business editions are great for organizations that need to manage the total software lifecycle. + +### I'm a licensed customer, now what? + +Once you have the agent service installed and Chocolatey for Business configured for background mode (see [Setup](#setup-1) above), most tools that use Chocolatey will automatically use the background service. + +### Will this become available for lower editions of Chocolatey? + +The background service and Central Management UI Console will only be available in C4B (Chocolatey for Business). + +### I have questions regarding Agent and Central Management + +Please see as the FAQs related to Central Management (CCM) are kept there. + +### I have Puppet or some other configuration management tool (RMM tool, infrastructure automation tool, etc.) that also runs Chocolatey. Can I configure it to skip background mode? + +Yes! Add `--run-actual` to your install options. Most likely your tool won't need to be reconfigured though as it will just work with background mode. You will need Chocolatey v0.10.3+ installed across your environment so Chocolatey handles the unknown arguments appropriately. + +Another (possibly better) way to handle this as of Chocolatey Extension v1.12.0, turn on the `useBackgroundServiceWithNonAdministratorsOnly` feature to make Self-Service apply only to non-administrators. See [Background Mode Setup](#background-mode-setup) for details. + +### How does it work? + +As a background service, it is able to call Chocolatey with an administrative account that is configured by you. It is secure communication that only starts once Chocolatey is configured to work with the background service. + +### What's the minimum Chocolatey licensed extension version that I need to install the agent? + +You need `chocolatey.extension` version 1.8.4+. + +### How is it secure? + +For Background Mode / Self-Service Installer: + +* Commands are ignored unless they come from the business edition of Chocolatey. +* Chocolatey installs can only be done from approved, configured sources. +* The background service validates commands prior to running. +* Attempted abuses of the service are logged for further review by an administrator later. + +For the Central Management UI / Console: + +* Coming later when central console is more complete. +* Communication will be done over TLS (w/self-signed certificate) or another medium with message encryption + +### Do you have an example of a message that goes across the agent service named pipe, from the client? + +The message is a serialized object that contains: + +* hashed passcode - SHA512 Hash of args, user, current directory, and a salt value only shared with agent and licensed edition +* command arguments to run - verified against validation checks +* username - this is what we'll use to ensure things like desktop shortcuts, etc +* timeout - how long before the command should timeout (from choco config) +* working directory - where is the context of this being executed, in case there are things to place relative to current directory + +Here is the interface: + +`void run_choco_command(string passcode, IEnumerable arguments, string userName, int timeout, string workingDirectory);` + +Keep in mind this message is only put on localhost. It does not go over any networks. + +### What is the purpose of the hash that is used to protect the named pipe? + +You may notice the hash changes every time based on what command is called. This is a security measure to ensure the call is coming from a configured Chocolatey client and not from another source. The agent will ignore anything that does not match up. + +### Does the agent service or Chocolatey stop installation from unconfigured sources? + +The agent stops unconfigured sources from installation. Right now it simply logs those abuses to the log file (that is locked down to admins for modify). The log file can be slurped into a tool like Splunk. Alternatively considering this is preview and we are waiting for feedback, we can look to providing those alerts in a different way, like the event log. We welcome any feedback on how you might like to see this. + +Chocolatey doesn't stop unconfigured sources for install, it lets the agent do so. Once Chocolatey is in background mode, all commands for install/upgrade go through the agent service. + +The one exception is when someone calls `--run-actual` in their arguments. But there is no escalation of privilege here because they would be running that under their own user context and thus only have the permissions granted to them already. + +### We want to set up the chocolatey agent service to use a domain account that will have local admin on each box. Can we do this? + +Yes, absolutely. You will pass those credentials through at install/upgrade time, and you will also want to turn on the feature `useRememberedArgumentsForUpgrades` (see ) so that future upgrades will have that information available. The remembered arguments are stored encrypted on the box (that encryption is reversible so you may opt to pass that information each time). + +* `/Username:` - provide username - instead of using the default 'ChocolateyLocalAdmin' user. This user will need to be a member of local administrators due to the privileges needed for this service. +* `/Password:` - optional password for the user. +* `/EnterPassword` - receive the password at runtime as a secure string + +You would pass something like `choco install chocolatey-agent -y --params="'/Username:domain\account /EnterPassword'"` to securely pass the password at runtime. You could also run `choco install chocolatey-agent -y --params="'/Username:'" --package-parameters-sensitive="'/Password:'"` (or do it as part of `choco upgrade`). + +With Puppet, this could look something like: + +```puppet +package {'chocolatey-agent': + ensure => latest, + install_options => ['-pre','--params="',"'/Username:'", '"','--package-parameters-sensitive="', "'/Password:'", '"'], + require => Chocolateyfeature['useLocalSystemForServiceInstalls'], +} +``` + +where `` and `` could be pulled from Hiera or somewhere else. If you have access to the Puppet secrets type, then you can use that here as well. + +### Is the password stored anywhere? + +No, that would reduce the security of the password. It exists in memory long enough to set the value on user and the service and then it is cleared. + +There is no storage of the password anywhere other than how Windows stores passwords. + +### We are going to use our own account with a rotating password. When we rotate the password for the account that we use for the Chocolatey Agent, what do we need to do? + +Like with any service that uses rotating passwords, you will need to redeploy the service or go into the services management console and update the password. As it is much faster to deploy out that update, you can do something like `choco upgrade chocolatey-agent -y --params="'/Username:domain\account'" --package-parameters-sensitive="'/Password:newpassword'" --force` (the `--force` ensures the code is redeployed). + +### Tell me more about the Chocolatey managed password. + +So you've seen from above that + +* It is 32 characters long. +* It uses uppercase, lowercase, numbers, and symbols to meet very stringent complexity requirements. +* The password is different for every machine. +* Due to the way that it is generated, it is completely unguessable. +* No one at Chocolatey Software could even tell you what the password is for a particular machine without local access. + +Chocolatey uses something unique about each system, along with an encrypted value in the licensed code base to generate base password, then it makes some other changes to ensure that the password meets complexity requirements. We won't give you the full algorithm of how the password is generated as knowing the algorithm would be a security issue - like having a partial picture of a key, you could start working on how to break in. Unlike a picture of a key, even knowing the full algorithm doesn't get you everything you need as you would need local access to each box to determine the password for **each** machine. + +### Is the managed password stored or logged anywhere? + +No, that would reduce the security of the password. It exists in memory long enough to set the value on user and the service and then it is cleared. + +There is no storage of the password anywhere other than how Windows stores passwords. + +### Is the managed password the same on every machine? + +No, it is different for every machine it is deployed to. + +### How would someone potentially get access to the managed password? + +The Chocolatey licensed code base is encrypted, so only people that work at Chocolatey Software would be able to determine the password for a particular box (just that one) **IF** they have local access to that box. Even with all of the information and the algorithm, it's still going to take our folks a while to determine the password. That gets them access to one machine. Of course, Chocolatey folks are not going to do this for obvious reasons. + +So let's realize this to its full potential - If someone were able to hack the Chocolatey licensed codebase, they would be able to determine the full password algorithm. Then they'd also need to hack into your infrastructure and get local access to every box that they wanted to get the Chocolatey-managed password so they could get admin access to just that box. Taking this out a bit further, it's reasonable to assume that if someone has hacked into your infrastructure, it's highly unlikely they are going to be using a non-administrator account to get local access to a box so they can get the password for an administrator account for just that one box. It's more likely they would would already have a local admin account for the boxes they are attacking, and are likely to seek other attack vectors that are much less sophisticated. + +### Do you rotate the managed password on a schedule? + +We are looking to do this in a future release. We may make the schedule configurable. + +### Can I take advantage of Chocolatey managed passwords with my own Windows services? + +Yes, absolutely. If you use C4B's PowerShell Windows Services code, you will be able to install services and have Chocolatey manage the password for those as well. + +### Can I save an image with the agent already installed that I can deploy new machines from? + +Yes, however you need to keep in mind that there is a unique machine Id that will need to be erased so it can be regenerated. + +Make sure to include the following in your provisioning script to deploy the new images: + +```powershell +Write-Host "Removing Chocolatey Unique Machine GUID" +Remove-ItemProperty -Path "HKLM:\Software\Chocolatey" -Name "UniqueId" -Force +# Restart the Agent Service if it is running +``` + +Once you've removed this, you'll need to restart the Agent Service to get it regenerated. + +### Can we use an account for the service that is not a local administrator? + +Unfortunately no. The user account for the service must be a member of local administrators due to the privileges needed for this service. Typically the installation scripts will ensure the user becomes an administrator if they are not. + +### What is Run Actual? + +You may have seen `--run-actual`, what is that? + +This is a switch that is passed to opt out of Chocolatey Self-Service. It's typically passed by the agent service back to choco to run a command for a user. You typically would not issue this, but the agent service will, so you are likely to see it in the logs if you are looking closely. + +### Where is the agent service installed? + +The installation folder for `chocolatey-agent` is at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service`. + +## Common Errors and Resolutions + +### I have issues regarding Central Management + +Please see as the common errors and resolutions related to Central Management (CCM) are kept there. + +### Installs from custom source locations are not allowed in background mode. Please remove custom source and try again using default (configured) package source locations. + +You can not pass custom source arguments to Chocolatey, it will error. You need to set up sources in the Chocolatey configuration and any that are marked as allowed for self-service will be passed by the background service. + +> :choco-info: **NOTE** +> +> If you have run `choco feature disable --name useBackgroundServiceWithSelfServiceSourcesOnly`, then all configured sources will be passed by the background service. + +### I'm getting the following: "There are no sources enabled for packages and none were passed as arguments." + +This means you need to opt a source into self-service (new in Chocolatey Extension v1.10). + +This just involves ensuring a source is set so that it allows self-service. To do this you run `choco source add --name name --source location <--other details need repeated> --allow-self-service`. Editing a source happens when the name is the same in `choco source add`. + +To change this behavior back to the way it was previously, simply run `choco disable --name useBackgroundServiceWithSelfServiceSourcesOnly`. For feature options, run `choco feature list` or see + +### I'm having trouble seeing packages on a file share source + +Starting with Chocolatey Agent v0.8.0+, the service will default an install to a local administrative user `ChocolateyLocalAdmin`, but before that it installed as LocalSystem by default. These accounts may not have network access to UNC shares. We recommend changing the service to a named account that is a local admin that would also have network access (or setting machines into an active directory group and explicitly giving that group read permissions to the share and ACL). To specify your own user, you can do that at install time with [package parameters](#chocolatey-agent-install-options), or you can do that in the Service Manager properties for the service itself (future upgrades would need you to pass that user/pass at least the first time). + +So if you've set up a source like `choco source add -n="'name'" -s="'\\unc\packages'" --priority=1`, by default this may not work with the Chocolatey Agent. You would need to grant access to machines or anonymous access to the share (Everyone Read is likely not enough). + +A great read on your options can be found at the following Stack Exchange links: + +* https://serverfault.com/q/135867/79259 +* https://serverfault.com/q/41130/79259 + +A way to do this with LocalSystem: + +1. Create a global group on the Domain + * add all machines to this group +1. Add this group to the share permissions with "Read" Access +1. Add this group to the NTFS permissions with "Read" Access + +> :choco-info: **NOTE** +> +> You'll need to add this group itself and not nest it inside of another one. + +### The agent service is not picking up the new license + +Currently, you do need to restart agents. Here's a handy script: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Service chocolatey-* | Start-Service +``` + +### Background Service is not being used for my non-administrator accounts + +If a user is a member of the Built-in AD group `Network Configuration Operators`, then that means they have an elevation token available and will be treated in the same way as administrative accounts. To fix this, you have two options: + +* Remove the users from `Network Configuration Operators` - PowerShell offers an alternative to `ipconfig /flushdns` that does not require admin permissions - `Clear-DnsClientCache`. +* OR `choco feature disable --name="'useBackgroundServiceWithNonAdministratorsOnly'"` + +Similar to the above, if a user is a member of the local `Power Users` group, then that means they have an elevation token available and will be treated in the same way as administrative accounts. To fix this, you have two options: + +* Remove the users from `Power Users` +* Force all users through the Background Service: `choco feature disable --name="'useBackgroundServiceWithNonAdministratorsOnly'"` \ No newline at end of file diff --git a/src/content/docs/en-us/agent/upgrade.mdx b/src/content/docs/en-us/agent/upgrade.mdx new file mode 100644 index 00000000000..352138eedad --- /dev/null +++ b/src/content/docs/en-us/agent/upgrade.mdx @@ -0,0 +1,108 @@ +--- +order: 30 +xref: upgrade-agent +title: Upgrade +description: Information on how to upgrade Chocolatey Agent +--- +import Xref from '@components/Xref.astro'; + +## Upgrade Process + +> :choco-info: **NOTE** +> +> The upgrade of `chocolatey-agent` through `chocolatey-agent` will require a restart of the service in order for the new version to be picked up. + +### Minor / Patch Versions (for example 1.1.x to 1.3.x, or 1.1.1 to 1.1.5) + +To upgrade Chocolatey Agent directly, you can upgrade it through Chocolatey CLI with the command `choco upgrade chocolatey-agent`. + +### Major Versions + +When upgrading Chocolatey Agent to a new major version (for example, **v1.x** to **v2.x**) a specific upgrade process needs to be followed to ensure that all its dependencies will be correctly installed. + +As an example, the upgrade process for v1.x to v2.x is as follows: + +1. Ensure you are on the latest stable **v1.x** version of Chocolatey CLI, **v5.x** version of Chocolatey Licensed Extension, and **v1.x** version of Chocolatey Agent. + - To find the latest versions, you can use `choco search --exact chocolatey --all-versions` (or `chocolatey.extension` / `chocolatey.agent` for those packages). + You can also visit [Chocolatey CLI's Chocolatey Community Repository page](https://community.chocolatey.org/packages/chocolatey) (or other packages' pages on the site) and look at the Version History section to get this list. +1. Upgrade `chocolatey` **first**. +1. Due to the dependency version ranges and Chocolatey CLI's dependency resolution, `chocolatey-agent` will be upgraded alongside the `chocolatey` package and associated dependencies. + +### Using Chocolatey Central Management to Upgrade chocolatey-agent + +Because Chocolatey Central Management uses `chocolatey-agent` to perform its actions, the upgrade will require a restart of the service. +The easiest way to do this is with a scheduled task as part of an Advanced Deployment Step. + +A recommended Advanced Deployment Step script to do this is as follows: + +> :choco-warning: **WARNING** +> +> If upgrading `chocolatey-agent` to a new **major** version, target **only** the `chocolatey` package for the `choco upgrade` command in the script below, instead of the `chocolatey-agent` package. + +```powershell +$delayInMinutes = 1 + +# If using an internal repository to install Chocolatey Agent, replace `chocolatey.licensed` below +# with the name or URL of your internally configured source. +choco upgrade chocolatey-agent --source 'chocolatey.licensed' + +# Ensure the deployment task registers as failed if the installation failed, and skip registering the +# scheduled task. +if ($LASTEXITCODE -ne 0) { + Write-Error 'The upgrade failed!' + exit $LASTEXITCODE +} + +# Restart the Agent service after the preset delay time via a scheduled task. +$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes($delayInMinutes) +$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-WindowStyle Hidden -Command Restart-Service chocolatey-agent" +$principal = New-ScheduledTaskPrincipal -GroupId Administrators -RunLevel Highest +$settings = New-ScheduledTaskSettingsSet -Hidden +Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "restart chocolatey-agent" -Description "Upgrade Chocolatey Agent" -Principal $principal -Settings $settings -Verbose:$false +``` + +> :choco-warning: **WARNING** +> +> Although the `ScheduledTasks` module is available on Windows Server 2012 R2, the [`chocolatey-agent` service encounters an error when trying to import it](https://github.com/chocolatey/chocolatey-licensed-issues/issues/273). It is recommended to explore other options for the scheduled task if you're using Windows Server 2012 R2. + +## Change Service Account Username or Password + +If you need to change the username or password of the Chocolatey Agent, you have a few options: + +* Change it through the Windows Service Manager +* Change it during an upgrade by +* Change it during an uninstall and reinstall while . + +> :choco-warning: **WARNING** +> +> The service password cannot be changed through a Chocolatey upgrade command while the service is running. + +### Use Chocolatey Central Management to Change the Service Account Username or Password + +If you use Chocolatey Central Management, you won't be able to use a Deployment Step to uninstall the agent and then install the agent. This is because the agent cannot change the username/password while is it running. Instead, you can send a Deployment Step that creates a scheduled task to uninstall the agent, then install with the new parameters. + +> :choco-info: **NOTE** +> +> Due to limitations of Windows Task Scheduler, it is likely that your users will see the PowerShell window initially, but it should disappear once PowerShell has fully started. + +An example advanced Deployment Step script to do this is as follows: + +```powershell +$delayInMinutes = 1 +$newUsername = '' +$newPassword = '' + +$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes($delayInMinutes) +$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-WindowStyle Hidden -Command choco uninstall chocolatey-agent -y ; choco install chocolatey-agent -y --params='/Username:$newUsername' --package-parameters-sensitive='/Password:$newPassword'" +$principal = New-ScheduledTaskPrincipal -GroupId Administrators -RunLevel Highest +$settings = New-ScheduledTaskSettingsSet -Hidden +Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Upgrade chocolatey-agent" -Description "Upgrade Chocolatey Agent" -Principal $principal -Settings $settings -Verbose:$false +``` + +> :choco-info: **NOTE** +> +> Be sure to use to ensure the username and password don't get added to the Chocolatey logs when using Chocolatey Central Management version 0.7.0 or newer. + +> :choco-warning: **WARNING** +> +> Although the `ScheduledTasks` module is available on Windows Server 2012 R2, the [`chocolatey-agent` service encounters an error when trying to import it](https://github.com/chocolatey/chocolatey-licensed-issues/issues/273). It is recommended to explore other options for the scheduled task if you're using Windows Server 2012 R2. diff --git a/src/content/docs/en-us/c4b-environments/ansible/client-setup.mdx b/src/content/docs/en-us/c4b-environments/ansible/client-setup.mdx new file mode 100644 index 00000000000..48d0c19690c --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/ansible/client-setup.mdx @@ -0,0 +1,570 @@ +--- +order: 42 +xref: c4b-ansible-client-setup +title: Client Setup +description: How to Setup a Client Machine to Use the Chocolatey for Business Ansible Environment +--- +import Xref from '@components/Xref.astro'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +## Summary + +Once you have your Chocolatey for Business environment deployed, you'll need to get clients talking to it. +To do that, you'll need to do the following on the clients: + +1. Ensure the client machine can access the Chocolatey Central Management service on port 24020, and the Sonatype Nexus service on 8443 (by default). +1. **If your certificate is self-signed:** . +1. (C4B) deployments and management. + +## Client Setup + +You will need the following values ready when running this script: + +* `FQDN`: The fully qualified domain name used to access your environment. +* `ccm_client_salt`: This is the client-side salt additive. More information about this can be found in the docs. The value will have been provided during the deployment of the Chocolatey for Business environment. +* `ccm_service_salt`: This is the service salt additive. More information about this can be found in the docs. The value will have been provided during the deployment of the Chocolatey for Business environment. +* `nexus_password`: The password for the `chocouser` account which is used by the client to access your environments' Sonatype Nexus service. The value will have been provided during the deployment of the Chocolatey for Business environment. + +The values generated during the deployment are available in the `CCM.html` file provided in the `credentials` directory within the deployment repository. + +export const tabsOne = [ + { id: 'scenario-one', title: 'Ansible Playbook', isActive: true }, + { id: 'scenario-two', title: 'PowerShell Script' }, + { id: 'scenario-three', title: 'Ansible Roles' }, +]; + + + + + To install the Chocolatey components and on-board clients, you could run an Ansible playbook. + + ### ClientSetup Playbook + + ```yaml + --- + - name: Chocolatey For Business Client Setup + hosts: "{{ c4b_nodes }}" + gather_facts: true + vars_prompt: + - name: license_path + prompt: "Path to Chocolatey License File" + private: no + + - name: ccm_fqdn + prompt: "FQDN to access Chocolatey Central Management, e.g. ccm.example.com" + private: no + + - name: ccm_client_salt + prompt: "Client Salt for communicating with Chocolatey Central Management" + private: yes + + - name: ccm_service_salt + prompt: "Service Salt for communicating with Chocolatey Central Management" + private: yes + + - name: nexus_password + prompt: "Password for the ChocoUser account on Sonatype Nexus Repository" + private: yes + vars: + # You can add more sources here. + chocolatey_sources: + - name: ChocolateyInternal + url: "https://{{ nexus_fqdn | default(ccm_fqdn) }}:8443/repository/ChocolateyInternal/index.json" + user: "{{ nexus_user | default('chocouser') }}" + password: "{{ nexus_password | mandatory }}" + + # You can add more configuration settings here. + chocolatey_config: + - cacheLocation: C:\ProgramData\chocolatey\choco-cache + - commandExecutionTimeoutSeconds: 14400 + - backgroundServiceAllowedCommands: install,upgrade,uninstall + + # You can add more features to enable or disable here. + chocolatey_features: + - showNonElevatedWarnings: disabled + - useBackgroundService: enabled + - useBackgroundServiceWithNonAdministratorsOnly: enabled + - allowBackgroundServiceUninstallsFromUserInstallsOnly: enabled + - excludeChocolateyPackagesDuringUpgradeAll: enabled + + # If you'd prefer to use a non-latest version of Chocolatey, you can specify it here. + chocolatey_version: latest + + # When set to true, deploys Chocolatey GUI and the Chocolatey GUI licensed extension. + install_gui: true + + # An accessible copy of the Dotnet 4.8 installer. + ndp48_location: https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe + + tasks: + - name: Ensure a valid Chocolatey for Business License + block: + - name: Get Chocolatey License + ansible.builtin.set_fact: + license_content: "{{ lookup('file', license_path) }}" + when: license_content is not defined and license_path is defined + delegate_to: localhost + + - name: Get Chocolatey License Expiration + ansible.builtin.set_fact: + license_expiry: "{{ license_content | regex_search('expiration=\".+?\"') | regex_replace('expiration=\"(.+)\"', '\\1') | trim() }}" + when: license_content is defined + delegate_to: localhost + + - name: Test License Expiry + ansible.builtin.assert: + that: + - license_expiry is defined + - license_expiry | to_datetime('%Y-%m-%dT%H:%M:%S.0000000') + - license_expiry > ansible_date_time.iso8601 + quiet: true + when: license_expiry is defined + delegate_to: localhost + + - name: Ensure choco-setup Directory + ansible.windows.win_tempfile: + state: directory + suffix: choco-setup + register: choco_setup + + - name: Ensure Dotnet 4.8 + ansible.windows.win_powershell: + parameters: + NetFx48InstallerFile: "{{ ndp48_location | default('https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe') }}" + WorkingDirectory: "{{ choco_setup.path }}" + script: | + param($NetFx48InstallerFile, $WorkingDirectory) + + if ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" -ErrorAction SilentlyContinue).Release -lt 528040) { + Write-Warning ".NET Framework 4.8 is required for Chocolatey. Installing .NET Framework 4.8..." + + # Attempt to download the installer if it doesn't exist locally + if (-not (Test-Path $NetFx48InstallerFile)) { + try { + $DownloadArgs = @{ + Uri = $NetFx48InstallerFile + OutFile = Join-Path $WorkingDirectory $(Split-Path $NetFx48InstallerFile -Leaf) + UseBasicParsing = $true + } + if (-not (Test-Path $DownloadArgs.OutFile)) { + Invoke-WebRequest @DownloadArgs -ErrorAction Stop + } + $NetFx48InstallerFile = $DownloadArgs.OutFile + } catch { + $Ansible.failed = $true + throw "Could not download .NET Framework 4.8" + } + } + + # Install .NET Framework 4.8 + try { + $psi = New-Object System.Diagnostics.ProcessStartInfo + $psi.WorkingDirectory = $WorkingDirectory + $psi.FileName = $NetFx48InstallerFile + $psi.Arguments = "/q /norestart" + + $s = [System.Diagnostics.Process]::Start($psi) + $s.WaitForExit() + + $Ansible.changed = $true + + if ($s.ExitCode -notin (0, 1641, 3010)) { + $Ansible.message = "$($s.StandardOutput.ReadToEnd())" + "$($s.StandardError.ReadToEnd())" + $Ansible.failed = $true + } + } catch { + $Ansible.failed = $true + throw + } + } else { + $Ansible.changed = $false + } + register: dotnet_install + + - name: Reboot Server for Prerequisites + ansible.windows.win_reboot: + when: dotnet_install.changed + + - name: Get Chocolatey Package and Install Script + ansible.windows.win_powershell: + parameters: + RepositoryUrl: "{{ chocolatey_sources[0].url }}" + ChocolateyVersion: "{{ chocolatey_version }}" + WorkingDirectory: "{{ choco_setup.path }}" + script: | + param($RepositoryUrl, $ChocolateyVersion, $WorkingDirectory) + $Ansible.Changed = $false + + # Download Chocolatey Package + $webClient = New-Object System.Net.WebClient + try { + $Credential = [PSCredential]::new( + '{{ chocolatey_sources[0].user | default('') }}', + (ConvertTo-SecureString '{{ chocolatey_sources[0].password | default('') }}' -AsPlainText -Force) + ) + $webClient.Credentials = $Credential.GetNetworkCredential() + } catch {} + + $NupkgUrl = if (-not $ChocolateyVersion -or $ChocolateyVersion -eq 'latest') { + $QueryString = "((Id eq 'chocolatey') and (not IsPrerelease)) and IsLatestVersion" + $Query = 'Packages()?$filter={0}' -f [uri]::EscapeUriString($queryString) + $QueryUrl = ($RepositoryUrl.TrimEnd('/index.json'), $Query) -join '/' # This works with Nexus hosted repositories + + [xml]$result = $webClient.DownloadString($QueryUrl) + $result.feed.entry.content.src + } else { + # Otherwise, assume the URL + "$($RepositoryUrl.Trim('/'))/chocolatey/$($ChocolateyVersion)" + } + + $NupkgPath = Join-Path $WorkingDirectory "chocolatey.zip" + if (-not (Test-Path $NupkgPath)) { + try { + $webClient.DownloadFile($NupkgUrl, $NupkgPath) + } catch { + $Ansible.Failed = $true + } + $Ansible.Changed = $true + } + + $Ansible.Result = $NupkgPath + + # Download Chocolatey Bootstrap Script + $BootstrapScript = Join-Path $WorkingDirectory "Install-Chocolatey.ps1" + $BootstrapUrl = "$($RepositoryUrl.TrimEnd('/index.json').TrimEnd('ChocolateyInternal'))choco-setup/ChocolateyInstall.ps1" + if (-not (Test-Path $BootstrapScript)) { + Write-Verbose "Downloading '$($BootstrapUrl)'" + $webClient.DownloadFile($BootstrapUrl, $BootstrapScript) + $Ansible.Changed = $true + } + register: local_choco_package + + - name: Install Chocolatey + chocolatey.chocolatey.win_chocolatey: + name: chocolatey + state: "{{ 'latest' if chocolatey_version == 'latest' or chocolatey_version is undefined or chocolatey_version == omit else 'downgrade' }}" + source: "{{ chocolatey_sources[0].url | default(omit) }}" + source_username: "{{ chocolatey_sources[0].user | default(omit) }}" + source_password: "{{ chocolatey_sources[0].password | default(omit) }}" + bootstrap_script: "{{ choco_setup.path }}\\Install-Chocolatey.ps1" + environment: + chocolateyDownloadUrl: "{{ local_choco_package.result | default('') }}" + chocolateyUseWindowsCompression: 'true' + register: choco_install + ignore_errors: true + + - name: Install Chocolatey License Package + chocolatey.chocolatey.win_chocolatey: + name: chocolatey-license + state: latest + source: "{{ chocolatey_sources[0].url | mandatory }}" + source_username: "{{ chocolatey_sources[0].user | default(omit) }}" + source_password: "{{ chocolatey_sources[0].password | default(omit) }}" + when: license_content is not defined + + - name: Ensure License Directory + ansible.windows.win_file: + path: C:\\ProgramData\\chocolatey\\license\\ + state: directory + when: license_content is defined + + - name: Install Chocolatey License + ansible.windows.win_copy: + dest: "C:\\ProgramData\\chocolatey\\license\\chocolatey.license.xml" + content: "{{ license_content }}" + force: true + when: license_content is defined + + - name: Install Chocolatey.Extension + chocolatey.chocolatey.win_chocolatey: + name: chocolatey.extension + state: latest + source: "{{ chocolatey_sources[0].url | default(omit) }}" + source_username: "{{ chocolatey_sources[0].user | default(omit) }}" + source_password: "{{ chocolatey_sources[0].password | default(omit) }}" + package_params: /NoContextMenu + + - name: Set Chocolatey Features + chocolatey.chocolatey.win_chocolatey_feature: + name: "{{ item.key }}" + state: "{{ item.value }}" + with_dict: "{{ chocolatey_features }}" + + - name: Set Chocolatey Configuration + chocolatey.chocolatey.win_chocolatey_config: + name: "{{ item.key }}" + state: "{{ 'absent' if not item.value else 'present' }}" + value: "{{ item.value | default('omit') }}" + with_dict: "{{ chocolatey_config }}" + + - name: Add Chocolatey Source + chocolatey.chocolatey.win_chocolatey_source: + name: "{{ item.name }}" + source: "{{ item.url }}" + source_username: "{{ item.user | default(omit) }}" + source_password: "{{ item.password | default(omit) }}" + priority: 1 + state: present + loop: "{{ chocolatey_sources }}" + no_log: true + + - name: Install ChocolateyGUI + chocolatey.chocolatey.win_chocolatey: + name: chocolateygui + state: latest + when: install_gui is not false + + - name: Install ChocolateyGUI Extension + chocolatey.chocolatey.win_chocolatey: + name: chocolateygui.extension + state: latest + when: install_gui is not false + + - name: Disable other sources + chocolatey.chocolatey.win_chocolatey_source: + name: "{{ item }}" + state: disabled + loop: + - chocolatey + - chocolatey.licensed + + - name: Install Chocolatey Agent + chocolatey.chocolatey.win_chocolatey: + name: chocolatey-agent + state: latest + + - name: Configure Chocolatey Agent to use Chocolatey Central Management + block: + - name: Set Chocolatey Configuration + chocolatey.chocolatey.win_chocolatey_config: + name: "{{ item.key }}" + state: "{{ 'absent' if not item.value else 'present' }}" + value: "{{ item.value | default('omit') }}" + with_dict: + - CentralManagementServiceUrl: "https://{{ ccm_fqdn }}:24020/ChocolateyManagementService" + - CentralManagementClientCommunicationSaltAdditivePassword: "{{ ccm_client_salt | default(omit) }}" + - centralManagementServiceCommunicationSaltAdditivePassword: "{{ ccm_service_salt | default(omit) }}" + no_log: true + + - name: Set Chocolatey Features + chocolatey.chocolatey.win_chocolatey_feature: + name: "{{ item.key }}" + state: "{{ item.value }}" + with_dict: + - useChocolateyCentralManagement: enabled + - useChocolateyCentralManagementDeployments: enabled + ... + ``` + + After saving the example playbook to a file, e.g. `client-setup.yml`, you can run it with one of the following commands: + + ```powershell + # This will install to all available hosts. + ansible-playbook /path/to/client-setup.yml --extra-vars "c4b_nodes='*'" + + # You could specify an inventory to use, or be more specific when defining c4b_nodes. + ansible-playbook /path/to/client-setup.yml --inventory /path/to/hosts.yml --extra-vars "c4b_nodes='windows_servers'" + ``` + + You will be prompted to enter the values mentioned above, but you can pass them in using `--extra-vars` instead. Please see the Ansible documentation "[Defining Variables At Runtime](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#defining-variables-at-runtime)" for further details and examples. + + > :choco-warning: **WARNING** + > + > This playbook will install Dotnet 4.8 to target hosts that don't have a compatible version installed. + > + > This will cause machines that have the dependency installed to reboot. + + + + To install the Chocolatey components and on-board clients, you could run the `ClientSetup.ps1` script provided with your Chocolatey for Business Ansible Environment. By default, this script is stored in the newly created `choco-install` repository. + + > :choco-info: **NOTE** + > + > You can set default values for the parameters and remove the Mandatory flag if you prefer to run the script without being prompted for input. + + ### PowerShell Script + + When you're ready, run the following script on the client from an elevated (Run as Administrator) PowerShell terminal: + + ```powershell + param( + # The fully qualified domain name (FQDN) of the Sonatype Nexus Repository service + [Parameter(Mandatory)] + $FQDN, + + # The Password for the chocouser account on Sonatype Nexus Repository service + [Parameter(Mandatory)] + $Password, + + # The Chocolatey Central Management client communication salt, provided during deployment + [Parameter(Mandatory)] + $ClientCommunicationSalt, + + # The Chocolatey Central Management service communication salt + [Parameter(Mandatory)] + $ServiceCommunicationSalt + ) + + $credential = [pscredential]::new('chocouser', ($Password | ConvertTo-SecureString -AsPlainText -Force)) + $downloader = [System.Net.WebClient]::new() + $downloader.Credentials = $credential + + $script = $downloader.DownloadString("https://$($FQDN):8443/repository/choco-install/ClientSetup.ps1") + + $params = @{ + Credential = $credential + ClientSalt = $clientCommunicationSalt + ServerSalt = $serviceCommunicationSalt + } + + & ([scriptblock]::Create($script)) @params + ``` + + For example, to run this locally, save the script to an accessible location (in the example below shown as `~\Downloads\ChocoOnboarding.ps1`) and run: + + ```powershell + Set-ExecutionPolicy Unrestricted -Scope Process -Force + ~\Downloads\ChocoOnboarding.ps1 + ``` + + You will then be prompted for each parameter value. + + Alternatively, you could run the ClientSetup.ps1 script with Ansible. + + ### Ansible Script + + An example of what to add to your Ansible tasks is shown below: + +
    + + ```yaml + --- + - name: Chocolatey For Business Client Setup + hosts: "{{ c4b_nodes }}" + gather_facts: true + vars_prompt: + - name: ccm_fqdn + prompt: "FQDN to access Chocolatey Central Management, e.g. ccm.example.com" + private: no + + - name: ccm_client_salt + prompt: "Client Salt for communicating with Chocolatey Central Management" + private: yes + + - name: ccm_service_salt + prompt: "Service Salt for communicating with Chocolatey Central Management" + private: yes + + - name: nexus_password + prompt: "Password for the ChocoUser account on Sonatype Nexus Repository" + private: yes + tasks: + - name: Run ClientSetup.ps1 + ansible.windows.win_powershell: + parameters: + FQDN: "{{ ccm_fqdn }}" + Password: "{{ nexus_password }}" + ClientCommunicationSalt: "{{ ccm_client_salt }}" + ServiceCommunicationSalt: "{{ ccm_service_salt }}" + script: | + param( + # The fully qualified domain name (FQDN) of the Sonatype Nexus Repository service + [Parameter(Mandatory)] + $FQDN, + + # The Password for the chocouser account on Sonatype Nexus Repository service + [Parameter(Mandatory)] + $Password, + + # The Chocolatey Central Management client communication salt, provided during deployment + [Parameter(Mandatory)] + $ClientCommunicationSalt, + + # The Chocolatey Central Management service communication salt + [Parameter(Mandatory)] + $ServiceCommunicationSalt + ) + + $credential = [pscredential]::new('chocouser', ($Password | ConvertTo-SecureString -AsPlainText -Force)) + $downloader = [System.Net.WebClient]::new() + $downloader.Credentials = $credential + + $script = $downloader.DownloadString("https://$($FQDN):8443/repository/choco-install/ClientSetup.ps1") + + $params = @{ + Credential = $credential + ClientSalt = $clientCommunicationSalt + ServerSalt = $serviceCommunicationSalt + } + + & ([scriptblock]::Create($script)) @params + ... + ``` + +
    + + This will not be as predictable as running Ansible tasks, and will report a change regardless of the result of the script. +
    + + To install the Chocolatey components and on-board clients, you could add the example Ansible roles to a playbook. + + To do this, copy the `roles` directory from the [C4B-Ansible Repository](https://github.com/chocolatey/c4b-ansible) to the directory your playbook is saved, or to a [`roles_path`](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html#storing-and-finding-roles). + + You will then be able to reference the role(s) in your playbook, as shown below: + + ### Ansible Roles + + ```yaml + --- + - name: Chocolatey For Business Client Setup + hosts: "{{ c4b_nodes }}" + gather_facts: true + vars: + ccm_fqdn: "chocolatey.example.com" + ccm_client_salt: !vault | + $ANSIBLE_VAULT;1.1;AES256 + ... + ccm_service_salt: !vault | + $ANSIBLE_VAULT;1.1;AES256 + ... + nexus_password: !vault | + $ANSIBLE_VAULT;1.1;AES256 + ... + tasks: + - name: Add ChocolateyAgent to Server + ansible.builtin.include_role: + name: win_chocolateyagent + vars: + license_path: \path\to\chocolatey.license.xml + ccm_hostname: "{{ ccm_fqdn }}" + client_salt: "{{ ccm_client_salt }}" + service_salt: "{{ ccm_service_salt }}" + repository: + - name: ChocolateyInternal + url: https://{{ ccm_fqdn }}:8443/repository/ChocolateyInternal/index.json + user: chocouser + password: "{{ nexus_password }}" + ... + ``` + + For further information on the roles and available parameters, please refer to the readmes: + + - [Win_ChocolateyLicensed](https://github.com/chocolatey/c4b-ansible/blob/main/roles/win_chocolateylicensed/README.md) + - [Win_ChocolateyAgent](https://github.com/chocolatey/c4b-ansible/blob/main/roles/win_chocolateyagent/README.md) + +
    + +This script will accomplish the following on your client: + +1. Install Chocolatey CLI from the installation script hosted in your internal raw Sonatype Nexus Repository. +1. Add the `ChocolateyInternal` source, and enable it for self-service. +1. Disable the default `chocolatey` source. +1. Install your Chocolatey license using the `chocolatey-license` package. +1. Install the Chocolatey Licensed Extension (without context menus for Package Builder). +1. Install the `ChocolateyGUI` package on the endpoint, for self-service support. +1. Install the `chocolatey-agent` package, which supports self-service and Chocolatey Central Management communication. +1. Enable and disable features related to configuring self-service access on the endpoint. +1. Setup the communication channel between the endpoint and Chocolatey Central Management, using the correct URL and salts. +1. Enable Chocolatey Central Management Deployments. diff --git a/src/content/docs/en-us/c4b-environments/ansible/index.mdx b/src/content/docs/en-us/c4b-environments/ansible/index.mdx new file mode 100644 index 00000000000..110daacdd86 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/ansible/index.mdx @@ -0,0 +1,272 @@ +--- +order: 40 +xref: c4b-ansible +title: Ansible Environment +description: Overview of the Chocolatey for Business Ansible Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +This is an overview of the Chocolatey for Business Ansible Environment. + +It is a playbook and selection of modules, allowing for the speedy creation of an opinionated, pre-configured environment containing Chocolatey Central Management (CCM), a package repository (Sonatype Nexus Repository), and an automation engine (Jenkins). + +> :choco-info: **NOTE** +> +> A Chocolatey for Business Ansible Environment is a fully functional Chocolatey for Business environment; as such, it will require a business or trial license. + +## Prerequisites + +To deploy the Chocolatey for Business Ansible Environment you will need: + +* A Chocolatey for Business license, or Trial license. +* One or more existing server accessible from your Ansible host. +* The ability to create a CNAME DNS record for your chosen FQDN. +* A valid certificate for your chosen FQDN, in PFX format, with exportable private key. + +For portions of this guide using Ansible, we will assume that you either have an Ansible Execution Environment preconfigured, or are using the [dev container](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers) to execute the playbooks. You should have the latest supported version of the [Chocolatey.Chocolatey](https://galaxy.ansible.com/ui/repo/published/chocolatey/chocolatey/) Ansible collection installed, along with any additional prerequisites listed in the [requirements.txt](https://github.com/chocolatey/c4b-ansible/blob/main/requirements.txt). + +You can install the Python requirements for the module using `PIP`, e.g.: + +```powershell +pip3 install --upgrade -r /requirements.txt +``` + +## Deploying the Chocolatey for Business Ansible Environment + +The Chocolatey for Business Ansible Environment is designed to deploy Chocolatey Central Management and all the suggested softwares to one or more servers within your environment, and provide methods for deploying Chocolatey for Business to your other endpoints. + +You can deploy this using Ansible Automation Platform, an existing installation of the Ansible client, or the dev container image provided within the repository (as well as a variety of other methods). + +This guide will be written as if you were using Ansible from a local installation or the dev container, but can be easily adapted to run from Automation Platform / AWX. + +> :choco-info: **NOTE** +> +> If you want to run this deployment on an environment that doesn't have access to the internet, refer to the page and start on a Windows machine. + +### Setup + +Clone or otherwise download the `c4b-ansible` repository from [GitHub](https://github.com/chocolatey/c4b-ansible). + +```powershell +git clone https://github.com/chocolatey/c4b-ansible.git +``` + +### Configuring Your Hosts + +You can deploy the Chocolatey for Business Ansible Environment to one or more servers. There are four services being installed: + +* Chocolatey Central Management +* Sonatype Nexus Repository +* Jenkins +* Optional: SQL Server Express + +#### Installing On a Single Host + +To install on a single host, create a host with the title `ccm_server`. All services will be installed to this host. There is an example of a hosts file containing a single host in the root of the repository - [hosts.yml](https://github.com/chocolatey/c4b-ansible/blob/main/hosts.yml). + +Example: + +```yaml +all: + hosts: + ccm_server: + ansible_connection: winrm + ansible_winrm_transport: ntlm + ansible_port: 5986 + ansible_winrm_scheme: https + ansible_host: chocoserver + ansible_user: ansibleuser + ansible_password: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] +``` + +#### Installing On Multiple Hosts + +To install on multiple hosts, define hosts with the following names: + +* `ccm_server`: Chocolatey Central Management service and website +* `nexus_server`: Sonatype Nexus Repository +* `jenkins_server`: Jenkins +* `database_server`: SQL Server Express + +Example: + +```yaml +all: + vars: + ansible_connection: winrm + ansible_winrm_transport: ntlm + ansible_port: 5986 + ansible_winrm_scheme: https + ansible_user: ansibleuser + ansible_password: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] + hosts: + ccm_server: + ansible_host: chocoserver + nexus_server: + ansible_host: nexus + jenkins_server: + ansible_host: chocorunner + database_server: + ansible_host: db1 +``` + +If any are not defined, the service will be installed on the `ccm_server` host. + +If a connection string is passed, we assume the database is set up and do not install SQL Server. + +For further details on defining Windows hosts in Ansible, see [this blog post](https://www.ansible.com/blog/connecting-to-a-windows-host) for some basics on Windows hosts and [this documentation](https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html) for further information on inventories. + +#### Using An Existing Database + +You can provide a connection string to the environment to use for storing Chocolatey Central Management data. This can have significant benefits for performance, as well as simplifying backups and load-balancing of instances. + +To use an existing database server you wish to use, follow the instructions for and provide the connection string as a variable. + +### Setting Secrets + +Secrets, including credentials, for the various services will be generated during the deployment. They are stored temporarily in the `/credentials` directory within the repository, and you should store and remove them from this when the deployment is complete. + +If you would prefer to create and maintain them from scratch, you can modify the values of the following secrets within the [`/group_vars/all.yml`](https://github.com/chocolatey/c4b-ansible/blob/main/group_vars/all.yml) file: + +Example: + +```yaml +ccm_password: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] +ccm_client_salt: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] +ccm_service_salt: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] +ccm_encryption_password: !vault | + $ANSIBLE_VAULT;1.1;AES256 + [...] +``` + +> :choco-info: **Note** +> +> We have shown examples of redacted secrets being stored securely using [Ansible Vault](https://docs.ansible.com/ansible/latest/vault_guide/index.html) throughout this document. They will need to be replaced with your secrets, and we'd recommend you store them securely! + +### Internalize Packages + +You can select packages to directly internalize at the end of the deployment from the [Chocolatey Community Repository](https://community.chocolatey.org/packages/). + +To do so, uncomment the example array `internalize_packages` in the `/group_vars/all.yml`, and add packages that you wish to be internalized. + +Example: + +```yaml +# Packages to Internalize +internalize_packages: +- 1password +- 7zip +- adobereader +- azcopy +- azure-cli +- firefox +- git +- notepadplusplus +- powershell +- slack +- vscode +``` + +This will result in packages matching the ID's being internalized from the Chocolatey Community Repository. + +### Deploying the Environment + +You can now run the playbook using `ansible-playbook`. If you have modified the hosts file in the base of the repository, you can run it as follows: + +```powershell +ansible-playbook ./c4b-environment.yml -i ./hosts.yml +``` + +The playbook will prompt you for the location of your license, certificate, and password. After you have answered these prompts, the playbook will deploy all of the services. + +![Initial Playbook Prompts](/images/c4b-ansible/playbook-prompts.jpg) + +> :choco-info: **NOTE** +> +> You can add the values to an inventory file or the playbook directly, instead of being prompted at runtime. + +### Configuring Chocolatey Central Management + +> :choco-warning: **WARNING** +> +> You cannot create users in Chocolatey Central Management until you have configured an SMTP server. To do this, please see . +> You can log in to Chocolatey Central Management using the credentials provided in the credentials document (see [Accessing Services](#accessing-services), below). + +## Accessing Services + +At this point, the Chocolatey for Business Ansible Environment should be deployed with the following accessible services: + +| Service | Initial Username | +| --------------------------------- | ---------------- | +| **Chocolatey Central Management** | ccmadmin | +| **Sonatype Nexus Repository** | admin | +| **Jenkins** | admin | + +Passwords to login to the services have been stored in the credentials directory within the root of the `c4b-ansible` repository. + +There should be a `CCM.html` file that contains a start-up guide, including initial steps and credentials for the various services. You should secure this appropriately. + +## FAQ + +### SSL Certificate + +You will need an SSL certificate for the domain you intend to use. This certificate: + +* Needs to be in the PFX format. +* Needs to include an exportable Private Key. +* Must have a password. + +You can either provide a self-signed SSL certificate, or a purchased or acquired certificate from a Certificate Authority (CA). + +#### Self-Signed SSL Certificates + +You can quickly generate a self-signed certificate on any recent Windows machine, using PowerShell. + +**PowerShell:** + +1. Open an elevated PowerShell console +1. Run code similar to the following, modifying the `-FilePath` parameter of `Export-PfxCertificate` if necessary: + +```powershell +$Domain = Read-Host "Enter the FQDN you plan to use to access the Chocolatey for Business Ansible Environment sites" +$Password = Read-Host "Enter a password to use for the PFX" -AsSecureString + +$Cert = New-SelfSignedCertificate -DnsName $Domain -CertStoreLocation cert:\LocalMachine\My +$Cert | Export-PfxCertificate -FilePath ~\Desktop\$($Domain).pfx -Password $Password +``` + +You can then use this generated file and the password you set to deploy your Chocolatey for Business Ansible Environment. + +> :choco-info: **NOTE** +> +> Your browser will display warnings when accessing the Chocolatey for Business Ansible Environment sites with a self-signed certificate. To stop these warnings, you need to import this certificate to the `Trusted Root Certification Authorities` store on any clients used to access the services. Unless you know what you're doing, we would strongly recommend using a certificate from a CA like [LetsEncrypt](https://letsencrypt.org/). + +#### Purchased/Acquired Certificates From a Certificate Authority + +Organizations can also opt to purchase or acquire a certificate from an external Certificate Authority (e.g. [LetsEncrypt](https://github.com/win-acme/win-acme)). +As mentioned before, you will need to ensure that the "Subject/Common Name" attribute on the SSL certificates matches the FQDN you are using. +If you have a preferred vendor for certificates, you should refer to their documentation for best practices in acquiring a certificate. + +## Common Errors and Resolutions + +### SQL Installation Stalling + +We have seen the SQL Server installation fail with code `-2068774911`, or hang indefinitely when the target server only has IPv6 DNS. + +This can be resolved by a login to the server using RDP and re-running the playbook, or by ensuring the target server has IPv4 DNS available. + +### Timeout When Downloading Jenkins Plugins + +Sometimes the downloading of Jenkins plugins times out. Rerunning the playbook again should complete this. diff --git a/src/content/docs/en-us/c4b-environments/ansible/license-update.mdx b/src/content/docs/en-us/c4b-environments/ansible/license-update.mdx new file mode 100644 index 00000000000..a04868d4043 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/ansible/license-update.mdx @@ -0,0 +1,56 @@ +--- +order: 43 +xref: c4b-ansible-license-update +title: License Update +description: How to Update the License in Use on Your Chocolatey for Business Ansible Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +If you use the Chocolatey for Business Ansible Environment for long periods of time, the license you used to deploy it may expire and you will need to update it. + +You can either run through the process manually, or run the Chocolatey for Business Ansible Environment playbook again with a specific tag. + +## Ansible Update + +To create your updated license package with the Ansible playbook, re-run the playbook with the `licensepackage` tag and provide the path to your new Chocolatey for Business license. + +Example of running via Playbook: + +```powershell +ansible-playbook ./c4b-environment.yml -i ./hosts.yml -tags licensepackage +``` + +## Manual Update +### Prerequisites + +- You will need Chocolatey CLI installed. +- You will need your new Chocolatey for Business license file. +- You will need the FQDN of your Sonatype Nexus Repository server. +- You will need the API Key for your Sonatype Nexus Repository. + +### Creating a New License Package + +Please refer to for creating the license package. + +### Uploading the License Package + +We now need to upload this new package to the `ChocolateyInternal` repository. Open a PowerShell terminal and run the following code (which will prompt you for information for values that are not set): + +```powershell +if (-not $FQDN) { + $FQDN = "$(Read-Host -Prompt 'Please enter the FQDN for the Nexus repository')" + if (([uri]$FQDN).Host) {$FQDN = ([uri]$FQDN).Host} +} +if (-not $NexusApiKey) { + $NexusApiKey = "$(Read-Host -Prompt 'Please enter the API Key to be used to push Chocolatey packages to Nexus')" +} + +$LicensePackage = (Get-Item $env:Temp\ChocolateyLicensedPackage\*.nupkg)[-1] +choco push $LicensePackage.FullName --source="https://$($FQDN):8443/repository/ChocolateyInternal/" --api-key="$NexusApiKey" --force +``` + +### Pushing the New License to Clients + +You can either rely on automation to push this package (and updated license) to your clients, or refer to to manually create a deployment. \ No newline at end of file diff --git a/src/content/docs/en-us/c4b-environments/ansible/offline-deployment.mdx b/src/content/docs/en-us/c4b-environments/ansible/offline-deployment.mdx new file mode 100644 index 00000000000..35b532848de --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/ansible/offline-deployment.mdx @@ -0,0 +1,38 @@ +--- +order: 41 +xref: c4b-ansible-offline-deployment +title: Preparing for an Offline Deployment +description: How to deploy Chocolatey for Business Ansible Environment without an internet connection +--- +import Xref from '@components/Xref.astro'; + +## Summary + +In some environments, you won't be able to rely on downloadable resources from the internet. For these purposes, you can prepare the Chocolatey for Business Ansible Environment to be deployed without an internet connection. + +## Prerequisites + +- A Windows machine capable of running Chocolatey. +- An internet connection. +- PowerShell 5.0+. +- A Chocolatey for Business license or Trial license. +- A compatible PFX certificate to use for your deployment. + +## Preparing for Offline Deployment + +1. To begin, download or clone the `c4b-ansible` repository to your local machine. + +1. Open a PowerShell terminal and navigate to the repository directory that contains the files you downloaded, above. + +1. In the PowerShell terminal run the `OfflineInstallPreparation.ps1` script with the following arguments: + + a. `-LicensePath`: The path to your Chocolatey license file, if it's not installed in the default location. + a. `-CertificatePath`: The path to your PFX certificate. + a. `-CertificatePassword`: A `SecureString` of your PFX certificate password. + If you do not provide it, you will be prompted to enter it securely. + + ```powershell + .\OfflineInstallPreparation.ps1 -LicensePath ~\Downloads\chocolatey.license.xml -CertificatePath ~\Downloads\c4b.pfx + ``` + +1. Transfer the content of the repository, including the files directory, to your offline environment and deploy it as per the instructions within the . diff --git a/src/content/docs/en-us/c4b-environments/azure/certificate-update.mdx b/src/content/docs/en-us/c4b-environments/azure/certificate-update.mdx new file mode 100644 index 00000000000..44cad7f7305 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/certificate-update.mdx @@ -0,0 +1,234 @@ +--- +order: 30 +xref: c4b-azure-cert-update +title: Certificate Update +description: A guide to updating the certificate used in the Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +When deploying a Chocolatey for Business (C4B) Azure Environment, you are asked to supply an SSL certificate. This page shows you how to update that certificate when the original is expiring or has been regenerated for any other reason. + +To perform this operation you will need to have permissions sufficient to edit Access Policies on the environment's Azure Key Vault. + +Please note that it can take some time for all of the components in your C4B Azure Environment to reflect the new certificate. + +For portions of this document using PowerShell, we assume you have installed a recent version of the [Az modules](https://www.powershellgallery.com/packages/Az/) (easily available by running `choco install az.powershell` in an elevated prompt), and have logged in to your account using `Connect-AzAccount`. You can also set a variable, `$ResourceGroupName`, to the name of the resource group you deployed the Chocolatey for Business Azure Environment to as we will use this with the PowerShell code snippets below. + +## Access Policies + +Similar to the Access Policies configuration needed to the usernames and passwords for the services running in your C4B Azure Environment, you will need to configure access to manage the SSL certificate. + +You can adjust the Access Policies using the Azure Portal or PowerShell. + +### Azure Portal + +1. Navigate to the `Resource Group` that contains your C4B Azure Environment. +1. Select the Key vault. + + ![Key vault resource](/images/c4b-azure/Cert-KeyVault-Resource.png) + +1. Under `Settings` on the left of the blade, select `Access Policies`. +1. Click `+ Add Access Policy`. + + ![Vault Access Policies](/images/c4b-azure/Cert-KeyVault-AccessPolicies.png) + +1. Select, at a minimum, `Certificate Permissions`: `Get`, `List`, `Import`, and `Update` *(You can use a Template such as `Certificate Management`)*. + + ![Secret Permissions](/images/c4b-azure/Cert-KeyVault-SecretPermissions.png) + +1. Under `Select Principal`, click `None Selected` and find your current user, and select it. +1. Click `Add`. + + ![Add Principal](/images/c4b-azure/Cert-KeyVault-AddPrincipal.png) + +1. Back on the `Access Policies` blade, hit `Save` and wait for the operation to complete. + +### PowerShell + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +$CurrentUser = (Get-AzContext).Account.Id + +# Grant access to the KeyVault, if missing +$KeyVault = Get-AzKeyVault -ResourceGroupName $ResourceGroupName | ForEach-Object {Get-AzKeyVault -VaultName $_.VaultName} +$CertPermissions = $KeyVault.AccessPolicies.Where{$_.DisplayName -like "*$CurrentUser*"}.PermissionsToCertificates +if ($CertPermissions -notcontains 'Get' -or $CertPermissions -notcontains 'List' -or $CertPermissions -notcontains 'Update' -or $CertPermissions -notcontains 'Import') { + $NewCertPermissions = $CertPermissions + @('Get', 'List', 'Update', 'Import') | Select-Object -Unique + Set-AzKeyVaultAccessPolicy -VaultName $KeyVault.VaultName -UserPrincipalName $CurrentUser -PermissionsToCertificates $NewCertPermissions +} +``` + +## Updating the Azure Key Vault + +The certificate used by most of the C4B Azure Environment is stored in the provided Azure Key Vault under the name `C4B-Azure-Certificate`. To update the certificate used by the environment, you create a new version of this certificate. + +> :choco-info: **NOTE** +> +> Please note that the new certificate must meet the same requirements as the original did during the . The certificate: +> +> * Needs to be in the PFX format. +> * Needs to include an exportable Private Key. +> * Must have a password. + +You can upload a new version of the certificate using the Azure Portal or PowerShell. + +### Azure Portal + +1. Within the Key Vault, under `Settings` on the left of the blade, select `Certificates`. +1. Select the certificate named `C4B-Azure-Certificate`. + + ![Vault Certificates](/images/c4b-azure/Cert-KeyVault-Certificates.png) + +1. Click `+ New Version`. + + ![Vault Certificates New Version](/images/c4b-azure/Cert-KeyVault-Cert-New.png) + +1. Change the `Method of Certificate Creation` to `Import`. +1. Upload your certificate PFX file, and provide the password needed to import it. + + ![Vault Import Certificates](/images/c4b-azure/Cert-KeyVault-Cert-Import.png) + +1. Click `Create`. +1. The new certificate will now be listed as the `CURRENT VERSION` and any previous certificates will be listed under `OLDER VERSIONS`. + + ![Vault Certificate Version List](/images/c4b-azure/Cert-KeyVault-Cert-Version-List.png) + +### PowerShell + +This script prompts you for the name of the Resource Group that contains your C4B Azure Environment and then opens a dialog box to select your new certificate. + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +$KeyVault = Get-AzKeyVault -ResourceGroupName $ResourceGroupName | ForEach-Object {Get-AzKeyVault -VaultName $_.VaultName} + +$null = [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") +$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ + Title = 'Select Chocolatey for Business Azure Environment Certificate' + Filter = 'Certificate (*.pfx)|*.pfx' +} +$null = $FileBrowser.ShowDialog() + +$CertImport = @{ + VaultName = $KeyVault.VaultName + Name = 'C4B-Azure-Certificate' + FilePath = $FileBrowser.FileName +} +$null = Import-AzKeyVaultCertificate @CertImport -Password (Read-Host "Enter the certificate import password" -AsSecureString) +``` + +## Updating the Application Gateway + +The Application Gateway provided with your C4B Azure Environment needs to be updated manually, as it is not able to reference the Azure Key Vault. + +### Azure Portal + +> :choco-info: **NOTE** +> +> In addition to the certificate in a PFX format that was used in the , you will need a copy of the certificate in CER format. +> +> You can convert your existing certificate using OpenSSL (easily installed by running `choco install openssl.light`): +> +> `openssl pkcs12 -in certificate.pfx -out certificate.cer -nokeys -clcerts` +> +> You will need to edit the resulting file to remove all of the text above the `-----BEGIN CERTIFICATE-----` line. + +1. Navigate to the `Resource Group` the contains your C4B Azure Environment. +1. Select the `Application gateway`. + + ![Application Gateway resource](/images/c4b-azure/Cert-AppGateway-Resource.png) + +1. Under `Settings` on the left of the blade, select `Backend settings`. +1. Select `CCMService`. + + ![Application Gateway backend settings](/images/c4b-azure/Cert-AppGateway-BackendSettings.png) + +1. On the `Add Backend settings` blade, click `+ Add certificate`. + + ![Backend setting add certificate](/images/c4b-azure/Cert-AppGateway-BackendCertAdd.png) + +1. Ensure `Create new` is selected and browse to the `.cer` version of your certificate. +1. Provide a descriptive `Cert name` that is different to the existing certificate. The initial certificate is called `CCMCert`. +1. Click `+ Add certificate`. + + ![Add backend certificate](/images/c4b-azure/Cert-AppGateway-BackendCertDetails.png) + +1. Click the `...` (three dots) to the right of the previous certificate and choose `Delete`. +1. Click `Save`. + + ![Save new backend certificate](/images/c4b-azure/Cert-AppGateway-BackendCertSave.png) + +1. Under `Settings` on the left of the blade, select `Listeners`. +1. Select `CCM`. + + ![Application Gateway listeners settings](/images/c4b-azure/Cert-AppGateway-ListenersSettings.png) + +1. Ensure `SslCertificate` is the selected certificate. +1. Check `Renew or edit selected certificate`. +1. Browse to select the `.pfx` version of your certificate. +1. Enter the `Password` required to import the certificate. +1. Click `Save`. + + ![Application Gateway listeners cert update](/images/c4b-azure/Cert-AppGateway-ListenersCert.png) + +1. It can take some time for the Application Gateway to update. When it has finished you will be able check that the new certificate is being served by visiting on the C4B Azure Environment . + +### PowerShell + +Please note that until the `Set-AzApplicationGateway` command is run, the Application Gateway will not be updated. **The update can take up to 30 minutes**, but the command should return immediately. + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +$ApplicationGateway = Get-AzApplicationGateway -ResourceGroupName $ResourceGroupName + +$null = [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") +if (-not $FileBrowser.FileName) { + $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ + Title = 'Select Chocolatey for Business Azure Environment Certificate' + Filter = 'Certificate (*.pfx)|*.pfx' + } + $null = $FileBrowser.ShowDialog() +} + +$CertificateDetails = @{ + Name = "SslCertificate" + CertificateFile = $FileBrowser.FileName + Password = Read-Host "Enter the certificate import password" -AsSecureString +} + +# Set the listener SSL certificate +$ApplicationGateway = Set-AzApplicationGatewaySslCertificate -ApplicationGateway $ApplicationGateway @CertificateDetails + +# Convert the certificate to a CER format +$Cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new( + $CertificateDetails.CertificateFile, + $CertificateDetails.Password, + 32 # EphemeralKeySet +) +[IO.File]::WriteAllBytes(($TemporaryCerPath = New-TemporaryFile), $Cert.Export("Cert")) + +# Set the authentication certificate for the CCM service +$ApplicationGateway = Set-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $ApplicationGateway -Name "CCMCert" -CertificateFile $TemporaryCerPath + +# "Save" the new settings to the Application Gateway +$null = Set-AzApplicationGateway -ApplicationGateway $ApplicationGateway + +# Clean up the temporary CER +Remove-Item $TemporaryCerPath +``` + +## FAQ + +### I've uploaded a new certificate, why hasn't it been applied? + +Some components of the C4B Azure Environment need to select between multiple versions of a certificate when determining if an update is required. + +The determining factor is the `NotBefore` date on the certificate. The latest date is considered to belong to the newest certificate. + +You can check the `NotBefore` property of a pfx file using PowerShell: + +```powershell +$CertificatePath = Read-Host 'Enter the path to the certificate file' +Get-PfxCertificate -FilePath $CertificatePath | Select-Object NotBefore +``` diff --git a/src/content/docs/en-us/c4b-environments/azure/client-setup.mdx b/src/content/docs/en-us/c4b-environments/azure/client-setup.mdx new file mode 100644 index 00000000000..f918cf79abc --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/client-setup.mdx @@ -0,0 +1,105 @@ +--- +order: 27 +xref: c4b-azure-client-setup +title: Client Setup +description: How to setup a client machine to use Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +Once you have your Chocolatey for Business Azure Environment deployed, you'll need to get clients talking to it. +To do that, you'll need to do the following on the clients: + +1. Setup DNS to allow access to the environment. +1. Install the SSL/TLS certificate, if self-signed, so clients can access HTTPS components. +1. Install Chocolatey components and configure the client for Chocolatey for Business (C4B) deployments. + +## DNS + +Ensure that you have to direct clients to your deployed environment. + +Once you've added the required CNAME record, clients should be able to access it. + +## SSL Certificate + +> :choco-info: **NOTE** +> +> If you used an SSL certificate from an external Certificate Authority (CA), or internally trusted PKI CA, your clients will automatically trust it and you can skip this section. + +If you used a self-signed certificate to deploy your Chocolatey for Business Azure Environment, you will need to import this certificate to the `Trusted Root Certification Authorities` store on the clients. + +1. Open the Microsoft Management Console (`MMC.msc`) +1. Select **File** -> **Add/Remove Snap-in...** +1. Select **Certificates** and click **Add >** +1. Choose **Computer account** and click **Next**, **Finish**, then **OK** +1. Expand **Certificates (Local Computer)** +1. Right-click **Trusted Root Certification Authorities**, and select **All Tasks** -> **Import** + + ![Importing SSL Certificate in MMC](/images/c4b-azure/MMC-Import-Certificate.png) + +1. Click **Next** +1. Browse to the self-signed certificate file + 1. You may need to adjust the filetype so that you can see `.pfx` files + + ![Changing file type when browsing for certificate file in MMC](/images/c4b-azure/MMC-Browse-FileType.png) + +1. Click **Next** +1. Enter the password supplied when creating the certificate +1. Click **Next**, **Next**, then **Finish** +1. Close the Microsoft Management Console + +## Client Setup Script + +To on-board clients, you run the `ClientSetup.ps1` script provided with your Chocolatey for Business Azure Environment. + +You will need the following values ready when running this script: + +* `FQDN`: The fully qualified domain name used to access your environment. +* `ccmClientCommunicationSalt`: This is the client-side salt additive. More information about this can be found in the docs. +* `ccmServiceCommunicationSalt`: This is the server-side salt additive. More information about this can be found in the docs. +* `ChocoUserPassword`: The password for the `chocouser` account which is used by the client to access your environments' Sonatype Nexus Repository service. + +Except for the `FQDN`, all of these values are available in your deployed environment's Azure Key Vault. +See for more information about retrieving values from the Vault. + +When you're ready, run the following on the client from an elevated (Run as Administrator) PowerShell session: + +```powershell +# Please fill in the following values +$fqdn = 'Replace with FQDN for your Chocolatey for Business QDE Azure Environment' +$clientCommunicationSalt = 'Your ccmClientCommunicationSalt' #This value is stored within your Azure Key Vault +$serverCommunicationSalt = 'Your ccmServiceCommunicationSalt' #This value is stored within your Azure Key Vault +$password = 'Your ChocoUserPassword' #This value is stored within your Azure Key Vault + +# Touch NOTHING below this line +$user = 'chocouser' + +$securePassword = $password | ConvertTo-SecureString -AsPlainText -Force +$credential = [pscredential]::new($user, $securePassword) +$downloader = [System.Net.WebClient]::new() +$downloader.Credentials = $credential + +$script = $downloader.DownloadString("https://$($fqdn)/nexus/repository/choco-install/ClientSetup.ps1") + +$params = @{ + Credential = $credential + ClientSalt = $clientCommunicationSalt + ServerSalt = $serverCommunicationSalt +} + +& ([scriptblock]::Create($script)) @params +``` + +This script will accomplish the following on your client: + +1. Install Chocolatey CLI from the installation script hosted in your internal raw Sonatype Nexus Repository. +1. Add the `ChocolateyInternal` source, and enable it for self-service +1. Disable the default `chocolatey` source. +1. Install your Chocolatey license using the `chocolatey-license` package. +1. Install the Chocolatey Licensed Extension (without context menus for Package Builder). +1. Install the `ChocolateyGUI` package on the endpoint, for self-service support. +1. Install the `chocolatey-agent` package, which supports self-service and Chocolatey Central Management communication. +1. Enable and disable features related to configuring self-service access on the endpoint. +1. Setup the communication channel between the endpoint and Chocolatey Central Management, using the correct URL and salts. +1. Enable Chocolatey Central Management Deployments. diff --git a/src/content/docs/en-us/c4b-environments/azure/index.mdx b/src/content/docs/en-us/c4b-environments/azure/index.mdx new file mode 100644 index 00000000000..d6a7b29a99d --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/index.mdx @@ -0,0 +1,359 @@ +--- +order: 20 +xref: c4b-azure +title: Azure Environment +description: Overview of the Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +This is an overview of the Chocolatey for Business Azure Environment. + +It is a deployable resource in the [Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/chocolateysoftwareinc1605695330527.c4b_azure_qde), allowing for the speedy creation of an opinionated, pre-configured environment containing Chocolatey Central Management (CCM), a package repository (Nexus OSS), and an automation engine (Jenkins). + +> :choco-info: **NOTE** +> +> A Chocolatey for Business Azure Environment is a fully functional Chocolatey for Business environment; as such, it will require a business or trial license. + +## Prerequisites + +Currently, to deploy the Chocolatey for Business Azure Environment you will need: + +* A Chocolatey for Business License, or Trial License +* An account with [Contributor](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#contributor) access to an Azure subscription +* The ability to create a CNAME DNS record for your chosen FQDN +* A valid certificate for your chosen FQDN, in PFX format, with exportable private key + +For portions of this document using PowerShell, we assume you have installed a recent version of the [Az modules](https://www.powershellgallery.com/packages/Az/) (easily available by running `choco install az.powershell` in an elevated prompt), and have logged in to your account using `Connect-AzAccount`. You can also set a variable, `$ResourceGroupName`, to the name of the resource group you deployed the Chocolatey for Business Azure Environment to as we will use this with the PowerShell code snippets below. + +## Deploying the Chocolatey for Business Azure Environment + +The Chocolatey for Business Azure Environment is available as a deployable resource in the [Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/chocolateysoftwareinc1605695330527.c4b_azure_qde). + +Find the [Chocolatey for Business Azure Environment](https://portal.azure.com/#blade/Microsoft_Azure_Marketplace/GalleryItemDetailsBladeNopdl/id/chocolateysoftwareinc1605695330527.c4b_azure_qde) resource, and click `Create`. You will be taken to the `Create Chocolatey for Business Azure Environment` page. + +### Basics + +Select the subscription, resource group, and region you intend to deploy to. As you need to deploy this to an empty resource group, you may need to create a new one by clicking the `Create new` button below the selector. + +![Resource Group Selector](/images/c4b-azure/BasicsView-ResourceGroupSelector.png) + +By default, all resources in the resource group are deployed with 'choco' prefixing the resource name. If you'd prefer to use something else for identification you can change it here. + +> :choco-info: **NOTE** +> +> Due to constraints in naming some resources, the prefix must be 8 characters or less and contain only alphanumeric characters. + +![Naming Prefix](/images/c4b-azure/BasicsView-InstanceDetails.png) + +For the environment to deploy successfully, you must have a valid Chocolatey for Business license. Select and upload your license here. + +![License Upload](/images/c4b-azure/BasicsView-LicenseUpload.png) + +### Domain Configuration + +In order to connect to your new Chocolatey for Business Azure Environment, you will need to select a DNS name. Though you can connect to the Microsoft provided FQDN, there would be additional work involved in trusting the self-signed certificate used (i.e. adding the Public IP addresses' FQDN to a self-signed certificate, and ensuring this certificate was in the `Trusted Root Certification Authorities` store). + +Fill your intended domain name in, select and upload your PFX certificate, and enter the password for the certificate. + +![Custom Domain Configuration](/images/c4b-azure/DomainView-CustomDomain.png) + +> :choco-info: **NOTE** +> +> The PFX certificate must contain the exportable private key, and should be protected with a password. +> Suggestions for creating a PFX certificate can be found . + +### Internalize Packages + +You can select packages to directly internalize from the [Chocolatey Community Repository](https://community.chocolatey.org/packages/). + +We offer bundles of recommended packages (see for the exact content of each bundle). + +You can then select any of the **Additional Packages**, which will be added to the bundle you choose. + +Finally, you can specify _any other_ package from the Chocolatey Community Repository in the `Specify any other packages` textbox. + +Please provide a list of Package IDs, separated with commas. + +![Package Internalization Screen](/images/c4b-azure/InternalizePackagesView.png) + +### Review + create + +At this point, Azure will validate your inputs and allow you to deploy the resource. + +If there are any validation errors (e.g. missing fields), Azure will highlight the tab the issue is on. + +When validation succeeds, click `Create`. The specified environment will be deployed. This can take around half an hour, depending on how many packages are being internalized. + +## DNS Configuration + +You should create a CNAME DNS record for the domain you specified on the earlier Domain Configuration page. + +You can get the FQDN using the [Azure Portal](https://portal.azure.com), or via PowerShell: + +**Portal:** + +1. Navigate to the Resource Group +1. Select the resource with type `Public IP Address` +1. Copy the `DNS name` from the `Essentials` panel at the top of the blade + +![Public IP Address](/images/c4b-azure/PublicIPAddress-EssentialsView.png) + +**PowerShell:** + +1. Run the following PowerShell: + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +Get-AzPublicIpAddress -ResourceGroupName $ResourceGroupName | Select-Object -ExpandProperty DnsSettings | Select-Object -ExpandProperty Fqdn +``` + +### Creating a CNAME record + +You should now create a CNAME record for this FQDN. The exact method for this will vary depending on your domain registrar. +Please see the table below for links to help from some popular registrars: + +| Registrar | Documentation | +| ---------- | ------------- | +| GoDaddy | [Add a CNAME record](https://godaddy.com/help/add-a-cname-record-19236) | +| NameCheap | [How to Create a CNAME Record For Your Domain](https://www.namecheap.com/support/knowledgebase/article.aspx/9646/2237/how-to-create-a-cname-record-for-your-domain/) | +| Cloudflare | [Managing DNS records in Cloudflare](https://support.cloudflare.com/hc/en-us/articles/360019093151-Managing-DNS-records-in-Cloudflare#h_60566325041543261564371) | +| Bluehost | [How To Create & Edit CNAME](https://my.bluehost.com/hosting/help/resource/714) | +| 123-reg | [Creating a CNAME record](https://www.123-reg.co.uk/support/domains/how-do-i-set-up-a-cname-record-on-my-domain-name/) | + +If you need help with another registrar, we recommend searching for their documentation, or reaching out to their support. + +### Configuring Chocolatey Central Management + +> :choco-warning: **WARNING** +> +> You cannot create users in Chocolatey Central Management until you have configured an SMTP server. To do this, please see . +> You can log in to Chocolatey Central Management using the credentials provided in the KeyVault (see [Accessing Services](#accessing-services), below). + +## Accessing Services + +At this point, your environment should be deployed. You should be able to access the following services: + +| Service | Address | Initial Username | +| --------------------------------- | :----------------------- | ---------------- | +| **Chocolatey Central Management** | https://\/ | ccmadmin | +| **Sonatype Nexus** | https://\/nexus | admin | +| **Jenkins** | https://\/jenkins | admin | + +Passwords to log in to the services have been stored in the KeyVault deployed to your Resource Group. + +You can access these passwords either via the Azure Portal, or with PowerShell. + +**Portal:** + +1. Navigate to the Resource Group +1. Select the KeyVault +1. Under `Settings` on the left of the blade, select `Access Policies` +1. Click `+ Add Access Policy` + + ![Vault Access Policies](/images/c4b-azure/KeyVault-AccessPolicies.png) + +1. Select, at a minimum, `Secret Permissions`: `Get` and `List` *(You can use a Template such as `Secret Management`)* + + ![Secret Permissions](/images/c4b-azure/KeyVault-SecretPermissions.png) + +1. Under `Select Principal`, click `None Selected` and find your current user, and select it +1. Click `Add` + + ![Add Principal](/images/c4b-azure/KeyVault-AddPrincipal.png) + +1. Back on the `Access Policies` blade, hit `Save` and wait for the operation to complete + +You can now view and access the secrets in this KeyVault. + +![Secrets in Vault](/images/c4b-azure/KeyVault-Secrets.png) + +1. Under `Settings` on the left of the blade, select `Secrets` +1. For each Password you want to retrieve (e.g. nexusPassword) + 1. Select the secret + 1. Select the current version + 1. Either click `Show Secret Value` or use the `Copy to Clipboard` button to retrieve the secret + +**PowerShell:** + +1. Run PowerShell similar to the following: + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +$CurrentUser = (Get-AzContext).Account.Id + +# Grant access to the KeyVault, if missing +$KeyVault = Get-AzKeyVault -ResourceGroupName $ResourceGroupName | ForEach-Object {Get-AzKeyVault -VaultName $_.VaultName} +if ($KeyVault.AccessPolicies.Where{$_.DisplayName -like "*$CurrentUser*"}.PermissionsToSecrets -notcontains 'get') { + Set-AzKeyVaultAccessPolicy -VaultName $KeyVault.VaultName -UserPrincipalName $CurrentUser -PermissionsToSecrets @('get') +} + +Write-Host "Chocolatey for Business Azure Environment Passwords for '$($KeyVault.ResourceGroupName)':" +@{ + CCM = Get-AzKeyVaultSecret -VaultName $KeyVault.VaultName -Name ccmPassword -AsPlainText + Nexus = Get-AzKeyVaultSecret -VaultName $KeyVault.VaultName -Name nexusPassword -AsPlainText + Jenkins = Get-AzKeyVaultSecret -VaultName $KeyVault.VaultName -Name jenkinsPassword -AsPlainText +} +``` + +*or* Download and use [Get-AzLabCredential.ps1](https://gist.githubusercontent.com/JPRuskin/a8e438c534a471749fe3c38c948882e8/raw/Get-AzLabCredential.ps1) (which automatically handles permissions), as follows: + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +$CcmCredential = .\Get-AzLabCredential.ps1 -ResourceGroupName $ResourceGroupName -SecretPrefix ccm +$NexusCredential = .\Get-AzLabCredential.ps1 -ResourceGroupName $ResourceGroupName -SecretPrefix nexus +$JenkinsCredential = .\Get-AzLabCredential.ps1 -ResourceGroupName $ResourceGroupName -SecretPrefix jenkins +``` + +## FAQ + +### SSL Certificate + +You will need an SSL certificate for the domain you intend to use. This certificate: + +* Needs to be in the PFX format +* Needs to include an exportable Private Key +* Must have a password + +You can either provide a self-signed SSL certificate, or a purchased or acquired certificate from a Certificate Authority (CA). + +#### Self-Signed SSL Certificates + +You can quickly generate a self-signed certificate on any recent Windows computer, using PowerShell. + +**PowerShell:** + +1. Open an elevated PowerShell console +1. Run code similar to the following, modifying the filepath if necessary: + +```powershell +$Domain = Read-Host "Enter the FQDN you plan to use to access the Chocolatey for Business Azure Environment sites" +$Password = Read-Host "Enter a password to use for the PFX" -AsSecureString + +$Cert = New-SelfSignedCertificate -DnsName $Domain -CertStoreLocation cert:\LocalMachine\My +$Cert | Export-PfxCertificate -FilePath ~\Desktop\$($Domain).pfx -Password $Password +``` + +You can then use this generated file and the password you set to deploy your Chocolatey for Business Azure Environment. + +You can also use a Microsoft Azure KeyVault to create a self-signed certificate by following the steps in Microsoft's documentation using the [Portal](https://docs.microsoft.com/en-us/azure/key-vault/certificates/quick-create-portal) or [Azure PowerShell](https://docs.microsoft.com/en-us/azure/key-vault/certificates/quick-create-powershell). + +> :choco-info: **NOTE** +> +> Your browser will display warnings when accessing the Chocolatey for Business Azure Environment sites with a self-signed certificate. To stop these warnings, you need to import this certificate to the `Trusted Root Certification Authorities` store on machines used to access the management sites. + +#### Purchased/Acquired Certificates from CA + +Organizations can also opt to purchase or acquire a certificate from an external Certificate Authority (e.g. [LetsEncrypt](https://github.com/win-acme/win-acme)). +As mentioned before, you will need to ensure that the "Subject/Common Name" attribute on the SSL certificates matches the FQDN you are using. +If you have a preferred vendor for certificates, you should refer to their documentation for best practices in acquiring a certificate. + +You can also use a Microsoft Azure KeyVault and one of the [partnered CA Providers](https://docs.microsoft.com/en-us/azure/key-vault/certificates/create-certificate#partnered-ca-providers) to create and fulfil a certificate request, though this may require additional configuration for your environment. + +### How much does it cost? + +A ballpark estimate comes to around $350 per month for the deployed infrastructure, after the 0.20.0 release. + +| Version | Estimated Cost | Date | +| -------- | -------------- | ------------------------ | +| ≤ 0.19.0 | $170 | 2021-07-29 -> 2023-07-17 | +| ≥ 0.20.0 | $350 | 2023-08-17 -> | + +This is due to the deprecation of the Application Gateway v1, which cost significantly less than the v2. + +Using methods such as [Azure Reservations](https://docs.microsoft.com/en-us/azure/cost-management-billing/reservations/save-compute-costs-reservations), [Hybrid Benefit](https://azure.microsoft.com/en-gb/pricing/hybrid-benefit/), or [Dev-Test Subscriptions](https://azure.microsoft.com/en-gb/pricing/dev-test/#overview) can cut the overall cost significantly. + +This is based on: + +* Using a `Standard B4ms` VM size +* Deploying to a standard Pay-As-You-Go subscription +* Deploying to the `East US` location + +### Can I change my public IP address in the Application Gateway from Dynamic to Static? + +The only way to accomplish this is by setting the public IP address statically _from the start_. Once the public IP address is created, the application gateway does not support changing it. More information can be found [in the Microsoft documentation here.](https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/configure-public-ip-application-gateway) + +What _can_ be done is creating a CNAME record pointing at the existing DNS record of the Application Gateway. For assistance in setting this CNAME DNS record, please see our . + +## Common Errors and Resolutions + +### Jenkins jobs fail to run after upgrade to Chocolatey CLI v2.0.0 + +As of version 2.0.0 of Chocolatey CLI, the `choco list` command only lists local packages. The Jenkins scripts included in the C4B Azure Environment prior to version 0.19.0 used this command when interrogating the environment's Nexus repositories. This results in the Jenkins jobs that use these scripts failing to run after updating Chocolatey CLI on ChocoServer itself to version 2.0.0 or above. + +To fix these scripts, you need to install a package called `chocolatey-licensed-jenkins-scripts` on ChocoServer. Start by internalizing it: + +1. Ensure you have your login credentials for Jenkins and Chocolatey Central Management, as described in the [Accessing Services](#accessing-services) section. +1. Log into Jenkins at `https:///jenkins` +1. Click the green "play" triangle to the right of the `Internalize packages from the Chocolatey Community and Licensed Repositories` job + + ![Location of Jenkins job play button](/images/c4b-azure/Jenkins-Play-Button.png) + +1. Enter `chocolatey-licensed-jenkins-scripts` under the `P_PKG_LIST` parameter +1. Change the `P_DST_URL` parameter so that it ends with `ChocolateyInternal` rather than `ChocolateyTest`, this is being changed because the job that promotes packages between these repositories will not work if you have already upgraded to Chocolatey CLI v2.0.0 or above +1. Click `Build` + + ![Example of settings for the Internalize Packages Jenkins job](/images/c4b-azure/Jenkins-Job-Fix-Internalize.png) + +> :choco-info: **NOTE** +> +> You may wish to run this job a second time, leaving the `P_DST_URL` as its default value. This will allow future updates to the `chocolatey-licensed-jenkins-scripts` package to be automatically internalized. + +Now you need to deploy the `chocolatey-licensed-jenkins-scripts` package to ChocoServer: + +1. Log into Chocolatey Central Management at `https:///` +1. Navigate to `Groups` and create a group the contains only ChocoServer if that does not already exist +1. Create a that targets the group containing ChocoServer +1. Add a basic step, selecting the `choco install` command and specifying the package name `chocolatey-licensed-jenkins-scripts` +1. Move this Deployment Plan to the Ready and then run it + +### Status Message: Exist soft deleted vault with the same name. (Code:ConflictError) + +This can happen when you've deployed a Chocolatey for Business Azure Environment, deleted the Resource Group, and then redeployed it with the same name. + +You can either purge the KeyVault in the GUI, or use the PowerShell Az modules as follows: + +**PowerShell:** + +```powershell +if (-not $ResourceGroupName) {$ResourceGroupName = Read-Host 'Enter the ResourceGroupName'} +Get-AzKeyVault -InRemovedState | Where-Object { + $_.ResourceId -match "/resourceGroups/$($ResourceGroupName)/" +} | ForEach-Object { + Remove-AzKeyVault -Name $_.VaultName -Location $_.Location -InRemovedState -Force +} +``` + +**Portal:** + +1. Open the [Azure Portal](https://portal.azure.com) in a browser, and navigate to the [KeyVault](https://portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/Microsoft.KeyVault%2Fvaults) resource view. +1. Click `Manage Deleted Vaults` +1. Select the Subscription the KeyVault was contained in +1. Select the KeyVault to purge, and click `Purge`, then confirm by clicking `Delete` + +### Wait-CCM: 'http://ChocoServer/' was not accessible + +We have seen an occasional issue with IISReset that cannot be replicated. This results in CCM setup stalling. + +> Restart attempt failed. +> Access denied, you must be an administrator of the remote computer to use this +> command. Either have your account added to the administrator local group of +> the remote computer or to the domain administrator global group. + +If you see this error, you should redeploy the resource. + +### Environment VM unable to start due to missing secret (Error: KeyVaultSecretDoesNotExist) + +During the deployment of the Chocolatey for Business Azure Environment your supplied certificate is converted from a [secret](https://learn.microsoft.com/en-us/azure/key-vault/secrets/about-secrets) object to a [certificate](https://learn.microsoft.com/en-us/azure/key-vault/certificates/about-certificates) object within the environment's [KeyVault](https://portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/Microsoft.KeyVault%2Fvaults) + +The Chocolatey for Business Azure Environment's Virtual Machine may retain a reference to the certificate from prior to the conversion, and if it is shut down then it will not be able to start again due to the referenced secret no longer existing. + +To fix this, use the PowerShell Az modules as follows: + +```powershell +if (-not $ResourceGroupName) { + $ResourceGroupName = Read-Host 'Enter the ResourceGroupName' +} +Get-AzVM -ResourceGroupName $ResourceGroupName | Remove-AzVMSecret | Update-AzVM +``` diff --git a/src/content/docs/en-us/c4b-environments/azure/license-update.mdx b/src/content/docs/en-us/c4b-environments/azure/license-update.mdx new file mode 100644 index 00000000000..42ea319f3d4 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/license-update.mdx @@ -0,0 +1,128 @@ +--- +order: 31 +xref: c4b-azure-license-update +title: License Update +description: How to update the license in use on your Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +If you use the Chocolatey for Business Azure Environment for long periods of time, the license you used to deploy it may expire and you will need to update it. + +### Prerequisites + +- You will need Chocolatey CLI installed. +- You will need your new Chocolatey for Business license file. +- You will need the FQDN of your Chocolatey for Business Azure Environment. +- You will need the API Key for your Nexus repository (or access to the Resource Group hosting your Azure Key Vault to be able to ). + +## Creating a New License Package + +When you initially deploy a Chocolatey for Business Azure Environment, you upload your Chocolatey for Business license. This is then used to create a Chocolatey package that installs the license on your nodes. + +We will need to create an updated version of the package, which will overwrite the previous version of the license on install. + +Open a PowerShell window and run the following code (which will prompt you for information for values that are not set): + +```powershell +if (-not $LicensePath) { + $LicensePath = "$(Read-Host -Prompt 'Please enter the path to your license file')" +} + +# Generate the license package layout +$WorkingDirectory = Join-Path $env:Temp "ChocolateyLicensedPackage" +if (-not (Test-Path $WorkingDirectory)) { + $null = New-Item -Path $WorkingDirectory -ItemType Directory +} + +$PackageDirectory = Join-Path $WorkingDirectory "chocolatey-license" + +$ToolsDir = Join-Path $PackageDirectory "tools" +if (-not (Test-Path $ToolsDir)) { + $null = New-Item $ToolsDir -ItemType Directory +} + +Set-Content -Path $ToolsDir\chocolateyInstall.ps1 -Encoding UTF8 -Value @' +$ErrorActionPreference = "Stop" +$ToolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition + +if (-not (Test-Path $env:ChocolateyInstall\license -PathType Container)) { + $null = New-Item $env:ChocolateyInstall\license -ItemType Directory -Force +} +Copy-Item -Path $ToolsDir\chocolatey.license.xml -Destination $env:ChocolateyInstall\license\chocolatey.license.xml -Force +'@ + +Set-Content -Path $ToolsDir\chocolateyUninstall.ps1 -Encoding UTF8 -Value @' +Remove-Item -Path "$env:ChocolateyInstall\license\chocolatey.license.xml" -Force +'@ + +Set-Content -Path $PackageDirectory\chocolatey-license.nuspec -Encoding UTF8 -Value @' + + + + chocolatey-license + 1.0.0 + Chocolatey License + Chocolatey Software, Inc + chocolatey license + Installs the Chocolatey commercial license file. + This package ensures installation of the Chocolatey commercial license file. +This should be installed internally prior to installing other packages, directly after Chocolatey is installed and prior to installing `chocolatey.extension` and `chocolatey-agent`. +The order for scripting is this: +* chocolatey +* chocolatey-license +* chocolatey.extension +* chocolatey-agent +If items are installed in any other order, it could have strange effects or fail. + + + + + + +'@.Trim() + +# Update the license +Copy-Item -Path $LicensePath -Destination $ToolsDir\chocolatey.license.xml -Force + +# Get license expiration date and node count +[xml]$licenseXml = Get-Content -Path $LicensePath +$licenseExpiration = [datetimeoffset]::Parse("$($licenseXml.SelectSingleNode('/license').expiration) +0") +$null = $licenseXml.license.name -match "(?<=\[).*(?=\])" +$licenseNodeCount = $Matches.Values -replace '\s[A-Za-z]+','' + +if ($licenseExpiration -lt [datetimeoffset]::UtcNow) { + Write-Warning "THE LICENSE FILE AT '$LicensePath' is EXPIRED. This is the file used by this script to generate this package, not at '$licensePackageFolder'" + Write-Warning "Please update the license file correctly in the environment FIRST, then rerun this script." + throw "License is expired as of $($licenseExpiration.ToString()). Please use an up to date license." +} + +if (-not $LicensePackageVersion) { + $LicensePackageVersion = ($licenseExpiration | Get-Date -Format 'yyyy.MM.dd') + '.' + "$licenseNodeCount" +} + +# Pack everything up +choco pack $WorkingDirectory\chocolatey-license\chocolatey-license.nuspec --output-directory="$WorkingDirectory" --version="$LicensePackageVersion" +``` + +## Uploading the License Package + +We now need to upload this new package to the Nexus repository. Open a PowerShell window and run the following code (which will prompt you for information for values are not set): + +```powershell +if (-not $FQDN) { + $FQDN = "$(Read-Host -Prompt 'Please enter the FQDN for the Chocolatey for Business Azure Environment application')" + if (([uri]$FQDN).Host) {$FQDN = ([uri]$FQDN).Host} +} +if (-not $NexusApiKey) { + $NexusApiKey = "$(Read-Host -Prompt 'Please enter the API Key to be used to push Chocolatey packages to Nexus')" +} + +$LicensePackage = (Get-Item $env:Temp\ChocolateyLicensedPackage\*.nupkg)[-1] +choco push $LicensePackage.FullName --source="https://$($FQDN)/nexus/repository/ChocolateyInternal/" --api-key="$NexusApiKey" --force +``` + +## Pushing the New License to Nodes + +You can either rely on automation to push this package (and updated license) to your nodes, or refer to to trigger a deployment manually. diff --git a/src/content/docs/en-us/c4b-environments/azure/packages.mdx b/src/content/docs/en-us/c4b-environments/azure/packages.mdx new file mode 100644 index 00000000000..5a678e14dd1 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/packages.mdx @@ -0,0 +1,55 @@ +--- +order: 26 +xref: c4b-azure-packages +title: Package Selection +description: A summary of the package offerings for the Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +When deploying the Chocolatey for Business Azure Environment, you are prompted to select . + +This page shows the packages we bundle as recommendations, and discusses how to source other packages to automatically publish to your new Chocolatey for Business Azure Environment. + +## Recommendations + +We provide bundles of packages that are commonly used by Chocolatey for Business customers: + +| Bundle | Contains | +| ------- | ----------------------------------------------------------------- | +| All | Google Chrome
    Mozilla Firefox
    Microsoft Edge
    Microsoft VS Code
    Microsoft PowerShell
    Microsoft Office 365 ProPlus
    Notepad++
    Adobe Reader
    Slack
    Microsoft Teams
    Zoom
    Google Drive
    Microsoft OneDrive
    Skype
    VSCode PowerShell
    Git
    GIMP
    VLC
    SysInternals
    Azure-CLI
    AzCopy
    1password
    PuTTY
    Java Runtime Environment | +| Minimal | Google Chrome
    Microsoft Edge
    Microsoft VS Code
    Microsoft PowerShell
    Microsoft Office 365 ProPlus
    Notepad++
    Adobe Reader
    Slack
    Microsoft Teams
    Zoom | +| None | - | + +You can remove any of these packages from your repository without using them by logging into Nexus, browsing to the `ChocolateyTest` and `ChocolateyInternal` repositories, and deleting the package from each. + +## Custom Packages + +You can add custom packages using the `Specify any other packages` textbox. + +Please provide these as a comma-separated list, e.g. + +```text +nexus-repository, notepadplusplus, sublimetext3 +``` + +> :choco-warning: **WARNING** +> +> We recommend you review and test all packages before internalizing and deploying them from the [Chocolatey Community Repository](https://community.chocolatey.org/packages). + +## Adding Packages Post-Deployment + +You can download and internalize packages after the deployment of your environment. + +To do so, log into Jenkins at `https:///jenkins`, and click the `Schedule a Build...` icon on the right of the `Internalize packages from the Community Repository` job. This will take you to a screen where you can add Package IDs as a semicolon-separated list to the `P_PKG_LIST` parameter, e.g. + +```text +nexus-repository; notepadplusplus; sublimetext3 +``` + +Start the internalize job by clicking `Build`. + +The specified packages will then be downloaded and pushed to your ChocolateyTest repository, ready for testing, and then be promoted to the ChocolateyInternal repository either by you or by the `Update production repository` job. + +There are further details on these default jobs . diff --git a/src/content/docs/en-us/c4b-environments/azure/rdp.mdx b/src/content/docs/en-us/c4b-environments/azure/rdp.mdx new file mode 100644 index 00000000000..58ac5ca076f --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/rdp.mdx @@ -0,0 +1,135 @@ +--- +order: 28 +xref: c4b-azure-rdp +title: RDP Access +description: A guide to accessing RDP in the Chocolatey for Business Azure Environment +--- +import Xref from '@components/Xref.astro'; + +## Summary + +After deploying a Chocolatey for Business Azure Environment, you may wish to link the machine to an existing Active Directory domain or install monitoring software. This page will show you how to gain access to the primary VM within the environment via Remote Desktop Protocol (RDP). + +We will assume you know . In order to connect, you need the VM username and password (stored in the deployed Azure Key Vault). + +## Azure Portal + +We need to add a publicly accessible IP address to the VM, and add a rule to the Network Security Group (NSG) to allow connections. + +First we will add the IP address: + +1. In the [Azure Portal](https://portal.azure.com), navigate to the Resource Group containing your deployed Chocolatey for Business Azure Environment. +1. Select the VM's network interface (which should be called `choco-vm-nic` by default), and open the `IP configurations` panel. + + ![Open IP Configurations](/images/c4b-azure/Rdp-IpConfiguration.png) + +1. Select the IP configuration (`ipconfig1` by default), and under `Public IP address settings` click `Associate`. + + ![Create IP Address](/images/c4b-azure/Rdp-IpCreation.png) + +1. Click `Create new`, and create a basic IP address. For future examples, I have named this IP `choco-vm-ip`. + + | Key | Value | + | ------------------- | -------------------------------- | + | Name | choco-vm-ip _(or similar)_ | + | Sku | Basic | + | Assignment | Dynamic | +1. Click `Save`. + +On returning to the network interface overview, a `Public IP address` should now be visible. Make a note of the value. + +Now we will add a rule to the NSG. If you do not already know your current public IP address, you can find out by visiting [ipconfig.me](https://ifconfig.me/ip). + +1. Navigate back to your Resource Group in the Azure Portal +1. Select the `Network security group`, and open the `Inbound security rules` panel. + + ![Create IP Address](/images/c4b-azure/Rdp-NsgRuleAddition.png) + +1. Click `Add` and fill in at least the following details: + + | Key | Value | + | ------------------- | -------------------------------- | + | Service | RDP | + | Source | IP Addresses | + | Source IP addresses | _Your current public IP address_ | + | Name | RDPAccess _(or similar)_ | +1. Click `Add` at the bottom of the panel + +You should now be able to try + +## PowerShell + +For the sake of this section, we will assume that you have installed an up-to-date version of [Az modules](https://www.powershellgallery.com/packages/Az) and your session is authenticated with an account that has access to your Chocolatey for Business Azure Environment. We also assume that you haven't made significant modifications to the deployed resources. + +To begin, we need to create a Public IP address for the VM. + +```powershell +if (-not $ResourceGroupName) { + $ResourceGroupName = Read-Host 'Enter the ResourceGroupName' +} + +# There should only be one network interface in the resource group. +if (-not ($NI = Get-AzNetworkInterface -ResourceGroupName $ResourceGroupName -Name *-nic)) { + Write-Error "No Network Interface matching '*-nic' found in '$($ResourceGroupName)'. Please ensure deployment is complete." +} + +if (-not $NI.IpConfigurations[0].PublicIpAddress.Id) { + # If there is no public IP address assigned, we create one. + if (-not ($VMPublicIp = Get-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Name 'TempIP')) { + $ResourceGroup = Get-AzResourceGroup -Name $ResourceGroupName + $VMPublicIp = New-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Name 'TempIP' -Location $ResourceGroup.Location -AllocationMethod Dynamic + } + + # And assign it to the VM's network interface + $NI.IpConfigurations[0].PublicIpAddress = $VMPublicIp + $NI = Set-AzNetworkInterface -NetworkInterface $NI +} +``` + +We should then create a NSG rule to allow traffic from our current IP to the VM over the port used for RDP (3389). If you want to create the rule for another IP address, you should change the value of `$IPAddress` before running the `Add` and `Set` commands. + +```powershell +if (-not $ResourceGroupName) { + $ResourceGroupName = Read-Host 'Enter the ResourceGroupName' +} +# Look up your current Public IP address +$IPAddress = (Invoke-WebRequest -Uri "https://ifconfig.me/ip").Content + +# Find the deployed Network Security Group +$Group = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName + +# And add a rule allowing RDP from your current Public IP address +$RdpRule = @{ + Name = "$($env:UserName)-RDP" + Direction = 'Inbound' + Priority = (($Group.SecurityRules.Priority | Sort-Object)[0] - 1) + Access = 'Allow' + SourceAddressPrefix = $IPAddress + SourcePortRange = '*' + DestinationAddressPrefix = '*' + DestinationPortRange = '3389' + Protocol = 'TCP' +} +$null = Add-AzNetworkSecurityRuleConfig @RdpRule -NetworkSecurityGroup $Group +$null = Set-AzNetworkSecurityGroup -NetworkSecurityGroup $Group +``` + +Finally, you can find the IP address to connect to by running the following code: + +```powershell +if (-not $ResourceGroupName) { + $ResourceGroupName = Read-Host 'Enter the ResourceGroupName' +} +# Look up the new Public IP address for the VM's network interface +$NI = Get-AzNetworkInterface -ResourceGroupName $ResourceGroupName -Name *-nic +$IPAddress = Get-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Name $NI.IpConfigurations.PublicIpAddress.Id.Split('/')[-1].IPAddress + +Write-Host "The IP Address to connect to is $($IPAddress)" +``` + +## Connecting to the VM + +> :choco-info: **NOTE** +> It can sometimes take a few minutes for the Network Security Group rules to be updated. + +Finally, use the IP address that we found in the previous steps to . diff --git a/src/content/docs/en-us/c4b-environments/azure/release-notes.mdx b/src/content/docs/en-us/c4b-environments/azure/release-notes.mdx new file mode 100644 index 00000000000..aa68ef59e31 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/azure/release-notes.mdx @@ -0,0 +1,400 @@ +--- +order: 10 +xref: c4b-azure-release-notes +title: Release Notes +description: Release Notes for the Chocolatey for Business Azure Environment +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-for-business-azure-environment-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-for-business-azure-environment-twitter.png +--- +import Xref from '@components/Xref.astro'; + +# Chocolatey for Business Azure Environment Release Notes + +> :choco-info: **NOTE** +> +> Issue links may not be publicly available at this time. + +## 0.21.0 (February 8, 2024) \{#v0.21.0} + +### Breaking Change + +- Trim the list of included Jenkins plugins - see [#103](https://github.com/chocolatey/c4b-azure/issues/103). + +### Improvements + +- Setup Nexus Using NuGet V3 Repositories - see [#145](https://github.com/chocolatey/c4b-azure/issues/145). +- Update to Latest Packages - see [#154](https://github.com/chocolatey/c4b-azure/issues/154). +- Update Jenkins Java Dependency - see [#155](https://github.com/chocolatey/c4b-azure/issues/155). + +### Bundled Version Update + +| Package | Version | +|--------------------------------|---------------| +| chocolatey-agent | 2.1.2 | +| chocolatey-management-database | 0.12.0 | +| chocolatey-management-service | 0.12.0 | +| chocolatey-management-web | 0.12.0 | +| chocolatey.extension | 6.1.2 | +| dotnet-6.0-aspnetruntime | 6.0.26 | +| dotnet-6.0-runtime | 6.0.26 | +| dotnet-aspnetcoremodule-v2 | 16.0.23339 | +| jenkins | 2.426.3 | +| nexus-repository | 3.64.0.4 | +| Temurin11jre | N/A (Removed) | +| Temurin21jre | 21.0.1.1200 (New) | +| vcredist140 | 14.38.33135 | + +## 0.20.0 (August 17, 2023) \{#august-17-2023} + +### Improvements + +- Update to Application Gateway v2 - see [#89](https://github.com/chocolatey/c4b-azure/issues/89). +- Accessing Application Gateway Back-end Health Statistics - see [#92](https://github.com/chocolatey/c4b-azure/issues/92). +- Update from Basic Public IP SKU to Standard - see [#108](https://github.com/chocolatey/c4b-azure/issues/108). +- Update to Latest Packages - see [#148](https://github.com/chocolatey/c4b-azure/issues/148). +- Upgrade to AppGateway v2 - see [#149](https://github.com/chocolatey/c4b-azure/pull/149). + +### Bundled Version Update + +| Package | Version | +|----------------------------|---------------| +| chocolatey | 2.2.2 | +| dotnet-6.0-aspnetruntime | 6.0.20 | +| dotnet-6.0-runtime | 6.0.20 | +| dotnet-aspnetcoremodule-v2 | 16.0.23172 | +| jenkins | 2.401.3 | +| nexus-repository | 3.58.1.2 | +| Temurin11jre | 11.0.20.800 | +| Temurinjre | N/A (Removed) | + +## 0.19.0 (July 4, 2023) \{#july-4-2023} + +### Feature + +- Update environment deployment to support Chocolatey CLI v2.x - see [#135](https://github.com/chocolatey/c4b-azure/issues/135). + +### Bug Fixes + +- Fix - VM Unable to Start Due to Missing Secret - see [#121](https://github.com/chocolatey/c4b-azure/issues/121). +- Fix - Jenkins Jobs failing when executed with Chocolatey v2.x installed - see [#134](https://github.com/chocolatey/c4b-azure/issues/134). + +### Improvement + +- Update to 2.1.0 and 6.1.0 of Chocolatey products - see [#141](https://github.com/chocolatey/c4b-azure/issues/141). + +### Bundled Version Update + +| Package | Version | +|-------------------------------------|---------------| +| chocolatey | 2.1.0 | +| chocolatey.extension | 6.1.0 | +| chocolatey-agent | 2.1.0 | +| chocolateygui | 2.1.0 | +| chocolateygui.extension | 2.0.0 | +| chocolatey-licensed-jenkins-scripts | 0.1.1 (New) | +| Temurinjre | 20.0.1.900 | +| vcredist140 | 14.36.32532 | + +## 0.18.1 (May 25, 2023) \{#may-25-2023} + +### Bug Fix + +- Fix - Updating Jenkins breaks AppGateway Health Checks - see [#126](https://github.com/chocolatey/c4b-azure/issues/126). + +### Improvements + +- Update Chocolatey software components to the latest available versions - see [#128](https://github.com/chocolatey/c4b-azure/issues/128). +- Update ARM Template Resource API Versions - see [#129](https://github.com/chocolatey/c4b-azure/issues/129). +- Update Jenkins Plugins and match selection in C4B Quick Start - see [#131](https://github.com/chocolatey/c4b-azure/issues/131). + +### Bundled Version Update + +| Package | Version | +|-------------------------|---------------| +| chocolatey | 1.4.0 | +| chocolatey.extension | 5.0.3 | +| chocolatey-agent | 1.1.2 | +| chocolateygui | 1.1.3 | +| chocolateygui.extension | 1.0.3 | +| jenkins | 2.387.2 | +| jenkins-set-prefix.hook | 1.0.0 (New) | +| nexus-repository | 3.54.1.01 | +| Temurin11jre | 11.0.19.700 | + +## 0.18.0 (February 21, 2023) \{#february-21-2023} + +### Improvement + +- Update Chocolatey software components to the latest available versions - see [#124](https://github.com/chocolatey/c4b-azure/issues/124) + +### Bundled Version Update + +| Package | Version | +|---------------|---------------| +| chocolatey | 1.3.0 | +| chocolateygui | 1.1.1 | + +## 0.17.1 (February 3, 2023) \{#february-3-2023} + +### Improvement + +- Update Chocolatey software components to the latest available versions - see [#123](https://github.com/chocolatey/c4b-azure/issues/123) + +### Bundled Version Update + +| Package | Version | +|------------------------------------|---------------| +| chocolatey | 1.2.1 | +| chocolatey-windowsupdate.extension | 1.0.5 | +| chocolatey.extension | 5.0.1 | +| nexus-repository | 3.43.0.01 | +| Temurin11jre | 11.0.18.1000 | +| vcredist140 | 14.32.31332 | + +## 0.17.0 (October 28, 2022) \{#october-28-2022} + +### Improvements + +- Update Chocolatey software components to the latest available versions - see [#110](https://github.com/chocolatey/c4b-azure/issues/110) +- Jenkins Job should account for multiple new releases when syncing from test to prod repository - see [#111](https://github.com/chocolatey/c4b-azure/issues/111) + +### Bundled Version Update + +| Package | Version | +|--------------------------------|---------------| +| chocolatey | 1.2.0 | +| chocolatey.extension | 5.0.0 | +| chocolatey-agent | 1.1.1 | +| chocolateygui | 1.1.0 | +| chocolateygui.extension | 1.0.1 | +| chocolatey-management-database | 0.10.1 | +| chocolatey-management-service | 0.10.1 | +| chocolatey-management-web | 0.10.1 | + +## 0.16.0 (September 7, 2022) \{#september-7-2022} + +### Improvements + +- Update Chocolatey Central Management to 0.10.0 and include new dependencies - see [#94](https://github.com/chocolatey/c4b-azure/issues/94) +- Update chocolatey.extension to 4.2.0 - see [#99](https://github.com/chocolatey/c4b-azure/issues/99) +- Update chocolatey-agent to 1.1.0 - see [#100](https://github.com/chocolatey/c4b-azure/issues/100) +- Deployment should fail if installation of key components is not successful - see [#101](https://github.com/chocolatey/c4b-azure/issues/101) + +### Bundled Version Update + +| Package | Version | +|--------------------------------|---------------------| +| aspnetcore-runtimepackagestore | N/A (Removed) | +| chocolatey-agent | 1.1.0 | +| chocolatey-management-database | 0.10.0 | +| chocolatey-management-service | 0.10.0 | +| chocolatey-management-web | 0.10.0 | +| chocolatey.extension | 4.2.0 | +| dotnet-6.0-aspnetruntime | 6.0.5 (New) | +| dotnet-6.0-runtime | 6.0.5 (New) | +| dotnet-aspnetcoremodule-v2 | 16.0.22108 (New) | +| dotnetcore-sdk | N/A (Removed) | +| dotnetcore-windowshosting | N/A (Removed) | +| dotnetfx | 4.8.0.20220524 | +| KB2533623 | N/A (Removed) | +| nexus-repository | 3.41.1.01 | +| Temurin11jre | 11.0.16.10100 | +| vcredist140 | 14.28.29913 | +| vcredist2015 | N/A (Removed) | + +## 0.15.0 (May 18, 2022) \{#may-18-2022} + +Updates the bundled versions of: + +- [Chocolatey 1.1.0](https://docs.chocolatey.org/en-us/choco/release-notes#march-30-2022) +- [Chocolatey Licensed Extension 4.1.1](https://docs.chocolatey.org/en-us/licensed-extension/release-notes#april-11-2022) +- [Chocolatey Central Management 0.8.0](https://docs.chocolatey.org/en-us/central-management/release-notes#february-28-2022) +- [Chocolatey GUI 1.0.0](https://docs.chocolatey.org/en-us/chocolatey-gui/release-notes#march-21-2022) +- [Chocolatey GUI Licensed Extension 1.0.0](https://docs.chocolatey.org/en-us/chocolatey-gui-licensed-extension/release-notes#march-21-2022) +- [Chocolatey Agent 1.0.0](https://docs.chocolatey.org/en-us/agent/release-notes#march-21-2022) + +### Features + +- Provide easy mechanism for update Certificate - see [#78](https://github.com/chocolatey/c4b-azure/issues/78) + +### Improvements + +- Update to the latest Chocolatey components - see [#77](https://github.com/chocolatey/c4b-azure/issues/77) +- Add Cleanup to Get-UpdatedPackage Jenkins Script - see [#75](https://github.com/chocolatey/c4b-azure/issues/75) +- Packages from the Licensed Feed aren't updated by existing Jenkins Jobs - see [#72](https://github.com/chocolatey/c4b-azure/issues/72) +- Bundled Packages contain x86 and x64 Installers - see [#67](https://github.com/chocolatey/c4b-azure/issues/67) +- Jenkins plugins complain that Jenkins is outdated - see [#65](https://github.com/chocolatey/c4b-azure/issues/65) + +### Documentation + +- Rename repository to match new name - see [#69](https://github.com/chocolatey/c4b-azure/issues/69) +- Allow users to manage their licenses - see [#62](https://github.com/chocolatey/c4b-azure/issues/62) + +### Bundled Version Update + +| Package | Version | +|------------------------------------|--------------------| +| chocolatey | 1.1.0 | +| chocolatey-compatibility.extension | 1.0.0 (new) | +| chocolatey-core.extension | 1.4.0 | +| chocolatey-agent | 1.0.0 | +| chocolatey-extension | 4.1.1 | +| chocolateygui | 1.0.0 | +| chocolateygui.extension | 1.0.0 | +| chocolatey-management-database | 0.8.0 | +| chocolatey-management-service | 0.8.0 | +| chocolatey-management-web | 0.8.0 | +| jenkins | 2.332.3 | +| nexus-repository | 3.38.3.01 | +| Temurinjre | 18.0.1.1000 | +| Temurin11jre | 11.0.15.1000 (new) | +| vcredist140 | 14.32.31326 | + +## 0.14.0 (February 14, 2022) \{#february-14-2022} + +Updates the bundled versions of: + +- [Chocolatey 0.12.1](https://docs.chocolatey.org/en-us/choco/release-notes#january-25th-2022) +- [Chocolatey Central Management 0.7.0](https://docs.chocolatey.org/en-us/central-management/release-notes#november-17th-2021) +- [Chocolatey GUI 0.20.0](https://docs.chocolatey.org/en-us/chocolatey-gui/release-notes#february-10-2022). + +### Breaking Changes + +- Internalize Jenkins Plugins - see [#49](https://github.com/chocolatey/c4b-azure/issues/49) + In scenarios where the Jenkins plugins were unavailable to download, the deployment would previously fail. + We have now changed it to contain all of the plugins we require, and to _attempt_ to download the rest. + This may result in an environment that doesn't fail deployment, but is unlike previous successful deployments. + +### Features + +- Upgrades bundled software, as above - see [#60](https://github.com/chocolatey/c4b-azure/issues/60) +- Internalizes packages on first run with the deployed Jenkins job - see [#46](https://github.com/chocolatey/c4b-azure/issues/46) +- Adds commas as a valid separator for Jenkins params - see [#50](https://github.com/chocolatey/c4b-azure/issues/50) +- Adds a HTTP->HTTPS redirect - see [#42](https://github.com/chocolatey/c4b-azure/issues/42) +- Changes the deployed VM size to `B4ms` - see [#55](https://github.com/chocolatey/c4b-azure/issues/55) + +### Bug Fixes + +- Fixes an issue with generated passwords containing quotes - see [#61](https://github.com/chocolatey/c4b-azure/issues/61) +- Deployment now correctly installs internalized version of Chocolatey - see [#59](https://github.com/chocolatey/c4b-azure/issues/59) + +### Bundled Version Update + +| Package | Version | +|------------------------------------|-----------------| +| chocolatey | 0.12.1 | +| chocolatey-agent | 0.12.1 | +| chocolatey-extension | 3.1.0 | +| chocolatey-dotnetfx.extension | 1.0.1 | +| chocolateygui | 0.20.0 | +| chocolateygui.extension | 0.4.0 | +| chocolatey-management-database | 0.7.0 | +| chocolatey-management-service | 0.7.0 | +| chocolatey-management-web | 0.7.0 | +| dotnetcore-sdk | 3.1.410 | +| dotnetfx | 4.8.0.20190930 | +| nexus-repository | 3.37.3.02 | +| Temurinjre | 17.0.1.1200 | +| vcredist140 | 14.30.30708 | +| AdoptOpenJDKjre | N/A (Removed) | +| DotNet4.5.2 | N/A (Removed) | + +## 0.13.2 (September 14, 2021) \{#september-14-2021} + +Updates the bundled version of CCM to the [recently released 0.6.2](https://docs.chocolatey.org/en-us/central-management/release-notes#august-26th-2021). + +### Features + +- Upgrades CCM to 0.6.2 - see [#51](https://github.com/chocolatey/c4b-azure/issues/51) + +### Bug Fixes + +- Fixes an issue with package internalization - see [#54](https://github.com/chocolatey/c4b-azure/issues/54) + +### Documentation + +- Adds a guide to enabling RDP [here](https://docs.chocolatey.org/en-us/quick-deployment/azure/rdp) - see [#52](https://github.com/chocolatey/c4b-azure/issues/52) +- Adds a guide for onboarding clients [here](https://docs.chocolatey.org/en-us/quick-deployment/azure/client-setup) - see [#53](https://github.com/chocolatey/c4b-azure/issues/53) + +### Bundled Version Updates + +| Package | Version | +|------------------------------------|-----------------| +| chocolatey-management-database | 0.6.2 | +| chocolatey-management-service | 0.6.2 | +| chocolatey-management-web | 0.6.2 | +| dotnetcore-sdk | 3.1.410 | +| vcredist140 | 14.29.30133 | + +## 0.13.1 (August 13, 2021) \{#august-13-2021} + +Update the bundled version of CCM to the [recently released 0.6.1](https://docs.chocolatey.org/en-us/central-management/release-notes#august-5th-2021). + +### Features + +- Updates CCM to version 0.6.1, and updates dependencies +- Validates Chocolatey Licence _before_ deploying resources +- Ensured Chocolatey Agent is installed and checking into the CCM installation + +### Bug Fixes + +- Uses `Restart-WebAppPool` instead of `iisreset`, which fixes a rare issue that failed deployments complaining of insufficient permissions + +### Improvements + +- Changes the available base packages to offer packages not available in the bundles + +### Bundled Version Updates + +| Package | Version | +|------------------------------------|-----------------| +| aspnetcore-runtimepackagestore | 3.1.16 | +| chocolatey-management-database | 0.6.1 | +| chocolatey-management-service | 0.6.1 | +| chocolatey-management-web | 0.6.1 | +| dotnetcore-windowshosting | 3.1.16 | +| vcredist140 | 14.29.30040 | + +## 0.11.5 (July 29, 2021) \{#july-29-2021} + +The first released version! Available on the [Azure Marketplace](https://portal.azure.com/#create/chocolateysoftwareinc1605695330527.c4b_azure_qdec4b-qde) from 2021-07-29. + +### Features + +- QDE Deployment via the Azure Marketplace +- Deploys CCM, Nexus, and Jenkins to a VM +- Takes an SSL certificate and FQDN and configures the environment appropriately + +### Documentation + +- Adds basic docs [here](https://docs.chocolatey.org/en-us/quick-deployment/azure/) + +### Bundled Packages + +| Package | Version | +|------------------------------------|---------------------| +| AdoptOpenJDKjre | 16.0.1.900 | +| aspnetcore-runtimepackagestore | 2.2.7 | +| chocolatey | 0.10.15 | +| chocolatey.extension | 2.1.1 | +| chocolatey-agent | 0.11.2 | +| chocolatey-core.extension | 1.3.5.1 | +| chocolateygui | 0.18.1 | +| chocolateygui.extension | 0.2.1 | +| chocolatey-management-database | 0.5.1 | +| chocolatey-management-service | 0.5.1 | +| chocolatey-management-web | 0.5.1 | +| chocolatey-windowsupdate.extension | 1.0.4 | +| DotNet4.5.2 | 4.5.2.20140902 | +| dotnetcore-windowshosting | 2.2.7 | +| jenkins | 2.222.4 | +| KB2533623 | 2.0.0 | +| KB2919355 | 1.0.20160915 | +| KB2919442 | 1.0.20160915 | +| KB2999226 | 1.0.20181019 | +| KB3033929 | 1.0.5 | +| KB3035131 | 1.0.3 | +| KB3063858 | 1.0.0 | +| nexus-repository | 3.31.1.01 | +| vcredist140 | 14.29.30037 | +| vcredist2015 | 14.0.24215.20170201 | diff --git a/src/content/docs/en-us/c4b-environments/index.mdx b/src/content/docs/en-us/c4b-environments/index.mdx new file mode 100644 index 00000000000..d32df6ae723 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/index.mdx @@ -0,0 +1,8 @@ +--- +order: 145 +xref: c4b-envs +title: Chocolatey for Business Environments +description: Information about supported Chocolatey for Business Environments +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/certificate-renewal.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/certificate-renewal.mdx new file mode 100644 index 00000000000..853b9ccf9d1 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/certificate-renewal.mdx @@ -0,0 +1,213 @@ +--- +order: 40 +xref: quick-start-guide-cert-renewal +title: Certificate Renewal +description: Certificate renewal docs for Nexus and Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + +This document is meant to serve as a guide for where to look when needing to renew your SSL certificate(s) for the Nexus and Chocolatey Central Management components of the quick start environment. + +## Set-NexusCert.ps1 + +This script should be saved on your repository server at `C:\choco-setup\scripts\Set-NexusCert.ps1`. + +You can [download the Set-NexusCert.ps1 file directly](https://github.com/chocolatey/choco-quickstart-scripts/blob/main/scripts/Set-NexusCert.ps1), or copy the below code and save it manually. + +```powershell +<# +.SYNOPSIS +Certificate renewal script for Nexus. + +.DESCRIPTION +Helps edit the java keystore file for Nexus when doing a certificate renewal. + +.PARAMETER Thumbprint +Thumbprint value of certificate you want to run Nexus on. Make sure certificate is located at Cert:\LocalMachine\TrustedPeople\ + +.PARAMETER NexusPort +Port you have Nexus configured to run on. + +.EXAMPLE +PS> .\Set-NexusCert.ps1 -Thumbprint 'Your_Certificate_Thumbprint_Value' -NexusPort 'Port_Number' +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [string] + $Thumbprint, + + [Parameter()] + [string] + $NexusPort = '8443' +) + +begin { + if($host.name -ne 'ConsoleHost') { + Write-Warning "This script cannot be ran from within PowerShell ISE" + Write-Warning "Please launch powershell.exe as an administrator, and run this script again" + break + } +} + +process { + +$ErrorActionPreference = 'Stop' + +if ((Test-Path C:\ProgramData\nexus\etc\ssl\keystore.jks)) { + Remove-Item C:\ProgramData\nexus\etc\ssl\keystore.jks -Force +} + +$KeyTool = "C:\ProgramData\nexus\jre\bin\keytool.exe" +$password = "chocolatey" | ConvertTo-SecureString -AsPlainText -Force +$certificate = Get-ChildItem Cert:\LocalMachine\TrustedPeople\ | Where-Object { $_.Thumbprint -eq $Thumbprint } | Sort-Object | Select-Object -First 1 + +Write-Host "Exporting .pfx file to C:\, will remove when finished" -ForegroundColor Green +$certificate | Export-PfxCertificate -FilePath C:\cert.pfx -Password $password +Get-ChildItem -Path c:\cert.pfx | Import-PfxCertificate -CertStoreLocation Cert:\LocalMachine\My -Exportable -Password $password +Write-Warning -Message "You'll now see prompts and other outputs, things are working as expected, don't do anything" +$string = ("chocolatey" | & $KeyTool -list -v -keystore C:\cert.pfx) -match '^Alias.*' +$currentAlias = ($string -split ':')[1].Trim() + +$passkey = '9hPRGDmfYE3bGyBZCer6AUsh4RTZXbkw' +& $KeyTool -importkeystore -srckeystore C:\cert.pfx -srcstoretype PKCS12 -srcstorepass chocolatey -destkeystore C:\ProgramData\nexus\etc\ssl\keystore.jks -deststoretype JKS -alias $currentAlias -destalias jetty -deststorepass $passkey +& $KeyTool -keypasswd -keystore C:\ProgramData\nexus\etc\ssl\keystore.jks -alias jetty -storepass $passkey -keypass chocolatey -new $passkey + +$xmlPath = 'C:\ProgramData\nexus\etc\jetty\jetty-https.xml' +[xml]$xml = Get-Content -Path 'C:\ProgramData\nexus\etc\jetty\jetty-https.xml' +foreach ($entry in $xml.Configure.New.Where{ $_.id -match 'ssl' }.Set.Where{ $_.name -match 'password' }) { + $entry.InnerText = $passkey +} + +$xml.OuterXml | Set-Content -Path $xmlPath + +Remove-Item C:\cert.pfx + +$nexusPath = 'C:\ProgramData\sonatype-work\nexus3' +$configPath = "$nexusPath\etc\nexus.properties" + +(Get-Content $configPath) | Where-Object {$_ -notmatch "application-port-ssl="} | Set-Content $configPath + +$configStrings = @('jetty.https.stsMaxAge=-1', "application-port-ssl=$NexusPort", 'nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml') +$configStrings | ForEach-Object { + if ((Get-Content -Raw $configPath) -notmatch [regex]::Escape($_)) { + $_ | Add-Content -Path $configPath + } +} + +Restart-Service nexus + +Write-Host -BackgroundColor Black -ForegroundColor DarkGreen "The script has successfully run and the Nexus service is now rebooting for the changes to take effect." +} +``` + +### What does this script do? + +- Prompts for Thumbprint value. This is the certificate thumbprint value you wish to associate to your Nexus instance. +- Optionally you can specify `-Port` with the port number you want Nexus to run over. +- The script will remove your previous keystore.jks file +- Create a new keystore.jks file based on your certificate +- Re-write the nexus.properties file to use the correct port, by default will use port 8443 unless specified in command. +- Restart the Nexus service for changes to take effect and re-load web UI. + +### Script Examples + +```powershell +.\Set-NexusCert.ps1 -Thumbprint 'Your_Certificate_Thumbprint_Value' -NexusPort 'Port_Number' +``` + +```powershell +.\Set-NexusCert.ps1 -Thumbprint 'Your_Certificate_Thumbprint_Value' +``` + +## Set-CCMCert.ps1 + +This script should be saved on your repository server at `C:\choco-setup\scripts\Set-CCMCert.ps1`. + +You can [download the Set-CCMCert.ps1 file directly](https://github.com/chocolatey/choco-quickstart-scripts/blob/main/scripts/Set-CCMCert.ps1), or copy the below code and manually save it. + +```powershell +<# +.SYNOPSIS +Certificate renewal script for Chocolatey Central Management(CCM) + +.DESCRIPTION +This script will go through and renew the certificate association with both the Chocolatey Central Management Service and IIS Web hosted dashboard. + +.PARAMETER CertificateThumbprint +Thumbprint value of the certificate you would like the Chocolatey Central Management Service and Web to run on. +Please make sure the certificate is located in both the Cert:\LocalMachine\TrustedPeople\ and Cert:\LocalMachine\My certificate stores. + +.EXAMPLE +PS> .\Set-CCMCert.ps1 -CertificateThumbprint 'Your_Certificate_Thumbprint_Value' +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [String] + $CertificateThumbprint +) + +begin { + if($host.name -ne 'ConsoleHost') { + Write-Warning "This script cannot be ran from within PowerShell ISE" + Write-Warning "Please launch powershell.exe as an administrator, and run this script again" + break + } +} + +process { + + #Stop Central Management components + Stop-Service chocolatey-central-management + Get-Process chocolateysoftware.chocolateymanagement.web* | Stop-Process -ErrorAction SilentlyContinue -Force + + #Remove existing bindings + Write-Verbose "Removing existing bindings" + netsh http delete sslcert ipport=0.0.0.0:443 + + #Add new CCM Web IIS Binding + Write-Verbose "Adding new IIS binding to Chocolatey Central Management" + $guid = [Guid]::NewGuid().ToString("B") + netsh http add sslcert ipport=0.0.0.0:443 certhash=$CertificateThumbprint certstorename=MY appid="$guid" + Get-WebBinding -Name ChocolateyCentralManagement | Remove-WebBinding + New-WebBinding -Name ChocolateyCentralManagement -Protocol https -Port 443 -SslFlags 0 -IpAddress '*' + + #Write Thumbprint to CCM Service appsettings.json + $appSettingsJson = 'C:\ProgramData\chocolatey\lib\chocolatey-management-service\tools\service\appsettings.json' + $json = Get-Content $appSettingsJson | ConvertFrom-Json + $json.CertificateThumbprint = $CertificateThumbprint + $json | ConvertTo-Json | Set-Content $appSettingsJson -Force + + #Try Restarting CCM Service + try { + Start-Service chocolatey-central-management -ErrorAction Stop + } + catch { + #Try again... + Start-Service chocolatey-central-management -ErrorAction SilentlyContinue + } + finally { + if ((Get-Service chocolatey-central-management).Status -ne 'Running') { + Write-Warning "Unable to start Chocolatey Central Management service, please start manually in Services.msc" + } + } +} +``` + +### What does this script do? + +- The script will prompt for certificate thumbprint value. Please enter the thumbprint value of the certificate you wish to have the IIS endpoint of Chocolatey Central Management run over. +- Stops the chocolatey-central-management windows service +- Removes any existing binding for the site running over port 443. +- Adds a new IIS binding with the new certificate info. +- Writes the thumbprint value given to the appsettings.json file of the Chocolatey Central Management service to run over. +- Brings up the Chocolatey Central Management service and web components once configured. + +### Script Example + +```powershell +.\Set-CCMCert.ps1 -CertificateThumbprint 'Your_Certificate_Thumbprint_Value' +``` diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/chocolatey-for-business-quick-start-guide.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/chocolatey-for-business-quick-start-guide.mdx new file mode 100644 index 00000000000..8d905f27bd0 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/chocolatey-for-business-quick-start-guide.mdx @@ -0,0 +1,287 @@ +--- +order: 20 +xref: c4b-quick-start-guide +title: C4B Quick Start Guide +description: Get up and running quickly with Chocolatey for Business +--- +import Xref from '@components/Xref.astro'; + +Welcome to the Chocolatey for Business (C4B) Quick-Start Guide! This guide will walk you through the basics of configuring a C4B Server on your VM infrastructure of choice. This includes the Chocolatey Licensed components, a NuGet V2 Repository (Nexus), Chocolatey Central Management (CCM), and an Automation Pipeline (Jenkins). + +> :choco-info: **NOTE** +> +> This quick-start guide is intended for customers who have recently purchased Chocolatey for Business (C4B), or are evaluating C4B as part of a proof-of-concept. +> It is **opinionated**, and thus illustrates only one method of setting up your Chocolatey environment. +> Our goal is to get you up-and-running smoothly and efficiently in order to fully test out the feature set. +> For a more exhaustive reference of possible setup scenarios, you may refer to the . + +If you have any questions or would like to discuss more involved implementations, please feel free to reach out to your Chocolatey representative. + +Let's get started! + +## Components + +
    +Chocolatey for Business Server Components +

    + +As illustrated in the diagram above, there are four main components to a Chocolatey for Business installation: + +1. **C4B Licensed components**: A licensed version of Chocolatey includes: + - Installation of the Chocolatey OSS client package itself (`chocolatey`) + - Chocolatey license file (`chocolatey.license.xml`) installed in the correct directory (`ProgramData\chocolatey\license`) + - Installation of the Chocolatey Licensed extension (`chocolatey.extension`), giving you access to features like Package Builder, Package Internalizer, etc. (full list [here](https://docs.chocolatey.org/en-us/features/)). +

    + +1. **NuGet V2 Repository Server App (Nexus)**: Chocolatey works best with a NuGet V2 repository. This application hosts and manages versioning of your Chocolatey package artifacts, in their enhanced NuGet package (.nupkg) file format. The quick start guide helps you setup [Sonatype Nexus Repository Manager (OSS)](https://www.sonatype.com/products/nexus-repository). + +1. **Chocolatey Central Management (CCM)**: CCM is the Web UI portal for your entire Chocolatey environment. Your endpoints check-in to CCM to report their package status. This includes the Chocolatey packages they have installed, and whether any of these packages are outdated. And now, with CCM Deployments, you can also deploy packages or package updates to groups of endpoints, as well as ad-hoc PowerShell commands. CCM is backed by an MS SQL Database. This guide will set up MS SQL Express for you. + +1. **Automation Pipeline (Jenkins)**: A pipeline tool will help you automate repetitive tasks, such checking for updates to a set of Chocolatey Packages from the Chocolatey Community Repository (CCR). If updates exist, the pipeline task will auto-internalize your list of packages, and push them into your NuGet repository for you. This guide will help you set up Jenkins as your automation pipeline. + +## Requirements + +> :choco-danger: **ATTENTION** +> +> The server used for your Chocolatey For Business environment should be a **_fresh, dedicated machine_** that serves no other purpose in your organization. Installation of C4B on a server running mission critical enterprise applications is **NOT** recommended. + +Below are the minimum requirements for setting up your C4B server via this guide: + +- Windows Server 2019+ (ideally, Windows Server 2022) +- 4+ CPU cores (more preferred) +- 16 GB+ RAM (8GB as a bare minimum; 4GB of RAM is reserved specifically for Nexus) +- 500 GB+ of free space for local NuGet package artifact storage (more is better, and you may have to grow this as your packages and versions increase) +- Open outgoing (egress) Internet access +- Administrator user rights + +## Installation + +### Step 0: Preparation of C4B Server + +> :choco-warning: **WARNING** +> +> This guide utilizes code from a GitHub repository, namely: [choco-quickstart-scripts](https://github.com/chocolatey/choco-quickstart-scripts). Though we explain what each script does in drop-down boxes, please do your due diligence to review this code and ensure it meets your Organizational requirements. + +1. Provision your C4B server on the infrastructure of your choice. + +1. Install all Windows Updates. + +1. If you plan on joining this server to your Active Directory domain, do so now before beginning setup below. + +1. If you plan to use a Purchased/Acquired or Domain SSL certificate, please ensure the CN/Subject value matches the DNS-resolvable Fully Qualified Domain Name (FQDN) of your C4B Server. Place this certificate in the `Local Machine > Personal` certificate store, and ensure that the private key is exportable. + +1. Copy your `chocolatey.license.xml` license file (from the email you received) onto your C4B Server. + +### Step 1: Begin C4B Setup + +> :choco-danger: **IMPORTANT** +> +> All commands should be run from an **elevated** PowerShell window (and **not ISE**), by opening your PowerShell console with the `Run as Administrator` option. + +1. Open a PowerShell console with the `Run as Administrator` option, and paste and run the following code: + + ```powershell + Set-ExecutionPolicy Bypass -Scope Process -Force + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::tls12 + $QuickStart = 'https://raw.githubusercontent.com/chocolatey/choco-quickstart-scripts/main/Start-C4bSetup.ps1' + $Script = [System.Net.Webclient]::new().DownloadString($QuickStart) + $sb = [ScriptBlock]::Create($Script) + & $sb + ``` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Installs Chocolatey client from https://community.chocolatey.org
    • + >
    • Prompts for your C4B license file location, with validation
    • + >
    • Converts your C4B license into a Chocolatey package
    • + >
    • Configures local "choco-setup" directories
    • + >
    • Downloads setup files from "choco-quickstart-scripts" GitHub repo
    • + >
    • Downloads Chocolatey packages required for setup
    • + >
    + >
    + +### Step 2: Nexus Setup + +1. In the same **elevated** PowerShell console as above, paste and run the following code: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Start-C4bNexusSetup.ps1 + ``` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Installs Sonatype Nexus Repository Manager OSS instance
    • + >
    • Cleans up all demo repositories on Nexus
    • + >
    • Creates a "ChocolateyInternal" NuGet repository
    • + >
    • Creates a "ChocolateyTest" NuGet repository
    • + >
    • Creates a "choco-install" raw repository
    • + >
    • Sets up "ChocolateyInternal" on C4B Server as source, with API key
    • + >
    • Adds firewall rule for repository access
    • + >
    • Installs MS Edge, and disables first-run experience
    • + >
    • Outputs data to a JSON file to pass between scripts
    • + >
    + >
    + +### Step 3: CCM Setup + +1. In the same PowerShell Administrator console as above, paste and run the following code: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Start-C4bCcmSetup.ps1 + ``` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Installs MS SQL Express and SQL Server Management Studio (SSMS)
    • + >
    • Creates "ChocolateyManagement" database, and adds appropriate `ChocoUser` permissions
    • + >
    • Installs all 3 CCM packages (database, service, web), with correct parameters
    • + >
    • Outputs data to a JSON file to pass between scripts
    • + >
    + >
    + +### Step 4: Jenkins Setup + +1. In the same **elevated** PowerShell console as above, paste and run the following code: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Start-C4bJenkinsSetup.ps1 + ``` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Installs Jenkins package
    • + >
    • Updates Jenkins plugins
    • + >
    • Configures pre-downloaded Jenkins scripts for Package Internalizer automation
    • + >
    • Sets up pre-defined Jenkins jobs for the scripts above
    • + >
    + >
    + +### Step 5: SSL Setup + +1. In the same **elevated** PowerShell console as above, paste and run the following code: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Set-SslSecurity.ps1 + ``` + + **ALTERNATIVE 1 : Custom SSL Certificate** - If you have your own custom SSL certificate (purchased/acquired, or from your Domain CA), you can paste and run the following script with the `Thumbprint` value of your SSL certificate specified: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Set-SslSecurity.ps1 -Thumbprint '' -Hardened + ``` + + > :choco-warning: **WARNING** + > + > If you are using your own SSL certificate, be sure to place this certificate in the `Local Machine > Personal` certificate store before running the above script, and ensure that the private key is exportable. + + > :choco-info: **NOTE** + > + > You may have noticed the `-Hardened` parameter we've added above. When using a custom SSL certificate, this parameter will further secure access to your C4B Server. A Role and User credential will be configured to limit access to your Nexus repositories. As well, CCM Client and Service Salts are configured to further encrypt your connection between CCM and your endpoint clients. These additional settings are also incorporated into your `Register-C4bEndpoint.ps1` script for onboarding endpoints. We do require you to enable this option if your C4B Server will be Internet-facing, with a FQDN that resolves to a public IP. + + **ALTERNATIVE 2 : Wildcard SSL Certificate** - If you have a wildcard certificate, you will also need to provide a DNS name you wish to use for that certificate: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Set-SslSecurity.ps1 -Thumbprint '' -CertificateDnsName '' -Hardened + ``` + + For example, with a wildcard certificate with a thumbprint of `deee9b2fabb24bdaae71d82286e08de1` you wish to use `chocolatey.foo.org`, the following would be required: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Set-SslSecurity.ps1 -Thumbprint deee9b2fabb24bdaae71d82286e08de1 -CertificateDnsName chocolatey.foo.org -Hardened + ``` + +
    + + >
    + > What does this script do? (click to expand) + >
      + >
    • Adds SSL certificate configuration for Nexus and CCM web portals
    • + >
    • Generates a `Register-C4bEndpoint.ps1` script for you to easily set up endpoint clients
    • + >
    • Outputs data to a JSON file to pass between scripts
    • + >
    • Writes a Readme.html file to the Public Desktop with account information for C4B services
    • + >
    • Auto-opens README, CCM, Nexus, and Jenkins in your web browser
    • + >
    • Removes temporary JSON files used during provisioning
    • + >
    + >
    + + > :choco-info: **NOTE** + > + > A `Readme.html` file will now be generated on your desktop. This file contains login information for all 3 web portals (CCM, Nexus, and Jenkins). This `Readme.html`, along with all 3 web portals, will automatically be opened in your browser. + +### Step 6: Verification + +1. In the same **elevated** PowerShell console as above, paste and run the following code: + + ```powershell + Set-Location "$env:SystemDrive\choco-setup\files" + .\Start-C4bVerification.ps1 -Fqdn '' + ``` + + If you expect services to be available at `chocoserver.yourcompany.com`, then your command would look like: `.\Start-C4bVerification.ps1 -Fqdn 'chocoserver.yourcompany.com'` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Verifies Nexus Repository installation
    • + >
    • Verifies Central Management installation
    • + >
    • Verifies Jenkins installation
    • + >
    • Ensures system firewall is configured
    • + >
    • Ensures Windows Features are installed
    • + >
    • Ensures services are correctly configured
    • + >
    • Ensured README is created
    • + >
    + >
    + +### Step 7: Setting up Endpoints + +1. Find the `Register-C4bEndpoint.ps1` script in the `choco-setup\files\scripts\` directory on your C4B Server. Copy this script to your client endpoint. + +1. Open an **elevated** PowerShell console on your client endpoint, and browse (`cd`) to the location you copied the script above. Paste and run the following code: + + ```powershell + Set-ExecutionPolicy Bypass -Scope Process -Force + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::tls12 + .\Register-C4bEndpoint.ps1 + ``` + + >
    + > What does this script do? (click to expand) + >
      + >
    • Installs Chocolatey client (chocolatey), using a script from your raw "choco-install" repository
    • + >
    • Runs the "ClientSetup.ps1" script from your raw "choco-install" repository, which does the following:
    • + >
    • Licenses Chocolatey by installing the license package (chocolatey-license) created during QDE setup
    • + >
    • Installs the Chocolatey Licensed Extension (chocolatey.extension) without context menus
    • + >
    • Configures "ChocolateyInternal" source
    • + >
    • Disables access to the "chocolatey" public Chocolatey Community Repository (CCR)
    • + >
    • Configures Self-Service mode and installs Chocolatey GUI (chocolateygui) along with its licensed extension (chocolateygui.extension)
    • + >
    • Configures Central Management (CCM) check-in, and opts endpoints into CCM Deployments
    • + >
    + >
    + +### Conclusion + +Congratulations! If you followed all the steps detailed above, you should now have a fully functioning Chocolatey for Business implementation deployed in your environment. + +It is worth mentioning that some customers may have a more bespoke environment, with the presence of proxies and additional configuration management applications. Chocolatey is engineered to be quite flexible, specifically to account for these scenarios. Please refer to the many options for installation referenced on the . Again, If you have any questions or would like to discuss more involved implementations, please feel free to reach out to your Chocolatey representative. + +### See it in Action + +If you'd prefer to watch and follow along, here is a recording of our Chocolatey Team going through this guide live on our Twitch stream: + +

    +

    + +
    +
    +

    diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/firewall-rules.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/firewall-rules.mdx new file mode 100644 index 00000000000..33396ac6450 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/firewall-rules.mdx @@ -0,0 +1,46 @@ +--- +order: 25 +xref: firewall-rules +title: Firewall Rules +description: Firewall rules used by the Quick Start Environment +--- +import Xref from '@components/Xref.astro'; + +## External Firewall Ports (Optional) + +> :choco-warning: **WARNING** +> +> - Performing this incorrectly could cause security issues and possibly cause you to be subjected to copyright law/redistribution. +> Read all of this first. +> - DO NOT OPEN these ports externally until you have done the following: +> - Locked down your repositories to user/pass access. +> - Updated your ClientSetup script within the raw client repository. + +These are ports that need to be opened through the corporate firewall, if users are **not** on VPN and need to install packages from anywhere. + +| Port | Application | +| :---: | :------------------------- | +| 8443 | Nexus Web UI | +| 24020 | Chocolatey Central Management Service | + +## Internal Firewall Ports + +These are the ports that are already opened on Windows Firewall in the Quick Start Environment. + +| Port | Application | +| :---: | :------------ | +| 8443 | Nexus Web UI | +| 443 | Chocolatey Central Management Dashboard | +| 24020 | Chocolatey Central Management Service | + +> :choco-info: **Cloud Hosting Consideration** +> +> If hosting your Quick Start Environment on a cloud provider, such as Microsoft Azure or Amazon Web Services, be sure to set your inbound networking rules appropriately for the VM. + +## FAQ + +### Can I open up the Chocolatey Central Management Service's port to allow machines to report in from anywhere? + +For best results, we recommend using a VPN connection for client check-ins. +The Chocolatey Central Management service connection is authenticated over SSL, but our best practice recommendation is to secure the connection over a VPN as well. +With Chocolatey Central Management v0.3.0+, more security has been put into allowing for checking in over internet connections. We _highly_ recommend setting both a `centralManagementClientCommunicationSaltAdditivePassword` and `centralManagementServiceCommunicationSaltAdditivePassword` Chocolatey configuration value on your client machines and Chocolatey Central Management Service host machine. diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/index.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/index.mdx new file mode 100644 index 00000000000..682b749169d --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/index.mdx @@ -0,0 +1,8 @@ +--- +order: 30 +xref: quick-start-environment-folder +title: C4B Quick Start Environment +description: Quick start environment and supporting documentation +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/qde-deprecation.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/qde-deprecation.mdx new file mode 100644 index 00000000000..a0d2fdcc207 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/qde-deprecation.mdx @@ -0,0 +1,34 @@ +--- +order: 10 +xref: qde-deprecation +title: Quick Deploy Environment Deprecation Notice +description: Landing page for old QDE links +showInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +## Why Has the Quick Deploy Environment Been Deprecated + +The Quick Deploy Environment (QDE) solution has been deprecated in favor of our and offerings. The reasoning behind this is the Quick Deploy Environment became too complex and cumbersome to support given the need to build out several different format virtual-machine images to work across the ever-increasing number of Hypervisors being used by our customer base. The Quick Start Guide was created as a solution to this problem. It allows deploying the same components you find in a Quick Deploy Environment, but installing them as PowerShell steps rather than needing to bundle them all as a full Windows Server virtual-machine image. This allows customers to bring their own Windows Server virtual-machine setup into the Hypervisor of their choice. We just simply install the needed components onto the virtual-machine provided. + +The Chocolatey For Business Azure Environment was later developed as our replacement for the Quick Deployment Environment Hyper-V to Azure offering. The Chocolatey For Business Azure Environment is a complete cloud native solution offered through the [Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/chocolateysoftwareinc1605695330527.c4b_azure_qde). It stands up the same components of the previous Quick Deploy Environment and current Quick Start Guide solutions using the Azure cloud tooling for the host virtual-machine and networking. + +## I Have a Quick Deploy Environment Solution In Place. What Should I Do Now? + +While we don't support the Quick Deploy Environment as a new deployment option, if already deployed, you have the same components (Sonatype Nexus, Jenkins, and Chocolatey Central Management) as our current environment solutions. You simply need to keep them up-to-date going forward. + +### How Do I Handle SSL Certificate Renewal? + +Our for the Quick Start Guide works on the older Quick Deploy Environment. + +### How Do I Upgrade My Sonatype Nexus Instance? + +The same works for the Quick Start Guide and Quick Deploy Environment solutions. + +### How Do I Upgrade Chocolatey Central Management (CCM)? + +See . + +### How Do I Upgrade Jenkins? + +See diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-jenkins.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-jenkins.mdx new file mode 100644 index 00000000000..2af4ed8ab78 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-jenkins.mdx @@ -0,0 +1,39 @@ +--- +order: 60 +xref: upgrade-jenkins +title: Upgrading Jenkins +description: How to upgrade jenkins +--- +import Xref from '@components/Xref.astro'; + +## Upgrade Jenkins in Quick Start Environment + +This document outlines the process for upgrading Jenkins, and it's Java dependency running on your Quick Start Environment. +This guide assumes your server has access to the internet to internalize the needed packages from the Chocolatey community repository. +If your server is internet restricted, please internalize the needed packages on a machine that does have internet access, then push these packages to your internal repository. + +> :choco-warning: **WARNING** +> +> The current Jenkins package requires Java version 17 or 21 which hasn't been added as a package dependency to jenkins (due to the numerous flavours of Java out there). As part of the Quick Start Guide setup we install the temurin21jre package. However any Java version 17 or 21 package will work. +> +> More information is available in the [Java support policy documentation](https://www.jenkins.io/doc/book/platform-information/support-policy-java/). + +## Instructions + +1. Internalize the Jenkins package and push it to your internal repo. +2. Internalize a java package compatible with Jenkins and push it to your internal repo. We recommend the [temurin21jre package](https://community.chocolatey.org/packages/Temurin21jre). +3. Upgrade the temurin21jre and Jenkins packages (Example commands provided below). + +> :choco-info: **Internalizing Note** +> +> You can add the temurin21jre and Jenkins packages to your Jenkins pipelines, setup by the Quick Start Guide, to help keep new versions of these packages in your internal repo. + +### Example Upgrade Commands: + +```powershell +choco upgrade temurin21jre --package-parameters="/ADDLOCAL=FeatureJavaHome" -y --source="'Your Internal Repo'" +``` + +```powershell +choco upgrade jenkins -y --source="'Your Internal Repo'" +``` diff --git a/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-nexus.mdx b/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-nexus.mdx new file mode 100644 index 00000000000..23ba51f1f07 --- /dev/null +++ b/src/content/docs/en-us/c4b-environments/quick-start-environment/upgrade-nexus.mdx @@ -0,0 +1,40 @@ +--- +order: 50 +xref: upgrade-nexus +title: Upgrading Nexus +description: How to upgrade nexus +--- +import Xref from '@components/Xref.astro'; + +## Upgrade Nexus in Quick Start Environment + +This document outlines the process for upgrading Nexus running inside our Quick Start Environment. +The script provided assumes your server has access to the internet to download the Nexus package from the community repository. +If your server is restricted then internalize the package to your internal repository and update the source in the script appropriately. + +> :choco-warning: **WARNING** +> +> The instructions on this page use parameters available to the nexus-repository package to conserve SSL configuration. If you have arrived here, +> and do not have a Nexus instance configured with SSL, leave off the package parameters. +> +> This command will backup the SSL configuration to the root of your User Profile in a NexusBackup folder. + +## Instructions + +1. Internalize the nexus-repository package and push to your internal repo +2. choco upgrade the nexus-repository package (Example command provided below, which preserves SSL Configuration) + +### Example Upgrade Command: + +> :choco-info: **NOTE** +> +> The following command assumes your nexus instance is available at nexus.example.com. Use your actual FQDN instead + +```powershell +choco upgrade nexus-repository -y --package-parameters="'/Port:8443 /Fqdn:""nexus.example.com"" /BackupSslConfig'" +``` + +> :choco-info: **NOTE** +> +>If you are upgrading from Nexus V 3.22.0.02 or older to a newer version, you may need to make the following change to the jetty-https.xml file. +>Change `class="org.eclipse.jetty.util.ssl.SslContextFactory">` to `class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">` diff --git a/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroup.mdx b/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroup.mdx new file mode 100644 index 00000000000..cbb58ef571e --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroup.mdx @@ -0,0 +1,115 @@ +--- +order: 10 +xref: add-ccmgroup +title: Add-CCMGroup +description: Information about the Add-CCMGroup function +--- +import Xref from '@components/Xref.astro'; + +# Add-CCMGroup + +{/* */} + +Adds a group to Central Management + +## Syntax + +```powershell +Add-CCMGroup ` + -Name ` + [-Description ] ` + [-Group ] ` + [-Computer ] [] +``` + +## Description + +Deployments in Central Management revolve around Groups. Before you can execute a deployment you must define a target group of computers the Deployment will execute on. +Use this function to create new groups in your Central Management system + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Add-CCMGroup -Name PowerShell -Description "I created this via the ChocoCCM module" -Computer pc1,pc2 + +``` + +**EXAMPLE 2** + +```powershell +Add-CCMGroup -Name PowerShell -Description "I created this via the ChocoCCM module" -Group Webservers + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +The name you wish to give the group + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Description [<String>] +A short description of the group + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Group [<String[]>] +The group(s) to include as members + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Computer [<String[]>] +The computer(s) to include as members + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Add-CCMGroup -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroupMember.mdx b/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroupMember.mdx new file mode 100644 index 00000000000..e9f03624dd4 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/AddCCMGroupMember.mdx @@ -0,0 +1,101 @@ +--- +order: 20 +xref: add-ccmgroupmember +title: Add-CCMGroupMember +description: Information about the Add-CCMGroupMember function +--- +import Xref from '@components/Xref.astro'; + +# Add-CCMGroupMember + +{/* */} + +Adds a member to an existing Group in Central Management + +## Syntax + +```powershell +Add-CCMGroupMember ` + [-Name ] ` + [-Group ] [] +``` + + +```powershell +Add-CCMGroupMember ` + [-Name ] ` + -Computer [] +``` + +## Description + +Add new computers and groups to existing Central Management Groups + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Add-CCMGroupMember -Group 'Newly Imaged' -Computer Lab1,Lab2,Lab3 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +The group to edit + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Computer <String[]> +The computer(s) to add + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Group [<String[]>] +The group(s) to add + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Add-CCMGroupMember -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/ConnectCCMServer.mdx b/src/content/docs/en-us/central-management/chococcm/functions/ConnectCCMServer.mdx new file mode 100644 index 00000000000..164c2e511f9 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/ConnectCCMServer.mdx @@ -0,0 +1,101 @@ +--- +order: 30 +xref: connect-ccmserver +title: Connect-CCMServer +description: Information about the Connect-CCMServer function +--- +import Xref from '@components/Xref.astro'; + +# Connect-CCMServer + +{/* */} + +Creates a session to a central management instance + +## Syntax + +```powershell +Connect-CCMServer ` + -Hostname ` + -Credential ` + [-UseSSL] [] +``` + +## Description + +Creates a web session cookie used for other functions in the ChocoCCM module + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Connect-CCMServer -Hostname localhost:8090 + +``` + +**EXAMPLE 2** + +```powershell +$cred = Get-Credential ; Connect-CCMServer -Hostname localhost:8090 -Credential $cred + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Hostname <String> +The hostname and port number of your Central Management installation + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Credential <PSCredential> +The credentials for your Central Management installation. You'll be prompted if left blank + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -UseSSL +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Connect-CCMServer -Full`. + diff --git a/src/content/docs/en-us/central-management/chococcm/functions/DisableCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/DisableCCMDeployment.mdx new file mode 100644 index 00000000000..f2de0ced5b5 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/DisableCCMDeployment.mdx @@ -0,0 +1,99 @@ +--- +order: 40 +xref: disable-ccmdeployment +title: Disable-CCMDeployment +description: Information about the Disable-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Disable-CCMDeployment + +{/* */} + +Archive a CCM Deployment. This will move a Deployment to the Archived Deployments section in the Central Management Web UI. + +## Syntax + +```powershell +Disable-CCMDeployment ` + [-Deployment ] ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Moves a deployment in Central Management to the archive. This Deployment will no longer be available for use. + + +## Aliases + +`Archive-CCMDeployment` + + +## Examples + + **EXAMPLE 1** + +```powershell +Disable-CCMDeployment -Deployment 'Upgrade VLC' + +``` + +**EXAMPLE 2** + +```powershell +Archive-CCMDeployment -Deployment 'Upgrade VLC' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment [<String>] +The deployment to archive + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Disable-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeployment.mdx new file mode 100644 index 00000000000..0b87e8ce8c2 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeployment.mdx @@ -0,0 +1,114 @@ +--- +order: 50 +xref: export-ccmdeployment +title: Export-CCMDeployment +description: Information about the Export-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Export-CCMDeployment + +{/* */} + +Exports a Deployment to a CliXML file + +## Syntax + +```powershell +Export-CCMDeployment ` + -Deployment ` + [-DeploymentStepsOnly] ` + -OutFile ` + [-AllowClobber] [] +``` + +## Description + +Adds ability to export a deployment as cli-xml. Useful for backup/source control of deployments + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Export-CCMDeployment -Deployment TestDeployment -OutFile C:\temp\testdeployment.xml + +``` + +**EXAMPLE 2** + +```powershell +Export-CCMDeployment -Deployment UpgradeChrome -OutFile C:\temp\upgradechrome_ccmdeployment.xml -AllowClobber + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The CCM Deployment to Export + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -DeploymentStepsOnly +Only export a deployment's steps + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -OutFile <String> +The xml file to save the deployment as + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -AllowClobber +Allow a file to be overwritten if it already exists + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Export-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeploymentReport.mdx b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeploymentReport.mdx new file mode 100644 index 00000000000..5f2b25a5766 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMDeploymentReport.mdx @@ -0,0 +1,102 @@ +--- +order: 60 +xref: export-ccmdeploymentreport +title: Export-CCMDeploymentReport +description: Information about the Export-CCMDeploymentReport function +--- +import Xref from '@components/Xref.astro'; + +# Export-CCMDeploymentReport + +{/* */} + +Downloads a deployment report from Central Management. This will be saved in the path you specify for OutputFolder + +## Syntax + +```powershell +Export-CCMDeploymentReport ` + [-Deployment ] ` + -Type ` + -OutputFolder [] +``` + +## Description + +Downloads a deployment report from Central Management in PDF or Excel format. The file is saved to the OutputFolder + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Export-CCMDeploymentReport -Deployment 'Complex' -Type PDF -OutputFolder C:\temp\ + +``` + +**EXAMPLE 2** + +```powershell +Export-CCMDeploymentReport -Deployment 'Complex -Type Excel -OutputFolder C:\CCMReports + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment [<String>] +The deployment from which to generate and download a report + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Type <String> +The type of report, either PDF or Excel + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -OutputFolder <String> +The path to save the report too + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Export-CCMDeploymentReport -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMOutdatedSoftwareReport.mdx b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMOutdatedSoftwareReport.mdx new file mode 100644 index 00000000000..4ef44ab7940 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/ExportCCMOutdatedSoftwareReport.mdx @@ -0,0 +1,96 @@ +--- +order: 70 +xref: export-ccmoutdatedsoftwarereport +title: Export-CCMOutdatedSoftwareReport +description: Information about the Export-CCMOutdatedSoftwareReport function +--- +import Xref from '@components/Xref.astro'; + +# Export-CCMOutdatedSoftwareReport + +{/* */} + +Download an outdated Software report from Central Management. This file will be saved to the OutputFolder specified + +## Syntax + +```powershell +Export-CCMOutdatedSoftwareReport ` + -Report ` + -Type ` + -OutputFolder [] +``` + +## Description + +Download either a PDF or Excel format report of outdated software from Central Management to the OutputFolder specified + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Export-CCMOutdatedSoftwareReport -Report '7/4/2020 6:44:40 PM' -Type PDF -OutputFolder C:\CCMReports + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Report <String> +The report to download + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Type <String> +Specify either PDF or Excel + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -OutputFolder <String> +The path to save the file + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Export-CCMOutdatedSoftwareReport -Full`. + diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMComputer.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMComputer.mdx new file mode 100644 index 00000000000..c3b50f17293 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMComputer.mdx @@ -0,0 +1,107 @@ +--- +order: 80 +xref: get-ccmcomputer +title: Get-CCMComputer +description: Information about the Get-CCMComputer function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMComputer + +{/* */} + +Returns information about computers in CCM + +## Syntax + +```powershell +Get-CCMComputer [] +``` + + +```powershell +Get-CCMComputer ` + -Computer [] +``` + + +```powershell +Get-CCMComputer ` + -Id [] +``` + +## Description + +Query for all, or by computer name/id to retrieve information about the system as reported in Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMComputer + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMComputer -Computer web1 + +``` + +**EXAMPLE 3** + +```powershell +Get-CCMComputer -Id 13 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Computer <String[]> +Returns the specified computer(s) + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Id <Int32> +Returns the information for the computer with the specified id + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | 0 +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMComputer -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeployment.mdx new file mode 100644 index 00000000000..3464f3c5e3b --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeployment.mdx @@ -0,0 +1,120 @@ +--- +order: 90 +xref: get-ccmdeployment +title: Get-CCMDeployment +description: Information about the Get-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMDeployment + +{/* */} + +Return information about a CCM Deployment + +## Syntax + +```powershell +Get-CCMDeployment ` + -All [] +``` + + +```powershell +Get-CCMDeployment ` + -Name [] +``` + + +```powershell +Get-CCMDeployment ` + -Id [] +``` + +## Description + +Returns detailed information about Central Management Deployment Plans + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMDeployment -All + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMDeployment -Name Bob + +``` + +**EXAMPLE 3** + +```powershell +Get-CCMDeployment -Id 583 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -All +Returns all Deployment Plans + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -Name <String> +Returns the named Deployment Plan + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Id <String> +Returns the Deployment Plan with the give Id + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMDeployment -Full`. + diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeploymentStep.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeploymentStep.mdx new file mode 100644 index 00000000000..54f0abed8a2 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMDeploymentStep.mdx @@ -0,0 +1,109 @@ +--- +order: 95 +xref: get-ccmdeploymentstep +title: Get-CCMDeploymentStep +description: Information about the Get-CCMDeploymentStep function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMDeploymentStep + +{/* */} + +Return information about a CCM Deployment step. + +## Syntax + +```powershell +Get-CCMDeploymentStep ` + -InputObject ` + [-IncludeResults] [] +``` + +```powershell +Get-CCMDeploymentStep ` + -Id ` + [-IncludeResults] [] +``` + +## Description + +Returns detailed information about Central Management Deployment Steps. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMDeploymentStep -Id 583 -IncludeResults + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMDeploymentStep -InputObject $step -IncludeResults + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -InputObject <PSObject> + +Retrieves additional details for the given step. + +Property | Value +---------------------- | -------------- +Aliases | Step +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | true (ByValue) + +### -Id <Int64> + +Returns the Deployment Step with the given Id. + +Property | Value +---------------------- | ------------------------------ +Aliases | DeploymentStepId +Required? | true +Position? | named +Default Value | 0 +Accept Pipeline Input? | true (ByValue, ByPropertyName) + +### -IncludeResults + +If set, additionally retrieves the results for the targeted step. + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMDeploymentStep -Full`. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroup.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroup.mdx new file mode 100644 index 00000000000..e4ad4d6b3eb --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroup.mdx @@ -0,0 +1,107 @@ +--- +order: 100 +xref: get-ccmgroup +title: Get-CCMGroup +description: Information about the Get-CCMGroup function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMGroup + +{/* */} + +Returns group information for your CCM installation + +## Syntax + +```powershell +Get-CCMGroup [] +``` + + +```powershell +Get-CCMGroup ` + -Group [] +``` + + +```powershell +Get-CCMGroup ` + -Id [] +``` + +## Description + +Returns information about the groups created in your CCM Installation + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMGroup + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMGroup -Id 1 + +``` + +**EXAMPLE 3** + +```powershell +Get-CCMGroup -Group 'Web Servers' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Group <String[]> +Returns group with the provided name + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Id <String[]> +Returns group withe the provided id + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMGroup -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroupMember.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroupMember.mdx new file mode 100644 index 00000000000..612d26d7584 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMGroupMember.mdx @@ -0,0 +1,72 @@ +--- +order: 110 +xref: get-ccmgroupmember +title: Get-CCMGroupMember +description: Information about the Get-CCMGroupMember function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMGroupMember + +{/* */} + +Returns information about a CCM group's members + +## Syntax + +```powershell +Get-CCMGroupMember ` + -Group [] +``` + +## Description + +Return detailed group information from Chocolatey Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMGroupMember -Group "WebServers" + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Group <String> +The Group to query + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMGroupMember -Full`. + diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftware.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftware.mdx new file mode 100644 index 00000000000..0191983cd42 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftware.mdx @@ -0,0 +1,60 @@ +--- +order: 120 +xref: get-ccmoutdatedsoftware +title: Get-CCMOutdatedSoftware +description: Information about the Get-CCMOutdatedSoftware function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMOutdatedSoftware + +{/* */} + +Returns all outdated software reported in CCM + +## Syntax + +```powershell +Get-CCMOutdatedSoftware [] +``` + +## Description + +Returns all outdated software reported in CCM + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMOutdatedSoftware + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMOutdatedSoftware -Full`. + diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareMember.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareMember.mdx new file mode 100644 index 00000000000..a3278c4e438 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareMember.mdx @@ -0,0 +1,91 @@ +--- +order: 130 +xref: get-ccmoutdatedsoftwaremember +title: Get-CCMOutdatedSoftwareMember +description: Information about the Get-CCMOutdatedSoftwareMember function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMOutdatedSoftwareMember + +{/* */} + +Returns computers with the requested outdated software. To see outdated software information use Get-CCMOutdatedSoftware + +## Syntax + +```powershell +Get-CCMOutdatedSoftwareMember ` + [-Software ] ` + [-Package ] [] +``` + +## Description + +Returns the computers with the requested outdated software. To see outdated software information use Get-CCMOutdatedSoftware + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMOutdatedSoftwareMember -Software 'VLC Media Player' + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMOutdatedSoftwareMember -Package vlc + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Software [<String>] +The software to query. Software here refers to what would show up in Programs and Features on a machine. +Example: If you have VLC installed, this shows as 'VLC Media Player' in Programs and Features. + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Package [<String>] +This is the Chocolatey package name to search for. + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMOutdatedSoftwareMember -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReport.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReport.mdx new file mode 100644 index 00000000000..dda8e73f59e --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReport.mdx @@ -0,0 +1,59 @@ +--- +order: 140 +xref: get-ccmoutdatedsoftwarereport +title: Get-CCMOutdatedSoftwareReport +description: Information about the Get-CCMOudatedSoftwareReport function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMOutdatedSoftwareReport + +{/* */} + +List all Outdated Software Reports generated in Central Management + +## Syntax + +```powershell +Get-CCMOutdatedSoftwareReport [] +``` + +## Description + +List all Outdated Software Reports generated in Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMOutdatedSoftwareReport + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMOutdatedSoftwareReport -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReportDetail.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReportDetail.mdx new file mode 100644 index 00000000000..d58448fd2cb --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMOutdatedSoftwareReportDetail.mdx @@ -0,0 +1,71 @@ +--- +order: 150 +xref: get-ccmoutdatedsoftwarereportdetail +title: Get-CCMOutdatedSoftwareReportDetail +description: Information about the Get-CCMOutdatedSoftwareReportDetail function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMOutdatedSoftwareReportDetail + +{/* */} + +View detailed information about an Outdated Software Report + +## Syntax + +```powershell +Get-CCMOutdatedSoftwareReportDetail ` + -Report [] +``` + +## Description + +Return report details from an Outdated Software Report in Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMOutdatedSoftwareReportDetail -Report '7/4/2020 6:44:40 PM' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Report <String> +The report to query + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMOutdatedSoftwareReportDetail -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMRole.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMRole.mdx new file mode 100644 index 00000000000..773aa0d5455 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMRole.mdx @@ -0,0 +1,83 @@ +--- +order: 160 +xref: get-ccmrole +title: Get-CCMRole +description: Information about the Get-CCMRole function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMRole + +{/* */} + +Get roles available in Chococlatey Central Management + +## Syntax + +```powershell +Get-CCMRole [] +``` + + +```powershell +Get-CCMRole ` + [-Name ] [] +``` + +## Description + +Return information about roles available in Chocolatey Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMRole + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMRole -Name CCMAdmin + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name [<String>] +The name of a role to query + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMRole -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetCCMSoftware.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMSoftware.mdx new file mode 100644 index 00000000000..4cc0c86c9f7 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetCCMSoftware.mdx @@ -0,0 +1,131 @@ +--- +order: 170 +xref: get-ccmsoftware +title: Get-CCMSoftware +description: Information about the Get-CCMSoftware function +--- +import Xref from '@components/Xref.astro'; + +# Get-CCMSoftware + +{/* */} + +Returns information about software tracked inside of CCM + +## Syntax + +```powershell +Get-CCMSoftware [] +``` + + +```powershell +Get-CCMSoftware ` + -Software [] +``` + + +```powershell +Get-CCMSoftware ` + -Package [] +``` + + +```powershell +Get-CCMSoftware ` + -Id [] +``` + +## Description + +Return information about each piece of software managed across all of your estate inside Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMSoftware + +``` + +**EXAMPLE 2** + +```powershell +Get-CCMSoftware -Software 'VLC Media Player' + +``` + +**EXAMPLE 3** + +```powershell +Get-CCMSoftware -Package vlc + +``` + +**EXAMPLE 4** + +```powershell +Get-CCMSoftware -Id 37 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Software <String> +Return information about a specific piece of software by friendly name + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Package <String> +Return information about a specific package + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Id <Int32> +Return information about a specific piece of software by id + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | 0 +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-CCMSoftware -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/GetDeploymentResult.mdx b/src/content/docs/en-us/central-management/chococcm/functions/GetDeploymentResult.mdx new file mode 100644 index 00000000000..32a6a4ac808 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/GetDeploymentResult.mdx @@ -0,0 +1,71 @@ +--- +order: 180 +xref: get-deploymentresult +title: Get-DeploymentResult +description: Information about the Get-DeploymentResult function +--- +import Xref from '@components/Xref.astro'; + +# Get-DeploymentResult + +{/* */} + +Return the result of a Central Management Deployment + +## Syntax + +```powershell +Get-DeploymentResult ` + -Deployment [] +``` + +## Description + +Return the result of a Central Management Deployment + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Get-CCMDeploymentResult -Name 'Google Chrome Upgrade' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The Deployment for which to return information + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Get-DeploymentResult -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/ImportPDQDeployPackage.mdx b/src/content/docs/en-us/central-management/chococcm/functions/ImportPDQDeployPackage.mdx new file mode 100644 index 00000000000..bae93b333d7 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/ImportPDQDeployPackage.mdx @@ -0,0 +1,74 @@ +--- +order: 190 +xref: import-pdqdeploypackage +title: Import-PDQDeployPackage +description: Information about the Import-PDQDeployPackage function +--- +import Xref from '@components/Xref.astro'; + +# Import-PDQDeployPackage + +{/* */} + +Imports a PDQ Deploy package as a Central Management Deployment + +## Syntax + +```powershell +Import-PDQDeployPackage ` + -PdqXml [] +``` + +## Description + +Imports a PDQ Deploy package as a Central Management Deployment + +## Notes + +General notes + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Import-PDQDeployPackage + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PdqXml <String> +The pdq xml file to import + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Import-PDQDeployPackage -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/MoveCCMDeploymentToReady.mdx b/src/content/docs/en-us/central-management/chococcm/functions/MoveCCMDeploymentToReady.mdx new file mode 100644 index 00000000000..fd1a453d27e --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/MoveCCMDeploymentToReady.mdx @@ -0,0 +1,78 @@ +--- +order: 200 +xref: move-ccmdeploymenttoready +title: Move-CCMDeploymentToReady +description: Information about the Move-CCMDeploymentToReady function +--- +import Xref from '@components/Xref.astro'; + +# Move-CCMDeploymentToReady + +{/* */} + +Moves a deployment to Ready state + +## Syntax + +```powershell +Move-CCMDeploymentToReady ` + -Deployment [] +``` + +## Description + +Moves a Deployment to the Ready state so it can start + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Move-CCMDeploymentToReady -Deployment 'Upgrade Outdated VLC' + +``` + +**EXAMPLE 2** + +```powershell +Move-CCMDeploymenttoReady -Deployment 'Complex Deployment' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The deployment to move + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Move-CCMDeploymentToReady -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeployment.mdx new file mode 100644 index 00000000000..b55823eb8cd --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeployment.mdx @@ -0,0 +1,71 @@ +--- +order: 210 +xref: new-ccmdeployment +title: New-CCMDeployment +description: Information about the New-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# New-CCMDeployment + +{/* */} + +Create a new CCM Deployment Plan + +## Syntax + +```powershell +New-CCMDeployment ` + -Name [] +``` + +## Description + +Creates a new CCM Deployment. This is just a shell. You'll need to add steps with New-CCMDeploymentStep. + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +New-CCMDeployment -Name 'This is awesome' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +The name for the deployment + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help New-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeploymentStep.mdx b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeploymentStep.mdx new file mode 100644 index 00000000000..0abf6c7a1a9 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMDeploymentStep.mdx @@ -0,0 +1,239 @@ +--- +order: 220 +xref: new-ccmdeploymentstep +title: New-CCMDeploymentStep +description: Information about the New-CCMDeploymentStep function +--- +import Xref from '@components/Xref.astro'; + +# New-CCMDeploymentStep + +{/* */} + +Adds a Deployment Step to a Deployment Plan + +## Syntax + +```powershell +New-CCMDeploymentStep ` + -Deployment ` + -Name ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] ` + -Type ` + -Script [] +``` + + +```powershell +New-CCMDeploymentStep ` + -Deployment ` + -Name ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] ` + -Type ` + -ChocoCommand ` + -PackageName [] +``` + + +```powershell +New-CCMDeploymentStep ` + -Deployment ` + -Name ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] ` + -Type [] +``` + +## Description + +Adds both Basic and Advanced steps to a Deployment Plan + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +New-CCMDeploymentStep -Deployment PowerShell -Name 'From ChocoCCM' -TargetGroup WebServers -Type Basic -ChocoCommand upgrade -PackageName firefox + +``` + +**EXAMPLE 2** + +```powershell +New-CCMDeploymentStep -Deployment PowerShell -Name 'From ChocoCCM' -TargetGroup All,PowerShell -Type Advanced -Script { $process = Get-Process +>> +>> Foreach($p in $process){ +>> Write-Host $p.PID +>> } +>> +>> Write-Host "end" +>> +>> } + +``` + +**EXAMPLE 3** + +```powershell +New-CCMDeploymentStep -Deployment PowerShell -Name 'From ChocoCCM' -TargetGroup All,PowerShell -Type Advanced -Script {(Get-Content C:\script.txt)} + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The Deployment where the step will be added + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Name <String> +The Name of the step + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -TargetGroup [<String[]>] +The group(s) the step will target + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | @() +Accept Pipeline Input? | false + +### -ExecutionTimeoutSeconds [<String>] +How long to wait for the step to timeout. Defaults to 14400 (4 hours) + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | 14400 +Accept Pipeline Input? | false + +### -FailOnError +Fail the step if there is an error. Defaults to True + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | True +Accept Pipeline Input? | false + +### -RequireSuccessOnAllComputers +Ensure all computers are successful before moving to the next step. + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -ValidExitCodes [<String[]>] +Valid exit codes your script can emit. Default values are: '0','1605','1614','1641','3010' + +Property | Value +---------------------- | ---------------------------------- +Aliases | +Required? | false +Position? | named +Default Value | @('0','1605','1614','1641','3010') +Accept Pipeline Input? | false + +### -Type <String> +Either a Basic or Advanced Step + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChocoCommand <String> +Select from Install,Upgrade, or Uninstall. Used with a Simple step type. + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -PackageName <String> +The chocolatey package to use with a simple step. + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Script <ScriptBlock> +A scriptblock your Advanced step will use + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help New-CCMDeploymentStep -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/NewCCMOutdatedSoftwareReport.mdx b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMOutdatedSoftwareReport.mdx new file mode 100644 index 00000000000..3aba356e7c3 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/NewCCMOutdatedSoftwareReport.mdx @@ -0,0 +1,62 @@ +--- +order: 230 +xref: new-ccmoutdatedsoftwarereport +title: New-CCMOutdatedSoftwareReport +description: Information about the New-CCMOutdatedSoftwareReport function +--- +import Xref from '@components/Xref.astro'; + +# New-CCMOutdatedSoftwareReport + +{/* */} + +Create a new Outdated Software Report in Central Management + +## Syntax + +```powershell +New-CCMOutdatedSoftwareReport [] +``` + +## Description + +Create a new Outdated Software Report in Central Management + +## Notes + +Creates a new report named with a creation date timestamp in UTC format + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +New-CCMOutdatedSoftwareReport + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help New-CCMOutdatedSoftwareReport -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeployment.mdx new file mode 100644 index 00000000000..37cfcbdf009 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeployment.mdx @@ -0,0 +1,98 @@ +--- +order: 240 +xref: remove-ccmdeployment +title: Remove-CCMDeployment +description: Information about the Remove-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Remove-CCMDeployment + +{/* */} + +Removes a deployment plan + +## Syntax + +```powershell +Remove-CCMDeployment ` + -Deployment ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Removes the Deployment Plan selected from a Central Management installation + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Remove-CCMDeployment -Name 'Super Complex Deployment' + +``` + +**EXAMPLE 2** + +```powershell +Remove-CCMDeployment -Name 'Deployment Alpha' -Confirm:$false + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String[]> +The Deployment to delete + +Property | Value +---------------------- | ------------------------------ +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | true (ByValue, ByPropertyName) + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Remove-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeploymentStep.mdx b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeploymentStep.mdx new file mode 100644 index 00000000000..248e915dc3c --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMDeploymentStep.mdx @@ -0,0 +1,110 @@ +--- +order: 250 +xref: remove-ccmdeploymentstep +title: Remove-CCMDeploymentStep +description: Information about the Remove-CCMDeploymentStep function +--- +import Xref from '@components/Xref.astro'; + +# Remove-CCMDeploymentStep + +{/* */} + +Removes a deployment plan + +## Syntax + +```powershell +Remove-CCMDeploymentStep ` + -Deployment ` + -Step ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Removes the Deployment Plan selected from a Central Management installation + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Remove-CCMDeploymentStep -Name 'Super Complex Deployment' -Step 'Kill web services' + +``` + +**EXAMPLE 2** + +```powershell +Remove-CCMDeploymentStep -Name 'Deployment Alpha' -Step 'Copy Files' -Confirm:$false + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The Deployment to remove a step from + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Step <String> +The Step to remove + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Remove-CCMDeploymentStep -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroup.mdx b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroup.mdx new file mode 100644 index 00000000000..c0f837f2d4a --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroup.mdx @@ -0,0 +1,105 @@ +--- +order: 260 +xref: remove-ccmgroup +title: Remove-CCMGroup +description: Information about the Remove-CCMGroup function +--- +import Xref from '@components/Xref.astro'; + +# Remove-CCMGroup + +{/* */} + +Removes a CCM group + +## Syntax + +```powershell +Remove-CCMGroup ` + [-Group ] ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Removes a group from Chocolatey Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Remove-CCMGroup -Group WebServers + +``` + +**EXAMPLE 2** + +```powershell +Remove-CCMGroup -Group WebServer,TestAppDeployment + +``` + +**EXAMPLE 3** + +```powershell +Remove-CCMGroup -Group PilotPool -Confirm:$false + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Group [<String[]>] +The group(s) to delete + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Remove-CCMGroup -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroupMember.mdx b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroupMember.mdx new file mode 100644 index 00000000000..2208d32e49b --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMGroupMember.mdx @@ -0,0 +1,103 @@ +--- +order: 270 +xref: remove-ccmgroupmember +title: Remove-CCMGroupMember +description: Information about the Remove-CCMGroupMember function +--- +import Xref from '@components/Xref.astro'; + +# Remove-CCMGroupMember + +{/* */} + +Remove a member from a Central Management Group + +## Syntax + +```powershell +Remove-CCMGroupMember ` + -Group ` + -Member ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Remove a member from a Central Management Group + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Remove-CCMGroupMember -Group TestLab -Member TestPC1 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Group <String> +The group you want to remove a member from + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Member <String> +The member you want to remove + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Remove-CCMGroupMember -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMStaleDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMStaleDeployment.mdx new file mode 100644 index 00000000000..b7a9217b26b --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/RemoveCCMStaleDeployment.mdx @@ -0,0 +1,91 @@ +--- +order: 280 +xref: remove-ccmstaledeployment +title: Remove-CCMStaleDeployment +description: Information about the Remove-CCMStaleDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Remove-CCMStaleDeployment + +{/* */} + +Removes stale CCM Deployments + +## Syntax + +```powershell +Remove-CCMStaleDeployment ` + -Age ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Remove stale deployments from CCM based on their age and run status. + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Remove-StaleCCMDeployment -Age 30 + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Age <String> +The age in days to prune + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Remove-CCMStaleDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/SetCCMDeploymentStep.mdx b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMDeploymentStep.mdx new file mode 100644 index 00000000000..e8eb11f4a01 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMDeploymentStep.mdx @@ -0,0 +1,219 @@ +--- +order: 290 +xref: set-ccmdeploymentstep +title: Set-CCMDeploymentStep +description: Information about the Set-CCMDeploymentStep function +--- +import Xref from '@components/Xref.astro'; + +# Set-CCMDeploymentStep + +{/* */} + +Modify a Deployment Step of a Central Management Deployment + +## Syntax + +```powershell +Set-CCMDeploymentStep ` + -Deployment ` + -Step ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] [] +``` + + +```powershell +Set-CCMDeploymentStep ` + -Deployment ` + -Step ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] ` + -ChocoCommand ` + -PackageName [] +``` + + +```powershell +Set-CCMDeploymentStep ` + -Deployment ` + -Step ` + [-TargetGroup ] ` + [-ExecutionTimeoutSeconds ] ` + [-FailOnError] ` + [-RequireSuccessOnAllComputers] ` + [-ValidExitCodes ] ` + -Script [] +``` + +## Description + +Modify a Deployment Step of a Central Management Deployment + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Set-CCMDeploymentStep -Deployment 'Google Chrome Upgrade' -Step 'Upgrade' -TargetGroup LabPCs -ExecutionTimeoutSeconds 14400 -ChocoCommand Upgrade -PackageName googlechrome + +``` + +**EXAMPLE 2** + +```powershell +$stepParams = @{ + Deployment = 'OS Version' + Step = 'Gather Info' + TargetGroup = 'US-East servers' + Script = { $data = Get-WMIObject win32_OperatingSystem + [pscustomobject]@{ + Name = $data.caption + Version = $data.version + } + } +} +Set-CCMDeploymentStep @stepParams +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The Deployment to modify + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Step <String> +The step to modify + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -TargetGroup [<String[]>] +Set the target group of the deployment + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ExecutionTimeoutSeconds [<String>] +Modify the execution timeout of the deployment in seconds + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -FailOnError +Set the FailOnError flag for the deployment step + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -RequireSuccessOnAllComputers +Set the RequreSuccessOnAllComputers for the deployment step + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -ValidExitCodes [<String[]>] +Set valid exit codes for the deployment + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChocoCommand <String> +For a basic step, set the choco command to execute. Install, Upgrade, or Uninstall + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -PackageName <String> +For a basic step, the choco package to use in the deployment + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Script <ScriptBlock> +For an advanced step, this is a script block of PowerShell code to execute in the step + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Set-CCMDeploymentStep -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/SetCCMGroup.mdx b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMGroup.mdx new file mode 100644 index 00000000000..4011c48163c --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMGroup.mdx @@ -0,0 +1,109 @@ +--- +order: 300 +xref: set-ccmgroup +title: Set-CCMGroup +description: Information about the Set-CCMGroup function +--- +import Xref from '@components/Xref.astro'; + +# Set-CCMGroup + +{/* */} + +Change information about a group in Chocolatey Central Management + +## Syntax + +```powershell +Set-CCMGroup ` + [-Group ] ` + [-NewName ] ` + [-NewDescription ] [] +``` + +## Description + +Change the name or description of a Group in Chocolatey Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Set-CCMGroup -Group Finance -Description 'Computers in the finance division' + +``` + +**EXAMPLE 2** + +```powershell +Set-CCMGroup -Group IT -NewName TheBestComputers + +``` + +**EXAMPLE 3** + +```powershell +Set-CCMGroup -Group Test -NewName NewMachineImaged -Description 'Group for freshly imaged machines needing a baseline package pushed to them' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Group [<String>] +The Group to edit + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -NewName [<String>] +The new name of the group + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -NewDescription [<String>] +The new description of the group + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Set-CCMGroup -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/SetCCMNotificationStatus.mdx b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMNotificationStatus.mdx new file mode 100644 index 00000000000..345cc8c07bd --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/SetCCMNotificationStatus.mdx @@ -0,0 +1,95 @@ +--- +order: 310 +xref: set-ccmnotificationstatus +title: Set-CCMNotificationStatus +description: Information about the Set-CCMNotificationStatus function +--- +import Xref from '@components/Xref.astro'; + +# Set-CCMNotificationStatus + +{/* */} + +Turn notifications on or off in CCM + +## Syntax + +```powershell +Set-CCMNotificationStatus ` + -Enable [] +``` + + +```powershell +Set-CCMNotificationStatus ` + -Disable [] +``` + +## Description + +Manage your notification settings in Central Management. Currently only supports On, or Off + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Set-CCMNotificationStatus -Enable + +``` + +**EXAMPLE 2** + +```powershell +Set-CCMNotificationStatus -Disable + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Enable +Enables notifications + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -Disable +Disables notifications + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Set-CCMNotificationStatus -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/StartCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/StartCCMDeployment.mdx new file mode 100644 index 00000000000..daa73be45f9 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/StartCCMDeployment.mdx @@ -0,0 +1,78 @@ +--- +order: 320 +xref: start-ccmdeployment +title: Start-CCMDeployment +description: Information about the Start-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Start-CCMDeployment + +{/* */} + +Starts a deployment + +## Syntax + +```powershell +Start-CCMDeployment ` + -Deployment [] +``` + +## Description + +Starts the specified deployment in Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Start-CCMDeployment -Deployment 'Upgrade Outdated VLC' + +``` + +**EXAMPLE 2** + +```powershell +Start-CCMDeployment -Deployment 'Complex Deployment' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment <String> +The deployment to start + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Start-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/StopCCMDeployment.mdx b/src/content/docs/en-us/central-management/chococcm/functions/StopCCMDeployment.mdx new file mode 100644 index 00000000000..4da2ffb7824 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/StopCCMDeployment.mdx @@ -0,0 +1,91 @@ +--- +order: 330 +xref: stop-ccmdeployment +title: Stop-CCMDeployment +description: Information about the Stop-CCMDeployment function +--- +import Xref from '@components/Xref.astro'; + +# Stop-CCMDeployment + +{/* */} + +Stops a running CCM Deployment + +## Syntax + +```powershell +Stop-CCMDeployment ` + [-Deployment ] ` + [-WhatIf] ` + [-Confirm] [] +``` + +## Description + +Stops a deployment current running in Central Management + + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +```powershell +Stop-CCMDeployment -Deployment 'Upgrade VLC' + +``` + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Deployment [<String>] +The deployment to Stop + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -WhatIf +Property | Value +---------------------- | ----- +Aliases | wi +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Confirm +Property | Value +---------------------- | ----- +Aliases | cf +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` https://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "ChocoCCM" -Force; Get-Help Stop-CCMDeployment -Full`. diff --git a/src/content/docs/en-us/central-management/chococcm/functions/index.mdx b/src/content/docs/en-us/central-management/chococcm/functions/index.mdx new file mode 100644 index 00000000000..0b9b4b2084c --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/functions/index.mdx @@ -0,0 +1,8 @@ +--- +order: 30 +xref: chococcm-functions +title: Functions +description: All the functions that exist with the ChocoCCM PowerShell Module +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/chococcm/index.mdx b/src/content/docs/en-us/central-management/chococcm/index.mdx new file mode 100644 index 00000000000..7fa8ca44142 --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/index.mdx @@ -0,0 +1,8 @@ +--- +order: 40 +xref: chococcm +title: ChocoCCM +description: This is a PowerShell Modules which contains functions or communicating with the Chocolatey Central Management API +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/chococcm/release-notes.mdx b/src/content/docs/en-us/central-management/chococcm/release-notes.mdx new file mode 100644 index 00000000000..446edf747ad --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/release-notes.mdx @@ -0,0 +1,66 @@ +--- +order: 20 +xref: chococcm-release-notes +title: Release Notes +description: Release Notes for ChocoCCM +ogImage: https://img.chocolatey.org/social-share/release-notes-choco-ccm-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-choco-ccm-twitter.png +--- +import Xref from '@components/Xref.astro'; + +# Chocolatey Release Notes - ChocoCCM + +## Summary + +This covers the release notes for the ChocoCCM PowerShell Module, which is available for installation from the . + +> :choco-info: **NOTE** +> +> This PowerShell Module requires an installation of at least CCM v0.4.0 in order to be fully compatible. + +## 0.3.0 (September 8, 2022) \{#september-8-2022} + +### Improvement + +- Sign PowerShell Module Files - see [#73](https://github.com/chocolatey/ChocoCCM/issues/73) + +### Documentation + +- Add documentation around building and testing locally - see [#61](https://github.com/chocolatey/ChocoCCM/issues/61) + +## 0.2.0 (April 1, 2021) \{#april-1-2021} + +### Bug Fixes + +- Fix - Add-CCMGroup throws `HTTP 400` error +- Fix - Add-CCMGroupMember throws `HTTP 400` error +- Fix - Fetching Deployment Plan by ID fails when Deployment Plan is not in Draft or Ready state +- Fix - Get-CCMGroupMember has incorrect URL +- Fix - Export-CCMDeploymentReport is not exported by the module + +### Improvements + +- Added a new Remove-CCMGroup cmdlet to allow removal of a group +- Added a new Remove-CCMGroupMember cmdlet to allow removal a computer or group from a CCM group +- Added functionally to the Get-CCMDeploymentStep cmdlet to allow retrieval of Deployment Steps, results, and logs from a Deployment Step and its computers + +## 0.1.1 (December 4, 2020) \{#december-4-2020} + +### Bug Fixes + +- Fix - New-CCMDeploymentStep Throws HTTP 400 Error +- Fix - Not all functions are returning all objects by default + +## 0.1.0 (November 13, 2020) \{#november-13-2020} + +Initial preview release + +### Features + +- PowerShell functions are provided for interacting with the core entities within CCM via the Web API + - Roles + - Groups + - Computers + - Deployments + - Outdated Software + - Reports diff --git a/src/content/docs/en-us/central-management/chococcm/setup.mdx b/src/content/docs/en-us/central-management/chococcm/setup.mdx new file mode 100644 index 00000000000..fa0e2b4949a --- /dev/null +++ b/src/content/docs/en-us/central-management/chococcm/setup.mdx @@ -0,0 +1,37 @@ +--- +order: 20 +xref: chococcm-setup +title: Setup +description: How to setup the ChocoCCM PowerShell Module +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> The ChocoCCM PowerShell Module requires an installation of at least CCM v0.4.0 in order to be fully compatible. + +## Installation + +To install the ChocoCCM PowerShell Module from the [PowerShell Gallery](https://www.powershellgallery.com/packages/ChocoCCM) use the following command: + +```powershell +Install-Module -Name ChocoCCM +``` + +## Upgrade + +To upgrade to a newer version, when available from the [PowerShell Gallery](https://www.powershellgallery.com/packages/ChocoCCM), run the following command: + +```powershell +Update-Module -Name ChocoCCM +``` + +## Available Functions + +Have a look at the list of all available functions included within the ChocoCCM module. + +Or you can run the following command: + +```powershell +Get-Command -Module ChocoCCM +``` \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/faq.mdx b/src/content/docs/en-us/central-management/faq.mdx new file mode 100644 index 00000000000..bab09183b48 --- /dev/null +++ b/src/content/docs/en-us/central-management/faq.mdx @@ -0,0 +1,37 @@ +--- +order: 50 +xref: ccm-faq +title: FAQs +description: FAQs on Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + +## Timezone FAQs + +### Why Doesn't Chocolatey Central Management Have My Timezone? + +Chocolatey Central Management uses the Windows install of its host to determine if a timezone is valid. If Windows does not know of a timezone, then it will not be made available. + +Some examples of timezones that may not appear: + +* `Qyzylorda Standard Time` does not appear in Windows Server 2016 until you install Windows Update [5031362](https://support.microsoft.com/en-us/topic/october-10-2023-kb5031362-os-build-14393-6351-0c6e713e-3d6a-4593-8a75-af0a605f249c) or later. +* `Yukon Standard Time` does not appear in Windows Server 2016 until you install Windows Update [5031362](https://support.microsoft.com/en-us/topic/october-10-2023-kb5031362-os-build-14393-6351-0c6e713e-3d6a-4593-8a75-af0a605f249c) or later. +* `South Sudan Standard Time` does not appear in Windows Server 2016 until you install [5031362](https://support.microsoft.com/en-us/topic/october-10-2023-kb5031362-os-build-14393-6351-0c6e713e-3d6a-4593-8a75-af0a605f249c) or later. + +### Why Did I Get a Notification That My Chosen Timezone is Invalid? + +Starting in Chocolatey Central Management version 0.12.0, if the chosen timezone is detected to be invalid, we will set it back to the default timezone and alert you through a notification. If you are an Administrator, you may additionally receive a notification that the system timezone was invalid. + +#### User Account Timezone is Invalid + +If you received the below notification, then it means that the timezone used for your user account was invalid, and has been set back to the default system timezone. You can pick your own default by clicking the user menu in the top right and selecting `My Settings`. + + +![Example notification for a user configured timezone being invalid](/images/ccm-manual/notifications/user-timezone-invalid.png) + + +#### System Timezone is Invalid + +If you received the below notification, then it means that the system timezone was invalid, and has been set back to the default of `UTC`. You can adjust the default through the . + +![Example notification for a Chocolatey Central Management configured timezone being invalid](/images/ccm-manual/notifications/system-timezone-invalid.png) diff --git a/src/content/docs/en-us/central-management/index.mdx b/src/content/docs/en-us/central-management/index.mdx new file mode 100644 index 00000000000..31fddab1f4d --- /dev/null +++ b/src/content/docs/en-us/central-management/index.mdx @@ -0,0 +1,203 @@ +--- +order: 140 +xref: central-management +title: Chocolatey Central Management (CCM) +description: What is CCM? +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management (CCM) provides you insights across your desktop and endpoint environments. CCM is available with Chocolatey for Business only. + +Once installed and configured, you can use Chocolatey Central Management to: + +* Bring reporting to the organizational level +* Quickly see all software across the organization and see what needs attention immediately +* Create reports for tracking and auditing purposes +* Manage endpoints with Deployment Plans through groups and collections + +![Central Management Logo](/images/ccm-playwright/account/login/logo.png) + +This provides an overview on Chocolatey Central Management (CCM). It provides both setup and use of CCM. + +## Chocolatey Central Management Components + +The following are all of the Chocolatey components required for Chocolatey Central Management to work. + +* Chocolatey CLI (`chocolatey` package) +* Chocolatey for Business (C4B) Edition. +* Chocolatey Licensed Extension (`chocolatey.extension` package) +* Chocolatey Agent (`chocolatey-agent` package) +* Chocolatey Central Management Database (`chocolatey-management-database` package) + * This deploys the Chocolatey Central Management database schema to a specified SQL Server instance. +* Chocolatey Central Management Service (`chocolatey-management-service` package) + * This installs the Chocolatey Central Management Service, which the Chocolatey Agent will communicate with. +* Chocolatey Central Management Website (`chocolatey-management-web` package) + * This is the Chocolatey Central Management front-end website that is the main user interface of the application. + +### Chocolatey Central Management Component Compatibility Matrix + +Chocolatey Central Management has specific needs that are mostly handled by packaging aspects. As the Chocolatey Agent and Chocolatey Central Management communicate with each other, there are some versions that may not be compatible with each other due to mistakes or fixes that needed to be implemented. This serves as a means of capturing that for you. + +> :choco-info: **NOTE** +> +> Central Management packages (all three) are treated as a singular unit, meaning that they all must be on the same version across one or more machines. Using different versions of Chocolatey Central Management packages is unsupported and will likely not work properly. + +|Chocolatey Central Management|Chocolatey Agent|Chocolatey Licensed Extension|Chocolatey| +|-----------------------------|----------------|-----------------------------|----------| +|0.10.0 |1.1.0+ | 4.2.0+ | 1.1.0+ | +|0.9.0 |1.0.0+ | 4.1.1+ | 1.1.0+ | +|0.8.0 |0.13.0+ | 3.2.0+ | 0.12.0+ | +|0.7.0 |0.11.0+ | 2.1.0+ | 0.10.15+ | +|0.6.x |0.11.0+ | 2.1.0+ | 0.10.15+ | +|0.5.x |0.11.0+ | 2.1.0+ | 0.10.15+ | +|0.4.0 |0.11.0+ | 2.1.0+ | 0.10.15+ | +|0.3.x |0.11.0+ | 2.1.0+ | 0.10.15+ | +|0.2.x |0.10.x | 2.1.0+ | 0.10.15+ | +|0.1.1 |0.9.x | 2.0.3+ | 0.10.15+ | +|0.1.0 |0.9.x | 2.0.0+ | 0.10.12+ | + +## Getting Chocolatey Central Management + +Chocolatey Central Management (CCM) is only available for Chocolatey for Business (C4B) customers. If you are a C4B customer, you can head to the install components section: + +* +* + +If you are not a customer yet, you can [reach out for a trial](https://chocolatey.org/contact/trial). + +> :choco-info: **NOTE** +> +> Trials are limited to organizations. If you are personally wanting to work with CCM and other C4B components, you can purchase a C4B starter pack - see [pricing](https://chocolatey.org/pricing). + +## Stay Up To Date + +* +* [Release Announcements Only Mailing List](https://groups.google.com/group/chocolatey-announce) + +## Links + +### Setup / Installation + +* + * + * + * +* + +### Setup / Upgrade + +* + +### Using Chocolatey Central Management + +* +* +* +* +* + +![Chocolatey Central Management Overview](/images/ccm-manual/screens-mockup.jpg) + +### Chocolatey Central Management API + +* + +### ChocoCCM Powershell Module + +* + +## Related Articles + +* +* + +## Roadmap + +* + +## FAQs + +### How do I take advantage of Chocolatey Central Management? + +You must have a [Business edition of Chocolatey](https://chocolatey.org/compare). Business editions are great for organizations that need to manage the total software lifecycle. + +### I'm a licensed customer, now what? + +See [Getting Chocolatey Central Management](#getting-ccm). + +### Will this become available for lower editions of Chocolatey? + +Chocolatey Central Management will only be available in Chocolatey for Business (C4B). + +### What's the minimum version of the Chocolatey packages I need to use Chocolatey Central Management? + +See [Chocolatey Central Management Component Compatibility Matrix](#chocolatey-central-management-component-compatibility-matrix). + +### Where can I find all the log files for Chocolatey Central Management + +Chocolatey Central Management is made up of a number of components, so there will be a few possible places to find the log files, which you may be asked for when engaging with support. + +* The Chocolatey Central Management Website log file located at `c:\tools\chocolatey-management-web\App_Data\Logs\ccm-website.log`. If you are on a version of CCM prior to 0.2.0, the log will be located at `c:\tools\chocolatey-management-web\App_Data\Logs\Logs.txt`. +* The Chocolatey Central Management service log file is located at `$env:ChocolateyInstall\logs\ccm-service.log`. If you are on a version of CCM prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. +* The Chocolatey Agent log file is located at `$env:ChocolateyInstall\logs\chocolatey-agent.log`. If you are on a version of Chocolatey Agent prior to 0.10.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service\logs\chocolatey-agent.log`. + +### Where can I find the changelog or release notes for Chocolatey Central Management? + +Please see . + +### How do I get support? + +Please run `choco support` from a licensed edition and follow the instructions. + +### How do I set up Chocolatey Central Management? + +* As part of our +* As part of our +* By following the + +### If I update the license file, do I need to restart my services and web? + +Yes, you do need to restart the agents, the service, and the web to pick up the license. Here's a handy script: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process +Get-Service chocolatey-* | Start-Service +``` + +For your agent machines: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Service chocolatey-* | Start-Service +``` + +## Common Errors and Resolutions + +### Computers checking in are overwriting each other + +You are generating machines from a base image that already had Chocolatey commercial code on it. This is okay, but you need to remove the Chocolatey Machine Id Guid, which is used to identify a machine as unique. + +When the licensed agent service is installed on a machine, a unique machine id is given to the machine. If you are starting from a template, there is no opportunity for that to be different and when those machines start checking in, they will start overwriting each other. + +Basically you need to go find the machine id at `HKEY_LOCAL_MACHINE\SOFTWARE\Chocolatey\` (`UniqueId`) and remove it as part of your image deployment mechanism. + +```powershell +Write-Host "Removing Chocolatey Unique Machine GUID" +Remove-ItemProperty -Path "HKLM:\Software\Chocolatey" -Name "UniqueId" -Force +# Restart the Agent Service if it is running +``` + +Once you've removed this, you'll need to restart the Agent Service to get it regenerated. + +> :choco-info: **NOTE** +> +> You may **also** need to remove the ChocolateyLocalAdmin user (if you are using it for services) and reinstall the Agent service (and CCM service if on this machine) to get that password corrected. + +### An Internal error occurred during your request + +Check the log files. You may have incorrect database access, but most likely it can come because you didn't follow the steps for setup appropriately. + +### System.Data.SqlClient.SqlException: Invalid column name + +This means you are upgrading things out of order. Please make sure your database is upgraded first, then the service, then the web. diff --git a/src/content/docs/en-us/central-management/release-notes.mdx b/src/content/docs/en-us/central-management/release-notes.mdx new file mode 100644 index 00000000000..2306c28ea59 --- /dev/null +++ b/src/content/docs/en-us/central-management/release-notes.mdx @@ -0,0 +1,561 @@ +--- +order: 10 +xref: ccm-release-notes +title: Release Notes +description: Release Notes for Chocolatey Central Management +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-central-management-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-central-management-twitter.png +--- +import Xref from '@components/Xref.astro'; + +# Chocolatey Release Notes - Chocolatey Central Management + +## Summary + +This covers the release notes for the Chocolatey Central Management (`chocolatey-management-database`, `chocolatey-management-service`, and `chocolatey-management-web`) packages, which covers Central Management server-side functionality. For more information, installation options, etc, please refer to . + +- Installation - +- Upgrade - + +> :choco-info: **NOTE** +> +> This package is available to Chocolatey for Business (C4B) customers only. + +## Other Release Notes + +- Refer to as commercial editions build on top of open source. +- Chocolatey for Business (C4B) customers - also refer to and . + +## Known Issues + +- Please see our [GitHub repository issues](https://github.com/chocolatey/chocolatey-licensed-issues/labels/CentralManagement). + +## 0.12.0 (November 29, 2023) \{#november-29-2023} + +Read our [blog post](https://blog.chocolatey.org/2023/11/central-management-0.12.0-released/) about this release. + +### Features + +- Provide ability to create a Deployment Plan for a single outdated package on all affected Computers. +- Provide ability to create a Deployment Plan for all outdated packages on all Computers. +- Provide ability to create an empty Deployment Plan directly for a specific Computer - see [Licensed #259](https://github.com/chocolatey/chocolatey-licensed-issues/issues/259). +- Provide ability to create a Deployment Plan for all outdated packages for a single Computer - see [Licensed #281](https://github.com/chocolatey/chocolatey-licensed-issues/issues/281). +- Provide ability to duplicate an existing Group. +- Provide ability to create an empty Deployment Plan directly for a specific Group. + +### Bug Fixes + +- Fix - The ability to impersonate other users should be removed - see [Licensed #318](https://github.com/chocolatey/chocolatey-licensed-issues/issues/318). +- Fix - Unnecessary permissions should not be present in the `Edit Roles` and `Permissions` modal windows. +- Fix - Notification about a scheduled Deployment Plan failing to start uses incorrect date format. +- Fix - Inconsistent presentation of Export and Action buttons across pages. +- Fix - Missing TimeZone setting for users in Colombia - (UTC - 05:00) Bogota, Lima, Quito, Rio Branco - see [Licensed #356](https://github.com/chocolatey/chocolatey-licensed-issues/issues/356). +- Fix - The HTTP error page of the Chocolatey Central Management Website does not use standard styling. +- Fix - Ensure colors for the "yes/no" badges are consistent on various tables across the website. +- Fix - Encryption Settings information callout is dismissible when it shouldn't be. +- Fix - Password reset link no longer displays an "invalid link" message after updating the Encryption Passphrase. +- Fix - Tables should retain the current page when refreshed automatically. +- Fix - The casing of the word for product "Excel" is incorrect on all export buttons. +- Fix - Names of Deployment Steps can cause an overflow on some modal windows. +- Fix - Action buttons on tables that only contain one option are hidden. +- Fix - Existing configuration stored in the `appsettings.json` file are not respected when upgrading either the Chocolatey Central Management Database or Service packages. +- Fix - Elements on page overlap when a Passphrase is required to be reset by an Admin. + +### Improvements + +- Provide ability to have a Group Details screen. +- Provide ability to automatically fetch updated information for main Deployment Plan page. +- Provide ability to see information about the last refreshed time for Dashboard. +- Provide ability to see the number of Computers that have specific Software installed - see [Licensed #231](https://github.com/chocolatey/chocolatey-licensed-issues/issues/231). +- Provide ability to duplicate a Deployment Step within a Deployment Plan - see [Licensed #332](https://github.com/chocolatey/chocolatey-licensed-issues/issues/332). +- Information about the number of ready/active Deployment Plans is available within the Dashboard page. +- Reporting - Truncate all Excel sheet names to required 31-char limit. +- Use Windows standard naming for all timezones - see [Licensed #325](https://github.com/chocolatey/chocolatey-licensed-issues/issues/325). +- Add an item to the Dashboard page to show the number of Computers that have not recently reported into Chocolatey Central Management. +- Shorten generated names for Deployment Steps to remove redundant "Deployment Step" prefix. + +### Documentation + +- Normalize wording for Deployment Plan and Deployment Step in the user interface. + + +## 0.11.0 (September 18, 2023) \{#september-18-2023} + +Read our [blog post](https://blog.chocolatey.org/2023/09/central-management-0.11.0-released/) about this release. + +### Features + +- Add the ability to import and export Deployment Plan definitions. +- Add the ability to export the installed software from a computer to packages.config file - see [Licensed #355](https://github.com/chocolatey/chocolatey-licensed-issues/issues/355). +- Add retention policies for completed and archived Deployment Plans. +- Add computers reporting into Chocolatey Central Management to an 'All Computers' group. +- Add the ability to send email notifications when a Deployment Plan has finished - see [Licensed #328](https://github.com/chocolatey/chocolatey-licensed-issues/issues/328). + +### Bug Fixes + +- Fix - On the Deployment Step Details screen, when showing the contents of the log, the error highlighting doesn't extend to the total available width. +- Fix - When viewing the log for a Deployment Step, the text disappears from the `Copy` button when the mouse is hovered over it. +- Fix - Errors are reported in the Deployment Step Details log when no errors have occurred. +- Fix - Audit log retention does not clean up old log entries - see [Licensed #336](https://github.com/chocolatey/chocolatey-licensed-issues/issues/336). + +### Improvements + +- Add an option to provide a default value for the `executionTimeoutInSeconds` setting, which will be used for all new Deployment Steps. +- Ensure a Computer's `ComputerName` and `FriendlyName` properties are in separate fields when the API returns data. +- Move the `Action` button to the first column in all tables. +- Reinstate the `Return To Deployment Plans` button when editing a Deployment Plan. +- Remove the ability to assign a User the `ChocoAdmin` Role. +- Update email templates for consistency. + +## 0.10.1 (October 6, 2022) \{#october-6-2022} + +### Bug Fixes + +- Reporting - Internal error shown when exporting individual software report to excel - see [Licensed #323](https://github.com/chocolatey/chocolatey-licensed-issues/issues/323) +- Deployments - Recurring Deployment Plans are missing Deployment Steps - see [Licensed #322](https://github.com/chocolatey/chocolatey-licensed-issues/issues/322) +- API - GetComputerForView method result missing creationTime - see [Licensed #321](https://github.com/chocolatey/chocolatey-licensed-issues/issues/321) +- Multi-Factor Authentication - Email verification can be enabled while SMTP settings have not been configured +- Website - Ensure builtin accounts' default email addresses are not resolvable + +## 0.10.0 (August 30, 2022) \{#august-30-2022} + +### Features + +- Added recurring Deployment Plans. +- Add ability to duplicate an existing Deployment Plan. +- Retention Policies - Automatically delete a computer that hasn't reported in for a configurable period of time. This defaults to 365 days. +- Implement a dark/light mode. +- API - Add a way to query licensed machine count - see [Licensed #272](https://github.com/chocolatey/chocolatey-licensed-issues/issues/272). + +### Bug Fixes + +- Fix - Auditing data may be lost in the database when some entries are updated. + - Editing a Group, Software, or Computer would erase the user who created it and the time it was created. As part of this fix, entries without that information will set the creating user to the user who last modified it. +- Fix - API - Exception when retrieving a Deployment Plan from the `GetDeploymentPlanForView` method. +- Fix - The creation time on the Notifications table was incorrect. +- Fix - Excel and PDF Reports incorrectly show the time in UTC and not the local time zone. +- Fix - Non-administrative users cannot view the Login Attempts section. +- Fix - API - Group statistics were not updated when adding ComputerGroups / GroupGroups via the API. + +### Improvements + +- Computers tab should display Group enrolment - see [Licensed #223](https://github.com/chocolatey/chocolatey-licensed-issues/issues/223). +- Creating a Deployment Plan and then clicking Cancel without adding steps or saving once should remove the Deployment Plan entirely. +- Add the Deployment Plan name to its Step Details pages. +- Add visual indicators that editing/adding/removing Deployment Steps is disabled when the Deployment Plan schedule is outdated. +- Add option of `--version` and `--pre` for a Basic Deployment Step. +- Send email notifications when a scheduled Deployment Plan fails to start. +- Warn when Chocolatey license is due to expire. +- Remember the specified value for Show Entries dropdown on tables. +- Replace loading animation. +- Require new user passwords to be at least 6 characters long. +- Add option for email 2FA as part of authentication - see [Licensed #300](https://github.com/chocolatey/chocolatey-licensed-issues/issues/300). +- Uninstalling chocolatey-management-web should remove IIS Website and Application Pool. +- Add additional auditing fields for Deployments. + +## 0.9.0 (June 15, 2022) \{#june-15-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of all the Chocolatey Central Management packages (`chocolatey-management-database`, `chocolatey-management-service`, and `chocolatey-management-web`) have changed in this release. This is to allow the installation of .NET 6.0, which is now a requirement to run Chocolatey Central Management. +> +> In addition to the above, all the Chocolatey Central Management packages now make use of the commercial cmdlets, which means that these packages _have_ to be installed on a correctly licensed machine. [Further information about why we have enabled this can be found on our blog post](https://blog.chocolatey.org/2021/09/chocolatey-licensed-changes-restricted-to-licensed-nodes/) +> +> Finally, support for SQL Server 2008 and SQL Server 2008 R2 has been removed. Any attempt to install one of the Chocolatey Central Management packages against one of these instances will results in an error. [Further information about this change can be found in our blog post](https://blog.chocolatey.org/2022/06/ccm-090-remove-sqlserver2008-support/) + +### Breaking Changes + +- Add support for .NET 6.0 to all Chocolatey Central Management components + - As a result, the dependencies for all of the Chocolatey Central Management packages have changed +- Update all Chocolatey Central Management packages to make use of commercial cmdlets and license validation + - This will mean that installation of the Chocolatey Central Management packages has to happen on a correctly licensed machine. [Further information about why we have enabled this can be found on our blog post](https://blog.chocolatey.org/2021/09/chocolatey-licensed-changes-restricted-to-licensed-nodes/) +- Remove support for SQL Server 2008 + - [Further information about this change can be found in our blog post](https://blog.chocolatey.org/2022/06/ccm-090-remove-sqlserver2008-support/) + +### Features + +- Add ability to update the "Friendly Name" of a computer via the API - see [Licensed #285](https://github.com/chocolatey/chocolatey-licensed-issues/issues/285) +- Provide ability to ensure that all Chocolatey Central Management Chocolatey packages are not being installed to either SQL Server 2008 or SQL Server 2008 R2 instance + +### Bug Fixes + +- Ensure that it is possible to hide links from login page when new user registration is disabled - see [Licensed #270](https://github.com/chocolatey/chocolatey-licensed-issues/issues/270) +- Ensure that no error is caused when viewing a large response from the website +- Ensure that the `chocolatey-management-web` Chocolatey package can be internalized using Package Internalizer + +### Improvements + +- [Security] Remove usage of `morris.js` due to security vulnerability +- Add ability for the CCM Admin Role, by default, to be able to edit a computer - see [Licensed #217](https://github.com/chocolatey/chocolatey-licensed-issues/issues/217) +- Add ability to see the "Friendly Name" assigned to a computer across other areas of Chocolatey Central Management - see [Licensed #221](https://github.com/chocolatey/chocolatey-licensed-issues/issues/221) +- Add colorization to the Deployment Plan / Step screens to show overall result in detail pages +- Remove "Show Log" button from Deployment Step details page for a computer with a result reason of "Unreachable" +- Provide ability to navigate to software screen from the KPI dashboard screen - see [Licensed #282](https://github.com/chocolatey/chocolatey-licensed-issues/issues/282) + +## 0.8.0 (February 28, 2022) \{#february-28-2022} + +### Features + +- Ensure that a Deployment Step specifies whether it contains sensitive variables in the script that's to be run. +- Enhanced communication contracts that are used when communicating with Chocolatey Agent. +- Store the database package version number in a database table. + +### Bug Fixes + +- [Security] Fix - ASP.NET Core anti-forgery cookie doesn't use the secure flag. +- Fix - High memory/CPU consumption when there are lots of Computers/Software/Deployment Plans being used. + +### Improvements + +- Disable updating of related group information when it is not needed as computers are reporting in. + +## 0.7.0 (November 17, 2021) \{#november-17-2021} + +### Breaking Changes + +- Additional steps required to change LDAP and SMTP passwords. + -The LDAP and SMTP password is no longer present on the page so cannot be inspected. + - We've added an additional step for confirmation of the passwords. +- Encryption passphrase is required. + - To enhance the security of sensitive fields in the database we require the encryption passphrase to be set to a value you provide. + - When any user with the CCM Administrator role logs in they will be redirected to the Settings page where the passphrase can be changed. + - The passphrase change can be deferred but on the 5th login it will be required to set this passphrase before any other changes can be made. + - Users who are not a member of the CCM Administrator role will only be shown a warning that the passphrase needs to be changed and to contact their Administrator to do so. + - The links provided in email activation or password reset emails that were sent prior to the passphrase change will no longer be valid. The user clicking the link will be directed to a page where they can request them again. + +### Improvements + +- Web - Ability to add sensitive variables to advanced PowerShell Deployment Steps - see [documentation](https://docs.chocolatey.org/en-us/central-management/usage/website/sensitive-variables) +- API - Hide token API endpoints from Swagger documentation. +- Web - Update jQuery dependency - see [Licensed #271](https://github.com/chocolatey/chocolatey-licensed-issues/issues/271). + +### Bug Fixes + +- Fix - CCM - Sensitive package parameters shown in database & Deployment Step page - see [Licensed #267](https://github.com/chocolatey/chocolatey-licensed-issues/issues/267). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.6.3 (September 23, 2021) \{#september-23-2021} + +### Bug Fixes + +- Fix - Processing of message queue does not complete when an invalid XML file is located - see [Licensed #266](https://github.com/chocolatey/chocolatey-licensed-issues/issues/266) +- Fix - When the "Only one concurrent login per user" setting is enabled, users are locked out of CCM Web UI - see [Licensed #260](https://github.com/chocolatey/chocolatey-licensed-issues/issues/260) +- Fix - Error shown when navigating to certain pages within the CCM Web UI - see [Licensed #262](https://github.com/chocolatey/chocolatey-licensed-issues/issues/262) +- Fix - Users are unable to change IsOutdated status for software entries within CCM Web UI - see [Licensed #264](https://github.com/chocolatey/chocolatey-licensed-issues/issues/264) +- Fix - Users are unable to delete a piece of software within CCM Web UI - see [Licensed #261](https://github.com/chocolatey/chocolatey-licensed-issues/issues/261) +- Fix - Incorrect total number of affected instances within Outdated Software Details Report Details - see [Licensed #265](https://github.com/chocolatey/chocolatey-licensed-issues/issues/265) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.6.2 (August 26, 2021) \{#august-26-2021} + +### Bug Fixes + +- Fix - Service - Method to determine correct SSL certificate to use between CCM Service installation script and execution is inconsistent +- Fix - Service - Exceptions thrown during CCM Service startup do not halt internal service tasks +- Fix - Service - CCM Service log file does not contain full error information - see [Licensed #247](https://github.com/chocolatey/chocolatey-licensed-issues/issues/247) +- Fix - Service - Unnecessary/unhelpful log messages are added to the CCM Service log file +- Fix - Web - Upgrading CCM Website package doesn't complete successfully due to locked files +- Fix - Web - Upgrading CCM Website package doesn't ensure creation of required configuration in appsettings.json file +- Fix - Web - Upgrading CCM Website package doesn't ensure creation of required configuration in web.config file +- Fix - Web - Unable to "see" newly created Outdated Software Report when there are greater than 10 reports +- Fix - Web - Incorrect total number of Outdated Software Reports displayed +- Fix - Database - Unable to install 0.6.0/0.6.1 database package when IIS is not installed - see [Licensed #248](https://github.com/chocolatey/chocolatey-licensed-issues/issues/248) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.6.1 (August 5, 2021) \{#august-5-2021} + +### Bug Fixes + +- Fix - Service - Unable to install chocolatey-management-service package under certain conditions - see [Licensed #242](https://github.com/chocolatey/chocolatey-licensed-issues/issues/242) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.6.0 (August 3, 2021) \{#august-3-2021} + +### Breaking Changes + +- Audit Retention + - By default, Audit Logs generated within CCM will now be kept for 30 days, after which they will be removed + - This can be [changed](https://docs.chocolatey.org/en-us/central-management/setup/website#step-4.5-audit-retention) within the Administration | Settings screen of the CCM Web Application + - If you wish to retain all your current audit logs, we recommend that you back up the AbpAuditLogs table prior to upgrading to this release + +### Improvements + +- All CCM Components have been updated to use .NET Core 3.1 which is supported until [December 2022](https://dotnet.microsoft.com/platform/support/policy/dotnet-core). Previous versions of CCM used NET Core 2.2 which Microsoft ended support for in [December 2019](https://dotnet.microsoft.com/platform/support/policy/dotnet-core) +- Due to this update, the CCM Website now uses the in-process hosting model within IIS. This is enabled by [default starting with ASP.NET Core 3.0](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/in-process-hosting?view=aspnetcore-5.0#enable-in-process-hosting). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.5.1 (April 12, 2021) \{#april-12-2021} + +### Bug Fixes + +- Fix - Service - Unable to process Deployment Step report messages that contain invalid XML characters - see [Licensed #216](https://github.com/chocolatey/chocolatey-licensed-issues/issues/216) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.5.0 (March 25, 2021) \{#march-25-2021} + +### Breaking Changes + +- Deployments - Provide better resiliency when handling large numbers of computers within a Deployment Plan - see [Licensed #212](https://github.com/chocolatey/chocolatey-licensed-issues/issues/212) + +Previously, while not recommended, the CCM Service could be run as a user with non-administrative rights on the machine, as long as certain permissions were provided to the user. Going forward, there is now a strict requirement that the user that is running the CCM Service has administrative rights on the machine. This is needed to ensure reliability of messages delivered into the CCM Service. + +### Bug Fixes + +- Fix - Web - No data is returned when logged into the website with FIPS compliant checksums enabled on the hosting server - see [Licensed #167](https://github.com/chocolatey/chocolatey-licensed-issues/issues/167) + +### Improvements + +- Installation - CCM Chocolatey Package scripts have been authenticode signed + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.4.0 (November 6, 2020) \{#november-6-2020} + +### Breaking Changes + +- Deployments - Machine contact timeout now defaults to infinite (0) to allow for semi-connected environments + +Previously this value was set to a constant value of 20 and not configurable. To revert to previous behaviour, set the machine contact timeout in minutes value for a given Deployment Step to 20. + +### Features + +- Deployment Scheduling + - Scheduled Deployment Plans allows for starting a Deployment Plan at some point in the future + - Maintenance Windows - Ability to specify date and time for when no more computers within a Deployment Step can start +- API - Swagger UI allows visualization and interaction with all CCM API operations - see [Licensed #183](https://github.com/chocolatey/chocolatey-licensed-issues/issues/183) +- Long Running Deployments - Enables support for semi-connected computers + +### Bug Fixes + +- Fix - Deployments - Computers marked unreachable should not be picked up in future steps in same Deployment Plan +- Fix - Deployments - Adding distinct groups that share computers to a Deployment Plan results in duplicated computers within Deployment Steps +- Fix - Web - Authentication of external user (i.e. LDAP) fails when no email address is configured for user - see [Licensed #181](https://github.com/chocolatey/chocolatey-licensed-issues/issues/181) +- Fix - Database - Unable to upgrade database when user specific permissions (i.e. instead of assigning a role to a user) for CCM are used for any user +- Fix - Deployments - Execution timeout of infinite (0) for a Deployment Step is not being respected when querying for timed out computers +- Fix - Deployments - Machine contact timeout for Deployment Step is not being respected, Deployment Step incorrectly wait indefinitely (due to changes in v0.3.1) +- Fix - Web - Real time notifications never reach CCM Web UI +- Fix - Web - Notifications page has no way to see entire notification + +### Improvements + +- Deployments - Handle Deployment Step activation order properly when the same computer is in multiple Deployment Plans that are active at the same time +- Service - Configuration - Provide clarity in log messages when salt additive configuration values are misconfigured +- Deployments - Round percentage complete values on report pages while Deployment Step is in progress +- Deployments - Auto-refresh Deployment Plan report pages + +## 0.3.1 (October 5, 2020) \{#october-5-2020} + +### Bug FIxes + +- Fix - Database - Upgrade fails when passing database parameters due to incorrect cmdlet name - see [Licensed #161](https://github.com/chocolatey/chocolatey-licensed-issues/issues/161) +- Fix - Service Install - Ensure that existing certificate is located in TrustedPeople certificate store +- Fix - Service Install - Netsh Entries Incorrectly Parsed ("Cannot index into a null array") when installing in different locales - see [Licensed #174](https://github.com/chocolatey/chocolatey-licensed-issues/issues/174) +- Fix - Web - Invalid LDAP credentials/URL should not prevent login for ccmadmin user +- Fix - Deployments - Start Date Time for Deployment Step is overwritten when Step is marked as inconclusive +- Fix - Deployments - Switching from Basic to Advanced script without providing package name causes validation errors - see [Licensed #164](https://github.com/chocolatey/chocolatey-licensed-issues/issues/164) + +### Improvements + +- Service Install - Allow skipping certificate binding with package parameter /SkipCertificateBinding +- Include CreationTime property on Deployment Plan entity - useful when querying via CCM API +- Web - Deployments UI - Add Deployment Step modal window should default to basic view + +## 0.3.0 (June 25, 2020) \{#june-25-2020} + +### Breaking Changes + +- Chocolatey Central Management v0.3.0 will only work with Chocolatey Agent v0.11.0+. Upgrade order doesn't matter as you'll need to be on CCM v0.3.0 and Agent v0.11.0 before things start working again. See https://docs.chocolatey.org/en-us/central-management/#ccm-component-compatibility-matrix. + +### Bug Fixes + +- Fix - Service - Communication with Chocolatey Agent fails on Incorrect Passphrase - see [Licensed #152](https://github.com/chocolatey/chocolatey-licensed-issues/issues/152) +- Fix - Web - Do not recreate website w/bindings on upgrade - see [Licensed #156](https://github.com/chocolatey/chocolatey-licensed-issues/issues/156) + +## 0.2.0 (June 18, 2020) \{#june-18-2020} + +Deployments Release - we are excited to bring about managing remote machines with [Central Management Deployments](https://blog.chocolatey.org/2020/05/announcing-deployments/) coming in this release! There are quite a few things we've brought into the initial release and we think you'll agree that it is a powerful, yet easy to use interface. Read [the announcement.](https://blog.chocolatey.org/2020/05/announcing-deployments/). We've also overhauled the documentation to make it understandable and approachable. Please see https://docs.chocolatey.org/en-us/central-management/. + +> :choco-info: **NOTE** +> +> Log locations have changed. Please see for more information. + +### Features + +- [Central Management Deployments](https://blog.chocolatey.org/2020/05/announcing-deployments/): + - Create target groups to deploy to + - Create a Deployment Plan with one or more Steps + - Each step can target multiple groups, and different groups in each step if desired + - Script a Chocolatey package + - With additional permissions, run a full PowerShell script instead + - Choose how failures in each step are handled + - Reorder steps + - Control permissions on who can deploy Chocolatey packages and who can run full scripts + - See progress on active Deployment Plans + - View logs for computers that executed a Deployment Step + - Report on completed Deployment Plans including exporting to PDF for sharing with executive staff + +### Bug Fixes + +- [Security] Fix - Framework does not encrypt LDAP Password in the database - see [licensed #144](https://github.com/chocolatey/chocolatey-licensed-issues/issues/144) +- Fix - Service - Error on installation when providing existing certificate: Cannot index into a null array - see [licensed #143](https://github.com/chocolatey/chocolatey-licensed-issues/issues/143) +- Fix - Web - Do not enable recaptcha by default for site registration - see [licensed #128](https://github.com/chocolatey/chocolatey-licensed-issues/issues/128) +- Fix - Web - Create/Edit Computer and Software modals are not saving changes - see [licensed #125](https://github.com/chocolatey/chocolatey-licensed-issues/issues/125) +- Fix - Web - Remove default permission to edit software and computers +- Fix - Web - Restrict What Can Be Created or Edited For Computers and Software +- Fix - Web - Deleted/Hidden items are still being used for counts for paging purposes in Software +- Fix - Web - The license count looks clickable at times when it is not clickable +- Fix - Web - After installation of CCM, doing an iisreset breaks the site +- Fix - All - Monitoring chocolatey.config for changes could potentially lock the file from being written to by choco +- Fix - All - Logging - CCM service not responding to calls and stops logging after choco configuration file is edited +- Fix - Service - Changing CentralManagementServiceUrl value in chocolatey.config causes running management service to crash + +### Improvements + +- Web - Allow removing computers as a default permission for ccmadmin role - see [licensed #133](https://github.com/chocolatey/chocolatey-licensed-issues/issues/133) +- Service - On install/upgrade, write out the FQDN and link to provide to chocolatey agents +- Logging - Service and DB Migrator should log to the root logs folder of Chocolatey Installation +- All - Logging - Adjust format to match closer with other Chocolatey log file formats +- Service - Set higher encryption when available (TLS 1.2) +- Database Install - Add `/SkipDatabasePermissionCheck` parameter to skip permissions check - see [licensed #147](https://github.com/chocolatey/chocolatey-licensed-issues/issues/147) +- Trial licenses that do not include counts will allow 100 licenses - see [licensed #140](https://github.com/chocolatey/chocolatey-licensed-issues/issues/140) + +## 0.1.1 (January 30, 2020) \{#january-30-2020} + +### Bug Fixes + +- [Security] Fix - Database - Don't emit Connection String information to log file +- [Security] Fix - Web - Add missing ability to use Active Directory (LDAP) for authentication +- Fix - Web - Error on installation 'HTTP Error 500.21 - Internal Server Error Handler "aspNetCore" has a bad module "AspNetCoreModule" in its module list' - see [Licensed #114](https://github.com/chocolatey/chocolatey-licensed-issues/issues/114) +- Fix - Service - Unable to parse netsh entries that contain hostname:port bindings - see [Licensed #96](https://github.com/chocolatey/chocolatey-licensed-issues/issues/96) +- Fix - Web - When setting SMTP configuration the SSL checkbox status is being ignored - see [Licensed #87](https://github.com/chocolatey/chocolatey-licensed-issues/issues/87) +- Fix - Service - "The remote server returned an unexpected response: (413) Request Entity Too Large." - see [Licensed #95](https://github.com/chocolatey/chocolatey-licensed-issues/issues/95) +- Fix - Service - Unable to install CCM service with less than PowerShell v5 due to error on New-Guid cmdlet +- Fix - Web - Time discrepancy between Computers and Computer details - see [Licensed #97](https://github.com/chocolatey/chocolatey-licensed-issues/issues/97) +- Fix - Web - Remove ability to brand sections of CCM for now as it wasn't meant to be there yet and doesn't work +- Fix - Service - Unable to uninstall chocolatey-management-service due to incorrect name in package uninstall script +- Fix - Web - License count information is not being displayed correctly (e.g. 90 / n/a) - see [Licensed #80](https://github.com/chocolatey/chocolatey-licensed-issues/issues/80) +- Fix - Service - IP Address of Computer is not updating - see [Licensed #86](https://github.com/chocolatey/chocolatey-licensed-issues/issues/86) +- Fix - Web - Unable to upload a profile picture for user +- Fix - Web - Hovering over tooltips in Internet Explorer causes the page to jump +- Fix - Web - Clicking the Chocolatey icon in top left-hand corner opens new tab +- Fix - Web - Website Logs are not appearing the in Maintenance Tab +- Fix - All - Move from DEBUG level reporting by default to INFO level reporting to reduce amount of logging +- Fix - Web - Improve wording in email templates and ensure consistent naming is used + +### Improvements + +- Database - Check whether provided SQL Server connection string actually works prior to starting installation +- Web - Optimize/Reduce Size of Chocolatey package by removing unnecessary files - see [Licensed #62](https://github.com/chocolatey/chocolatey-licensed-issues/issues/62) +- All - Show a warning when no package parameters are passed when initially installing CCM packages +- All - Show a warning during installation when provided SQL Server connection string doesn't provide an explicit user/password to connect with +- Service - Adjust logs to provide more appropriate information for normal operations +- Web - Autofocus on new password text box on password change screen + +## 0.1.0 (May 22, 2019) \{#may-22-2019} + +Initial preview release + +### Features + +- Reports - Ability to view and generate report (Excel/PDF) for all currently outdated software +- Dashboard - Provide a dashboard screen with key KPI values +- Overview - Show number of machines checking into CCM and compare to number currently licensed + +### Bug Fixes + +- Fix - Packaging - Before upgrading Web Package ensure that dotnet process isn't running +- Fix - Web Site - Ensure that minified versions of all assets are used +- Fix - Web Site - Ensure consistent Date/Time Formatting used everywhere +- Fix - Web Site - Corrected duplicate display of search input box on some screens +- Fix - Web Site - Error when attempting to sort by any column in table on Computer Details screen +- Fix - Web Site - Error when attempting to sort by Name or Package Title column in table on Software screen +- Fix - Web Site - Tab does not sort by outdated first on Software screen +- Fix - Web Site - Timezone modification doesn't provide useful information to user +- Fix - Web Site - Only show Software that is installed on at least one machine +- Fix - Web Site - Excel Export generates errors when DateTime values are included +- Fix - Versioning - Ensure correct version number is stamped on all generated assemblies +- Fix - Service - Correct usage of default port number, which should be 24020 +- Fix - Service - New-SelfSignedCertificate usage doesn't work on earlier PowerShell versions +- Fix - Service - Ensure correct error handling for incorrect/missing SQL Server credentials +- Fix - Database - Ensure SQL Server 2008 support +- Fix - Database - Migrator doesn't exit with non-zero exit code when there is an error +- Fix - Installation - Ensure usage of FQDN for all components + +### Improvements + +- Logging - Provided better logging during Service Certificate installation +- Installation - Verify and usage persisted appsettings.json file during upgrade +- Installation - Reduce issues unpacking web package by shortening paths in packaging +- Uninstallation - Remove modifications that were done as part of installation +- Database - Don't attempt to seed database tables every time application starts +- Packaging - Removed unnecessary files from package, making it much smaller +- Packaging - Added required dependencies to packages +- Packaging - Add information about available installation parameters to package description +- Service - Allow modification of configuration settings without the need to restart Windows Service + +## 0.1.0-beta-20181009 (October 9, 2018) + +### Features + +- [Security] Installation - Provide encryption for all persisted configuration data +- [Security] Installation - Sign all PowerShell Scripts and assemblies shipped as part of release +- [Security] Web Site - Provide full RBAC to site and API +- Audit - Provide ability to list all computers that are currently in use across environment +- Audit - Provide ability to list all software that is currently installed across environment +- Reports - Ability to view and generate report (Excel/PDF) for all currently installed software +- Reports - Ability to view and generate report (Excel/PDF) for all computers currently in use diff --git a/src/content/docs/en-us/central-management/setup/client.mdx b/src/content/docs/en-us/central-management/setup/client.mdx new file mode 100644 index 00000000000..40e8c14d3ec --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/client.mdx @@ -0,0 +1,204 @@ +--- +order: 40 +xref: ccm-client +title: Client +description: How to setup client machines to report into CCM +--- +import Xref from '@components/Xref.astro'; + +This will guide us through getting an agent installed and configured to check into Chocolatey Central Management and to be set up for handling deployment tasks. + +## Setup + +### Step 1: Install Chocolatey Agent + +First you need Chocolatey Agent installed. As there may be some steps involved with the install of the agent, please see . + +### Step 2: Update Configuration + +At a minimum you need the following items set to be able to have a Chocolatey Agent be "opted-in" for both checking into Chocolatey Central Management and Deployments: + +```powershell +choco config set --name CentralManagementServiceUrl --value https://:24020/ChocolateyManagementService +choco feature enable --name="'useChocolateyCentralManagement'" +# Requires Chocolatey Licensed Extension v2.1.0+, Chocolatey-Agent v0.10.0+, and Chocolatey Central Management v0.2.0+: +choco feature enable --name="'useChocolateyCentralManagementDeployments'" +``` + +> :choco-warning: **WARNING** +> +> The Chocolatey Agent installed on the same machine that has the CCM Service installed will share the `centralManagementServiceUrl` setting, so that agent can only report into that CCM Service. + + +Please see config settings and features below for a full list. + +> :choco-info: **NOTE** +> +> As these features have security considerations as it is enabling cross-machine communication, they must be turned on explicitly. +> If you decide you want to open this up for over the internet communication, you should also set `centralManagementClientCommunicationSaltAdditivePassword` and `centralManagementServiceCommunicationSaltAdditivePassword` - see [Configuration](#config-settings) below. + +#### Config Settings + +* `centralManagementServiceUrl` = **' '** - The URL that should be used to communicate with Chocolatey Central Management. It should look something like https://servicemachineFQDN:24020/ChocolateyManagementService. See . Defaults to '' (empty). Available in business editions only. +* `centralManagementReportPackagesTimerIntervalInSeconds` = **'1800'** - Amount of time, in seconds, between each execution of the background service to report installed and outdated packages to Chocolatey Central Management. Defaults to '1800'. Available in business editions only. +* `centralManagementReceiveTimeoutInSeconds` = **'30'** - The amount of time, in seconds, that the background agent should wait to receive information from Chocolatey Central Management. Defaults to '30'. Available in business editions only. +* `centralManagementSendTimeoutInSeconds` = **'30'** - The amount of time, in seconds, that the background agent should wait to send information to Chocolatey Central Management. Defaults to '30'. Available in business editions only. +* `centralManagementCertificateValidationMode` = **'PeerOrChainTrust'** - The certificate mode that is used in communication to Chocolatey Central Management. Defaults to 'PeerOrChainTrust'. Available in business editions only. +* `centralManagementMaxReceiveMessageSizeInBytes` = **'2147483647'** - The size of the permitted message, in bytes, which can be exchanged between the Chocolatey Background Agent and Chocolatey Central Management. Defaults to '2147483647'. Available in business editions only. +* `centralManagementDeploymentCheckTimerIntervalInSeconds` = **'180'** - Amount of time, in seconds, between each execution of the Chocolatey Agent service to check for a new Deployment Step from Chocolatey Central Management. Defaults to '180'. Available in business editions only. +* `centralManagementClientCommunicationSaltAdditivePassword` = **' '** - Chocolatey Central Management Client Communication Salt Additive - The salt additive to use in the salt recipe for encrypting and verifying communication from an agent TO an instance of Central Management Service (will need to be set the same on all clients contacting that service AND the instance of the management service itself). When not set a default encryption phrase set by the system will be used. When set the unencrypted value must match exactly with what is set in the configuration for Central Management Service and every client contacting that instance of Central Management Service. Value is not shared over the wire. Because this is a much more involved process, it is recommended only setting this if you are transmitting messages over the internet. Defaults to ''. Needs to be at least 8 characters long if set or it will throw errors and use the default. Available in business editions only. IMPORTANT: If this value is set, agents less than v0.10.0 will be unable to contact Central Management to report in. +* `centralManagementServiceCommunicationSaltAdditivePassword` = **' '** - Chocolatey Central Management Communication Salt Additive - The salt additive to use in the salt recipe for encrypting and verifying communication FROM an instance of Central Management Service to an agent (will need to be set the same on all clients contacting that service AND the instance of the management service itself). When not set a default encryption phrase set by the system will be used. When set the unencrypted value must match exactly with what is set in the configuration for Central Management Service and every client contacting that instance of Central Management Service. Value is not shared over the wire. Because this is a much more involved process, it is recommended only setting this if you are transmitting messages over the internet. Defaults to ''. Needs to be at least 8 characters long if set or it will throw errors and use the default. Available in business editions only. + +> :choco-warning: **WARNING** +> +> The Chocolatey Agent installed on the same machine that has the CCM Service installed will share the `centralManagementServiceUrl` setting, so that agent can only report into that CCM Service. + +Also found at . + +#### Features + +* +* + +Also found at . + +### Step 3: Verify Installation + +* Open the services snap-in (services.msc) and check for the presence of the `Chocolatey Agent` which should be in the started state. +* The installation folder for `chocolatey-agent` is at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service`. +* Open the Service log file located at `$env:ChocolateyInstall\logs\chocolatey-agent.log` and verify that there are no recently reported errors. If you are on a version of Chocolatey Agent prior to 0.10.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service\logs\chocolatey-agent.log`. +* There should be messages of connecting to the ccm server and checking in. It will be similar to this: + ![Agent Setup For CCM](/images/features/ccm/agent_ccm_setup_good.png) + Connection to report in: + ![Agent Check-in to CCM](/images/features/ccm/agent_ccm_communication.png) + +## FAQ + +### Can I run Self-Service and Chocolatey Central Management Deployments at the same time? +Yes + +### How can I increase the level of logging for Chocolatey Central Management? + +This can be done by changing the level value, which should be currently `INFO`, to use `DEBUG`, as per the following: + +```xml + + + + + +``` + +In the following files: + +* `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\log4net.config`. If you are on a version less than 0.2.0, then it will be in `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\chocolatey-central-management.exe.config`. +* `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service\chocolatey-agent.exe.config` + +When the value is changed, the services may also need restarted. + +### Can I save an image with the agent already installed that I can deploy new machines from? + +Yes, however you need to keep in mind that there is a unique machine Id that will need to be erased so it can be regenerated. + +Make sure to include the following in your provisioning script to deploy the new images: + +```powershell +Write-Host "Removing Chocolatey Unique Machine GUID" +Remove-ItemProperty -Path "HKLM:\Software\Chocolatey" -Name "UniqueId" -Force +# Restart the Agent Service if it is running +``` + +Once you've removed this, you'll need to restart the Agent Service to get it regenerated. + +> :choco-info: **NOTE** +> +> You may **also** need to remove the ChocolateyLocalAdmin user (if you are using it for services) and reinstall the Agent service (and CCM service if on this machine) to get that password corrected. + +### What is the CCM compatibility matrix? + +Central Management has specific compatibility requirements with quite a few moving parts. It is important to understand that there are some Chocolatey Agent versions that may not be able to communicate with some versions of CCM and vice versa. Please see the for details. + +### What is Run Actual? + +You may have seen `--run-actual`, what is that? + +This is a switch that is passed to opt out of Chocolatey Self-Service. It's typically passed by the agent service back to choco to run a command for a user. You typically would not issue this, but the agent service will, so you are likely to see it in the logs if you are looking closely. + +### Where is the agent service installed? + +The installation folder for `chocolatey-agent` is at `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service`. + +## Common Errors And Resolutions + +### Unable to report computer information to CCM + +You may see messaging like the following in the chocolatey-agent.log: + +```powershell +[INFO ] - Creating secure channel to https://ccmserver:24020/ChocolateyManagementService ahead of CCM check-in... +[ERROR] - Unable to report computer information to CCM.: + The message with Action 'http://tempuri.org/IChocolateyManagementService/report_computer_information' cannot be + processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a + contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender + and the receiver. Check that sender and receiver have the same contract and the same binding (including security + requirements, e.g. Message, Transport, None). +``` + +This is due to having a Chocolatey Agent that is v0.10.0+ versus an older Central Management Service (< v0.2.0). Newer agents are incompatible because they use newer and more secure methods of communication. Please upgrade Central Management to v0.2.0+ at your earliest convenience. Or if you are on CCM v0.3.0+, your agents need to be on v0.11.0+. Please refer to the . + +### Unable to check for deployments from Chocolatey Central Management + +This will provide similar messaging as the above. The fix is the same, upgrade Chocolatey Central Management to v0.2.0+. Or if you are on CCM v0.3.0+, your agents need to be on v0.11.0+. Please refer to the . You may need to be on at least v0.3.0 and agents on v0.11.0+ if you are experiencing improper passphrase issues noted below, it means you need to likely upgrade to v0.3.0+ / v0.11.0 across your infrastructure. + +### We are seeing the error "attempted to call report_computer_information with an improper passphrase" in the CCM Service log + +If you are in the CCM service logs, you may be seeing the above error. That is a bug that was found with the communication of CCM v0.2.0 and Chocolatey Agent v0.10.0. That was resolved in CCM v0.3.0 and Chocolatey Agent v0.11.0. Please see the and [Licensed Issue #152](https://github.com/chocolatey/chocolatey-licensed-issues/issues/152) for more details. + +### The client reports successful check-in, but nothing is showing up in CCM + +You need to check the CCM service logs. The agent will always report success when it communicates with the service successfully. The service may reject what it receives, but due to security settings, it won't tell the client about that. + +The logs are located at `$env:ChocolateyInstall\logs\ccm-service.log`. If you are on a version of CCM prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +### Chocolatey Agent Service is unable to communicate with Chocolatey Central Management Service + +There is a known issue with the beta release of Chocolatey Central Management where an inconsistent Port Number is used between these two services. One used 24020 and the other used 24040. The correct default Port Number is 24020, and this is used in the 0.1.0 release of Chocolatey Central Management. If required, the Port Number can be explicitly set during the installation of the Chocolatey Central Management packages using the following option when installing `chocolatey-management-service`: + +```powershell +--params="'/PortNumber=24020'" +``` + +### The remote server returned an unexpected response: (413) Request Entity Too Large + +When reporting a larger number of packages (approximately 200), this error may be reported. This is due to the size of the information, in bytes, being too large to send between the Chocolatey Agent Service and the Chocolatey Central Management Service. This has been identified as a [bug](https://github.com/chocolatey/chocolatey-licensed-issues/issues/95), which is due to be corrected in version 0.1.1 of Chocolatey Central Management + +### Computers checking in are overwriting each other + +You are generating machines from a base image that already had Chocolatey commercial code on it. This is okay, but you need to remove the Chocolatey Machine Id Guid, which is used to identify a machine as unique. + +When the licensed agent service is installed on a machine, a unique machine id is given to the machine. If you are starting from a template, there is no opportunity for that to be different and when those machines start checking in, they will start overwriting each other. + +Basically you need to go find the machine id at `HKEY_LOCAL_MACHINE\SOFTWARE\Chocolatey\` (`UniqueId`) and remove it as part of your image deployment mechanism. + +```powershell +Write-Host "Removing Chocolatey Unique Machine GUID" +Remove-ItemProperty -Path "HKLM:\Software\Chocolatey" -Name "UniqueId" -Force +# Restart the Agent Service if it is running +``` + +Once you've removed this, you'll need to restart the Agent Service to get it regenerated. + +> :choco-info: **NOTE** +> +> You may **also** need to remove the ChocolateyLocalAdmin user (if you are using it for services) and reinstall the Agent service (and CCM service if on this machine) to get that password corrected. + +### The agent services are not picking up the new license + +Currently, you do need to restart agents. Here's a handy script: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Service chocolatey-* | Start-Service +``` + + | diff --git a/src/content/docs/en-us/central-management/setup/database.mdx b/src/content/docs/en-us/central-management/setup/database.mdx new file mode 100644 index 00000000000..ee2c35218eb --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/database.mdx @@ -0,0 +1,484 @@ +--- +order: 10 +xref: ccm-database +title: Database +description: Information on how to setup the CCM Database +--- +import Xref from '@components/Xref.astro'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +At the end of this, we should have a fully ready to go SQL Server: + +* Installed +* Configured +* Database package deployed creating the database +* Permissions added + +> :choco-warning: **WARNING** +> +> Unless otherwise noted, please follow these steps in **exact** order. These steps build on each other and need to be completed in order. + +## Step 1: Complete Prerequisites + +* +* SQL Server 2012 or later. + +> :choco-info: **NOTE** +> +> While we'd like to support different database engines at some point in the distant future, currently only SQL Server is supported. + +Chocolatey Central Management will not install or take a dependency on a database engine install as there are different editions that could be installed and multiple packages out there. At this time, it is expected that you have this ready. This is required before you can continue to other steps. + +* You need a SQL Server set up somewhere. Editions really don't matter until you have a large number of computers checking in. +* SQL Server should support mixed mode for logins (unless you are going to use AD authentication). 98% of the time you are going to want mixed mode authentication for SQL Server unless you hit options. +* You need to create the user access to the database (logins at the server level/users at the db level). + +> :choco-warning: **WARNING** +> +> SQL Server Mixed Mode Authentication is what you will want for ease of installation. If you decide you need to go Windows Authentication (aka integrated security), you **will** need to ensure the following additional items: +> +> * **You *must* have active directory** - Full stop. Local machine accounts can not authenticate to remote machines (nor SQL Server instances on remote machines). +> * **SQL Server machine security** - ensure the domain accounts being used for the service and web are not local administrators (members of the `BUILTIN\Administrators`) group on the machine that contains the SQL Server instance, or they will have `sysadmin` privileges by default to the SQL Server instance (until removed). +> * **Chocolatey Central Management Service installation** - You'll need to use an Active Directory (LDAP) account. See the install options for how to pass that through. +> * **!!Security!!** - As part of installation, an account will be made a member of the `BUILTIN\Administrators` group on the machine where the service is installed. Ensure that is **not** the same machine where SQL Server is installed or that account will immediately be a member of the `sysadmin` role by default in SQL Server (until removed). +> * **Chocolatey Central Management Web installation** - You'll need to use an Active Directory (LDAP) account. See the install options for how to pass that through to be set with the IIS Application Pool. +> +> :choco-info: **NOTE** +> +> Incorrect credentials to the database is 90% of support tickets related to Chocolatey Central Management. +> +> Unless you are an expert in hooking things up to SQL Server, its probably best to stick with SQL Server Mixed Mode Authentication. +> See https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/authentication-in-sql-server + +### Step 1.1: Install SQL Server + +You may need to install SQL Server as part of this. There are all kinds of ways to do that and different SKUs to choose from. If you already have SQL Server implemented and you simply want to add the Chocolatey Management Database to that, you can skip this step (and possibly 1.2 as well). + +#### Install SQL Server Express + +You may have other methods for getting SQL Server installed, but if you are looking for a quick way of installing SQL Server Express, you can use the Chocolatey packages we internalized earlier in this process. + +The quickest option to get going with the database is to use the Chocolatey Community Repository, or an internalized version of a SQL Server package from the community repository. For SQL Server Express 2022, run the following: + +```powershell +choco install sql-server-express -y +``` + +You will also want to have the management tools installed, which can be installed with: + +```powershell +choco install sql-server-management-studio -y +``` + +### Step 1.2: Prepare SQL Server + +In preparing SQL Server, you need to do the following: + +* Turn on Named Pipes and TCP Server protocols +* Ensure the TcpPort is 1433 (or know what it is you need to connect to) +* Set SQL Server Mixed Mode Authentication +* Restart SQL Server +* Open Windows Firewall ports for TCP access (and SQL Server Browser in most cases) + +We've prepared a handy script (that may turn into a package later) to help you ensure you have SQL Server set up properly. + +#### Script to Prepare SQL Server Express + +The following is a script for SQL Server Express. You may be configuring a default instance. This should be run on the computer that has SQL Server Express installed as it will have the right binaries necessary for accessing SQL Server programmatically. + +> :choco-warning: **WARNING** +> +> This script is SQL Server version dependent! Please see the TODO in the script below and adjust accordingly. + +```powershell +# https://docs.microsoft.com/en-us/sql/tools/configuration-manager/tcp-ip-properties-ip-addresses-tab +Write-Output "SQL Server: Configuring Remote Access on SQL Server Express." +$assemblyList = 'Microsoft.SqlServer.Management.Common', 'Microsoft.SqlServer.Smo', 'Microsoft.SqlServer.SqlWmiManagement', 'Microsoft.SqlServer.SmoExtended' + +foreach ($assembly in $assemblyList) { + $assembly = [System.Reflection.Assembly]::LoadWithPartialName($assembly) +} + +$wmi = New-Object Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer # connects to localhost by default +$instance = $wmi.ServerInstances | Where-Object { $_.Name -eq 'SQLEXPRESS' } + +$np = $instance.ServerProtocols | Where-Object { $_.Name -eq 'Np' } +$np.IsEnabled = $true +$np.Alter() + +$tcp = $instance.ServerProtocols | Where-Object { $_.Name -eq 'Tcp' } +$tcp.IsEnabled = $true +$tcp.Alter() + +$tcpIpAll = $tcp.IpAddresses | Where-Object { $_.Name -eq 'IpAll' } + +$tcpDynamicPorts = $tcpIpAll.IpAddressProperties | Where-Object { $_.Name -eq 'TcpDynamicPorts' } +$tcpDynamicPorts.Value = "" +$tcp.Alter() + +$tcpPort = $tcpIpAll.IpAddressProperties | Where-Object { $_.Name -eq 'TcpPort' } +$tcpPort.Value = "1433" +$tcp.Alter() + +# TODO: THIS LINE IS VERSION DEPENDENT! Replace MSSQL16 with whatever version you have +Write-Output "SQL Server: Setting Mixed Mode Authentication." +New-ItemProperty 'HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQLServer\' -Name 'LoginMode' -Value 2 -Force +# VERSION DEPENDENT ABOVE + +Write-Output "SQL Server: Forcing Restart of Instance." +Restart-Service -Force 'MSSQL$SQLEXPRESS' + +Write-Output "SQL Server: Setting up SQL Server Browser and starting the service." +Set-Service 'SQLBrowser' -StartupType Automatic +Start-Service 'SQLBrowser' + +Write-Output "Firewall: Enabling SQLServer TCP port 1433." +netsh advfirewall firewall add rule name="SQL Server 1433" dir=in action=allow protocol=TCP localport=1433 profile=any enable=yes service=any +#New-NetFirewallRule -DisplayName "Allow inbound TCP Port 1433" –Direction inbound –LocalPort 1433 -Protocol TCP -Action Allow + +Write-Output "Firewall: Enabling SQL Server browser UDP port 1434." +netsh advfirewall firewall add rule name="SQL Server Browser 1434" dir=in action=allow protocol=UDP localport=1434 profile=any enable=yes service=any +#New-NetFirewallRule -DisplayName "Allow inbound UDP Port 1434" –Direction inbound –LocalPort 1434 -Protocol UDP -Action Allow +``` + +## Step 2: Install Chocolatey Central Management Database Package + +The Chocolatey Central Management Database package: + +* Creates the `ChocolateyManagement` database if it does not exist. +* Migrates the database code (`DDL/DML`) to bring it up to the current version. +* That's it. + +> :choco-warning: **WARNING** +> +> Chocolatey Central Management packages do **NOT** install SQL Server. You must take care of that in the prerequisites. Do not even start on Chocolatey Central Management installs until you have a SQL Server instance up and ready. I repeat, SQL Server engine must be already installed. + +The Chocolatey Central Management database package will add or update a database to an existing SQL Server instance. + +> :choco-info: **NOTE** +> +> When you run this package installation, you will want to do so as integrated security, or with Windows Authentication. When you run the other two package installations, you will want to do so providing a connection string. + +### Package Parameters + +* `/ConnectionString:` - The SQL Server database connection string to be used to connect to the Chocolatey Central Management database. Defaults to default or explicit values for `/SqlServiceInstance` and `/Database`, along with Integrated Security (`Server=; Database=ChocolateyManagement; Trusted_Connection=True;`). The account should have `db_owner` access to the database ([database owner](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles#fixed-database-roles)). +* `/SqlServerInstance:` - Instance name of the SQL Server database to connect to. Alternative to passing full connection string with `/ConnectionString`. Uses `/Database` (below) to build a connection string. Defaults to ``. +* `/Database:` - Name of the SQL Server database to use. Alternative to passing full connection string with `/ConnectionString`. Uses `/SqlServerInstance` (above) to build a connection string. Defaults to `ChocolateyManagement`. +* `/SkipDatabasePermissionCheck` - By default, a check will be completed to ensure that the installing user has access to create a new database, based on the provided/computed connection string. If this check isn't required, for example, the database has already been created or permissions will error, this step can be skipped using this parameter. Available with CCM v0.2.0+. + +> :choco-info: **NOTE** +> +> Items suffixed with "`:`" mean a value should be provided. Items without are simply switches. + +### Database Authentication Scenarios + +* +* +* +* + +export const tabsOne = [ + { id: 'scenario-one', title: 'Scenario 1', isActive: true }, + { id: 'scenario-two', title: 'Scenario 2' }, + { id: 'scenario-three', title: 'Scenario 3' }, + { id: 'scenario-four', title: 'Scenario 4' } +]; + + + + + #### Windows Authentication to Local SQL Server + + You have set up the database to use Windows Authentication (or Mixed Mode Authentication). You are installing the database package on a single server, but connecting to an existing SQL Server in your environment. + + ##### Licensed SQL Server + + ```powershell + choco install chocolatey-management-database -y --package-parameters='/ConnectionString=""Server=Localhost;Database=ChocolateyManagement;Trusted_Connection=true;""' + ``` + + > :choco-info: **NOTE** + > + > Note the connection string doesn't include credentials. That's because Windows Authentication for SQL Server uses the context of what is running the process, whether that be a domain account or a local Windows account. + > + > You can use `--package-parameters` and/or `--package-parameters-sensitive` here, depending on whether you are specifying things that should not be logged (`--package-parameters-sensitive` is guaranteed to stay out of logs). + + > :choco-warning: **WARNING** + > + > **Installs**: Please ensure the user running the package installation is able to create databases unless you also pass `/SkipDatabasePermissionCheck` (in that case you simply need `db_owner` to the database being managed if it was pre-created). + > + > **Upgrades**: Please ensure the user running the package installation has been granted `db_owner` access to an existing database. + + --- + + ##### SQL Server Express + + ```powershell + choco install chocolatey-management-database -y --package-parameters='/ConnectionString=""Server=Localhost\SQLEXPRESS;Database=ChocolateyManagement;Trusted_Connection=true;""' + ``` + + > :choco-info: **NOTE** + > + > The above warnings and notes apply here as well. + + + + #### Active Directory Authentication to Remote SQL Server + + You have set up the database to use Windows Authentication (or Mixed Mode Authentication). You are installing the database package on a different server than your existing SQL Server is located on. + + ```powershell + choco install chocolatey-management-database -y --package-parameters='/ConnectionString=""Server=;Database=ChocolateyManagement;Trusted_Connection=true;""' + ``` + + > :choco-danger: **DANGER** + > + > SLOW DOWN right here. + > + > We recommend keeping the package installations on the same machine as SQL Server. It will reduce confusion and increase the accuracy of reporting. Run the installs/upgrades on the machine they apply to, so this should be the same machine that contains SQL Server (if on Windows). + > + + > :choco-warning: **WARNING** + > + > **Installs**: Please ensure the user running the package installation is able to create databases unless you also pass `/SkipDatabasePermissionCheck` (in that case you simply need `db_owner` to the database being managed if it was pre-created). + > + > **Upgrades**: Please ensure the user running the package installation has been granted `db_owner` access to an existing database. + + + + #### SQL Server Authentication to Local SQL Server + + The database has been setup to use Mixed Mode Authentication. Someone has already pre-created the login credentials for a SQL Server account and ensured the user has `db_owner` permissions to allow for changing schema. There is a high likelihood that the database has been pre-created. Now you want to install the package on the same machine where the sql server instance is located. + + ##### Licensed SQL Server + + ```powershell + choco install chocolatey-management-database -y --package-parameters="'/SkipDatabasePermissionCheck'" --package-parameters-sensitive='/ConnectionString=""Server=Localhost;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;""' + ``` + + > :choco-warning: **WARNING** + > + > **Installs**: Please ensure the login credentials provided are able to create databases unless you also pass `/SkipDatabasePermissionCheck` (in that case you simply need `db_owner` to the database being managed if it was pre-created). + > + > **Upgrades**: Please ensure the login credentials provided have been given `db_owner` access to an existing database. + + --- + + ##### SQL Server Express + + ```powershell + choco install chocolatey-management-database -y --package-parameters-sensitive='/ConnectionString=""Server=Localhost\SQLEXPRESS;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;""' + ``` + + > :choco-info: **NOTE** + > + > The above warnings and notes apply here as well. + + + + #### SQL Server Authentication to Remote SQL Server + + The database has been setup to use Mixed Mode Authentication. Someone has already pre-created the login credentials for a SQL Server account and ensured the user has `db_owner` permissions to allow for changing schema. There is a high likelihood that the database has been pre-created. Now you want to install the package on a different machine than where the sql server instance is located. + + ```powershell + choco install chocolatey-management-database -y --package-parameters="'/SkipDatabasePermissionCheck'" --package-parameters-sensitive='/ConnectionString=""Server=;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;""' + ``` + + > :choco-danger: **DANGER** + > + > SLOW DOWN right here. + > + > We recommend keeping the package installations on the same machine that SQL Server is in. It will reduce confusion and increase the accuracy of reporting. Run the installs/upgrades on the machine they apply to, so this should be the same machine that contains SQL Server (if on Windows). + + > :choco-warning: **WARNING** + > + > **Installs**: Please ensure the login credentials provided are able to create databases unless you also pass `/SkipDatabasePermissionCheck` (in that case you simply need `db_owner` to the database being managed if it was pre-created). + > + > **Upgrades**: Please ensure the login credentials provided have been given `db_owner` access to an existing database. + + + + +## Step 3: Set up SQL Server Logins And Access + +Once we have the database, we can create logins and map those logins to users in the database. + +> :choco-warning: **WARNING** +> +> Chocolatey Central Management packages do **NOT** configure SQL Server access. + +The difference between a login and a user when it comes to SQL Server accounts has long confused folks. Simply put: + +* Login (Authentication) - A login is at instance level (the credentials or Windows-based accounts) - [https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-login](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-login) +* User (Authorization) - A user is that login being mapped to a database and given roles/privileges (an instance can contain multiple databases) - [https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user) + +Notes: + +* Grant `db_datareader` and `db_datawriter` to the accounts you create for the web and service. +* You can share the same login for the two accounts, unless your internal best practices dictate using different passwords. + +```powershell +function Add-DatabaseUserAndRoles { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [string] $Username, + + [Parameter(Mandatory=$true)] + [string] $DatabaseName, + + [Parameter(Mandatory=$false)] + [string] $DatabaseServer = 'localhost\SQLEXPRESS', + + [Parameter(Mandatory=$false)] + [string[]] $DatabaseRoles = @('db_datareader'), + + [Parameter(Mandatory=$false)] + [string] $DatabaseServerPermissionsOptions = 'Trusted_Connection=true;', + + [Parameter(Mandatory=$false)] + [switch] $CreateSqlUser, + + [Parameter(Mandatory=$false)] + [string] $SqlUserPassword + ) + + $LoginOptions = "FROM WINDOWS WITH DEFAULT_DATABASE=[$DatabaseName]" + if ($CreateSqlUser) { + $LoginOptions = "WITH PASSWORD='$SqlUserPassword', DEFAULT_DATABASE=[$DatabaseName], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF" + } + + $addUserSQLCommand = @" +USE [master] +IF EXISTS(SELECT * FROM msdb.sys.syslogins WHERE UPPER([name]) = UPPER('$Username')) +BEGIN + DROP LOGIN [$Username] +END + +CREATE LOGIN [$Username] $LoginOptions + +USE [$DatabaseName] +IF EXISTS(SELECT * FROM sys.sysusers WHERE UPPER([name]) = UPPER('$Username')) +BEGIN + DROP USER [$Username] +END + +CREATE USER [$Username] FOR LOGIN [$Username] + +"@ + + foreach ($DatabaseRole in $DatabaseRoles) { + $addUserSQLCommand += @" + +ALTER ROLE [$DatabaseRole] ADD MEMBER [$Username] +"@ + } + + Write-Output "Adding $UserName to $DatabaseName with the following permissions: $($DatabaseRoles -Join ', ')" + Write-Debug "running the following: \n $addUserSQLCommand" + + + $Connection = New-Object System.Data.SQLClient.SQLConnection + $Connection.ConnectionString = "server='$DatabaseServer';database='master';$DatabaseServerPermissionsOptions" + $Connection.Open() + $Command = New-Object System.Data.SQLClient.SQLCommand + $Command.CommandText = $addUserSQLCommand + $Command.Connection = $Connection + $Command.ExecuteNonQuery() + $Connection.Close() +} + +# Please choose from one of the three listed account types below. The commands will grant database permissions to a user account of your choice. This account will be used in your Connection String for the CCM Service and Web package installs ahead. + +# Add Sql Server Login / User: +Add-DatabaseUserAndRoles -DatabaseName 'ChocolateyManagement' -Username 'ChocoUser' -SqlUserPassword '' -CreateSqlUser -DatabaseRoles @('db_datareader', 'db_datawriter') + +# Add Local Windows User: +Add-DatabaseUserAndRoles -DatabaseName 'ChocolateyManagement' -Username "$(hostname)\ChocolateyLocalAdmin" -DatabaseRoles @('db_datareader', 'db_datawriter') + +# Add Active Directory Domain User to a default instance of SQL Server: +Add-DatabaseUserAndRoles -DatabaseServer 'localhost' -DatabaseName 'ChocolateyManagement' -Username "\" -DatabaseRoles @('db_datareader', 'db_datawriter') +``` + +## Step 4: Verify Installation + +The purpose of the `chocolatey-management-database` package is to create and deploy the schema for the database that is used by the Chocolatey Central Management Service and Website. This can be verified by using something like SQL Server Management Studio to connect to the SQL Server Instance and: + +* Check that a database (by default named `ChocolateyManagement`) has been created +* That a set of tables have been created within this database +* That permissions have been set for accounts + +## FAQ + +### Can I use MySQL (or PostgreSQL)? + +Unfortunately only SQL Server SKUs work with Chocolatey Central Management at this time. You can use SQL Server Express in smaller shops without additional costs. + +### What is the Chocolatey Central Management compatibility matrix? + +Chocolatey Central Management has specific compatibility requirements with quite a few moving parts. It is important to understand that there are some Chocolatey Agent versions that may not be able to communicate with some versions of Chocolatey Central Management and vice versa. Please see the for details. + +### What is the minimum required configuration for the appsettings.json file? + +As of Chocolatey Central Management v0.6.2, the default settings in the `appsettings.json` for the database package are: + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + } +} +``` + +> :choco-info: **NOTE** +> +> This file will usually be condensed into a single line with the values encrypted. + +## Common Errors and Resolutions + +### Chocolatey Central Management database package installs without error, but ChocolateyManagement database is not created + +In the beta version of the Chocolatey Central Management database package, if there was an error during the creation of the database, no exit code was used. As a result, the package could state that it was installed correctly, but the database would not have been created. This has been corrected in the 0.1.0 release of Chocolatey Central Management. + +When this occurs, the problem is typically the connection string being used to connect to the database. The advice is to verify that the connecting string is valid, and attempt the installation again. + +### The term 'Install-ChocolateyAppSettingsJsonFile' is not recognized as the name of a cmdlet, function, script file, or operable program. + +In the beta version of Chocolatey.Extension, there was a Cmdlet named Install-ChocolateyAppSettingsJsonFile and this was used in the 0.1.0-beta-20181009 release of the Chocolatey Central Management components. In the final released version of the Chocolatey.Extension, this was renamed to Install-AppSettingsJsonFile. + +As a result, the Chocolatey Central Management beta no longer works with the released version of Chocolatey.Extension. This will be corrected once the next release of the Chocolatey Central Management components is completed. + +### Cannot process command because of one or more missing mandatory parameters: FilePath + +During the creation of Chocolatey Central Management, some additional PowerShell cmdlets were created, and these are installed as part of the Chocolatey Extension package. These cmdlets went through a number of iterations, and as a result, different combinations of Chocolatey Central Management packages were incompatible with the Chocolatey Extension package, resulting in the error: + +`Cannot process command because of one or more missing mandatory parameters: FilePath` + +The guidance in this case is either to pin to the specific version of the Chocolatey Extension package required by the version of Chocolatey Central Management being used, or update to the latest versions of all packages, where the situation should be addressed. + +### ERROR: The term ‘Install-SettingsJsonFile’ is not recognized as the name of a cmdlet, function, script file, or operable program. + +This is https://github.com/chocolatey/chocolatey-licensed-issues/issues/161. + +There are two workarounds noted: + +* Delete the `appsettings.json` file prior to upgrade. +* Do not pass database details if they have not changed during upgrade. + +### ERROR: System.Data.SqlClient.SqlException: Could not allocate space for object 'dbo.AbpAuditLogs'.'PK_AbpAuditLogs' in database 'ChocolateyManagement' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup. + +This occurs when the `ChocolateyManagement` database has reached its maximum configured size. The following SQL query resolves the issue by increasing the database size to 200 MB. You can increase this value up to 10 GB (in MB notation) if using SQL EXPRESS or higher if using a licensed edition of SQL Server. Ensure you have the free space available to support whatever maximum you decide upon. + +```sql +USE master; +GO +ALTER DATABASE ChocolateyManagement +MODIFY FILE + (NAME = ChocolateyManagement, + SIZE = 200MB); +GO +``` + + diff --git a/src/content/docs/en-us/central-management/setup/index.mdx b/src/content/docs/en-us/central-management/setup/index.mdx new file mode 100644 index 00000000000..5b17dd3cf36 --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/index.mdx @@ -0,0 +1,135 @@ +--- +order: 20 +xref: ccm-setup +title: Setup +description: Information on how to setup CCM +--- +import Xref from '@components/Xref.astro'; + +Installing CCM takes a little more pre-thought than simply running the package installs. +While it is envisioned that CCM will be installed across multiple servers (split installation), it is certainly possible to run CCM on a single server (monolithic). + +When setting up Central Management, currently, the CCM packages do not provision the SQL Server Database Permissions that are required for the CCM components to function. It is assumed that the necessary permissions have already been provided (see the [FAQ](#how-can-i-add-sql-server-permissions-through-powershell) for one method of doing it). + +> :choco-warning: **WARNING** +> +> * Unless otherwise noted, please follow these steps in **exact** order. These steps build on each other and need to be completed in order. +> +> * All deployed components of the CCM packages should **always** be the **SAME VERSION**. The only time you should not have this is when you are in a state of upgrading and that transition time should be quite short. +> + +> :choco-info: **NOTE** +> +> * Please read through all of this prior to running installation as you could run into issues that require support to help you correct later. +> +> * If this seems like a lot to set up, you have access to the which makes setup of Chocolatey Central Management just running one Powershell script. We also offer our . It comes preloaded with Chocolatey Central Management and other Chocolatey recommended infrastructure. +> + +## High Level Requirements + +Central Management packages require at a minimum: + +* Chocolatey for Business (C4B) Edition +* Windows Server 2016 + +Each package further defines dependencies that they include. + +Additionally, the Chocolatey Central Management components should be installed onto servers having a static IP address assigned, in addition to an appropriately configured DNS A record. Failure to ensure this configuration is applied could lead to unexpected errors with agent check-in and deployment operations. + +## Step 1: Internalize Packages + +> :choco-info: **NOTE** +> +> Make sure you have read over the prior to starting internalization as this will save you some headaches. + +The complete installation of CCM requires several packages that are available from the community repository. Let's get them internalized. We will internalize them to a `C:\packages` directory. It is highly recommended that you push the packages to an internal repository before continuing with other steps in this guide. Change the values in the first lines of this script to match what you need in your environment. + +```powershell +# To run this, you need Chocolatey for Business installed (chocolatey / chocolatey.extension). + +# Update the values and remove the < > +$YourInternalRepositoryPushUrl = '' +$YourInternalRepositoryApiKey = '' +# You get this from the chocolatey.license.xml file: +$YourBusinessLicenseGuid = '' + +if(!(Test-Path C:\packages)){ + $null = New-Item C:\packages -ItemType Directory +} + +# Download Chocolatey community related items, no internalization necessary +choco download chocolatey chocolateygui --force --source="'https://community.chocolatey.org/api/v2/'" --output-directory="'C:\packages'" + +# This is for other Community Related Items +choco download dotnet4.5.2 dotnetfx --force --internalize --internalize-all-urls --append-use-original-location --source="'https://community.chocolatey.org/api/v2/'" --output-directory="'C:\packages'" + + +# This is for SQL Server Express +# Not necessary if you already have SQL Server +@('sql-server-express','sql-server-management-studio') | Foreach-Object { + choco download $_ --force --internalize --internalize-all-urls --append-use-original-location --source="'https://community.chocolatey.org/api/v2/'" --output-directory="'C:\packages'" +} + +# We must use the 6.x.x versions of these packages, so we need to download/internalize these specific items. At the time of publishing, the most recent version of this package is 6.0.5, but later package versions (within the 6.x.x release) are expected to work. +@('dotnet-6.0-runtime', 'dotnet-6.0-aspnetruntime') | Foreach-Object { + choco download $_ --version 6.0.5 --force --internalize --internalize-all-urls --append-use-original-location --source="'https://community.chocolatey.org/api/v2/'" --output-directory="'C:\packages'" +} + +# Starting with v0.9.0 of the CCM Website package, it uses dotnet-aspnetcoremodule-v2. At the time of publishing, the most recent version of this package 16.0.22108, but later package versions (within the 17.x.x release) are expected to work +choco download dotnet-aspnetcoremodule-v2 --version 16.0.22108 --force --internalize --internalize-all-urls --append-use-original-location --source="'https://community.chocolatey.org/api/v2/'" --output-directory="'C:\packages'" + +# Download Licensed Packages +## DO NOT RUN WITH `--internalize` and `--internalize-all-urls` - see https://github.com/chocolatey/chocolatey-licensed-issues/issues/155 +choco download chocolatey-agent chocolatey.extension chocolatey-management-database chocolatey-management-service chocolatey-management-web --force --source="'https://licensedpackages.chocolatey.org/api/v2/'" --ignore-dependencies --output-directory="'C:\packages'" --user="'user'" --password="'$YourBusinessLicenseGuid'" + +# Push all downloaded packages to your internal repository +Get-ChildItem C:\packages -Recurse -Filter *.nupkg | Foreach-Object { choco push $_.Fullname --source="'$YourInternalRepositoryPushUrl'" --api-key="'$YourInternalRepositoryApiKey'"} +``` + +## Step 2: Setup Central Management Database + +Please see . + +> :choco-info: **NOTE** +> +> While we'd like to support different database engines at some point in the distant future, currently only SQL Server is supported. + +## Step 3: Setup Central Management Windows Service(s) + +Please see . + +> :choco-info: **NOTE** +> +> If Step 1 is not succesful, do not move on to this step until you resolve issues with database setup. + +## Step 4: Setup Central Management Website + +Please see . + +> :choco-info: **NOTE** +> +> If Step 1 or 2 is not successful, do not move on to this step until you resolve issues with previous steps. + +## Step 5: Setting up Agent Machines + +Please see . + +## Upgrading? + +Looking for upgrade instructions? See . + +## Common Errors and Resolutions + +### Executable script code found in signature block + +When attempting to install some components of Chocolatey, you may have seen this error. This was a bug due to how the script at [Step 1: Internalize Packages](#step-1-internalize-packages) was [internalizing packages](https://github.com/chocolatey/chocolatey-licensed-issues/issues/155). + +Please go back through Step 1 and re-internalize those packages. You may need to overwrite any you would have pushed up (many if it won't let you do a push). In Nexus, you can remove the existing items and then upload through there. In other repositories you may need to remove the existing package versions you deployed first. + +### The client reports successful check-in, but nothing is showing up in CCM + +You need to check the CCM service logs. The agent will always report success when it communicates with the service successfully. The service may reject what it receives, but due to security settings, it won't tell the client about that. + +The logs are located at `$env:ChocolateyInstall\logs\ccm-service.log`. If you are on a version of CCM prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + + diff --git a/src/content/docs/en-us/central-management/setup/service.mdx b/src/content/docs/en-us/central-management/setup/service.mdx new file mode 100644 index 00000000000..f2b550b4403 --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/service.mdx @@ -0,0 +1,614 @@ +--- +order: 20 +xref: ccm-service +title: Service +description: Information on how to setup the CCM Service +--- +import Xref from '@components/Xref.astro'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +This is the service that the agents (`chocolatey-agent`) communicates with. You could install one or more of these depending on the size of your environment (not multiple on one machine though). The FQDN and certificate used determine what the URL will be for the agents to check into Chocolatey Central Management. + +> :choco-warning: **WARNING** +> +> Unless otherwise noted, please follow these steps in **exact** order. These steps build on each other and need to be completed in order. + +> :choco-warning: **WARNING** +> +> In order to run the Chocolatey Central Management Service a user with Administrator access is required. By default, a new user named `ChocolateyLocalAdmin` will be created and configured to run the Chocolatey Central Management Service. In addition, `Logon as Service` and `Logon as Batch` privileges will be asserted for this user. If attempting to run the Chocolatey Central Management Service as a different user, these permissions will be required. + +## Step 1: Complete Prerequisites + +> :choco-warning: **WARNING** +> +> The must be setup and available, along with . + +* +* PowerShell 5.1 + +## Step 2: Install Chocolatey Central Management Service Package + +By default the service will install as the local administrative user `ChocolateyLocalAdmin` (and manage the password as well). However you can specify your own user with package parameters (such as using a domain account). You will need to specify credentials to the database as we'll see in scenarios below. + +> :choco-warning: **WARNING** +> +> Timezones are super important here and time synchronization is really important when generating SSL Certificates. You want to make sure this information is correct. Otherwise there is a potential edge case you could generate an SSL Certificate that is not yet valid. As the service package could generate an SSL certificate if you don't pass an existing thumbprint, it's best to ensure that time synchronization is not an issue with the machine you are installing this on. + +### FQDN Usage + +When installing the Chocolatey Central Management Service, the default is to use the Fully Qualified Domain Name (FQDN) of the machine that it is being installed on. As a result, there is an expectation that the certificate (either the self-signed certificate that is created during installation, or the existing certificate which is configured with the [CertificateThumbprint](#package-parameters-1) parameter) that is used to secure the transport layer of this service also uses the same FQDN. + +```powershell +# Find FDQN for current machine +$hostName = [System.Net.Dns]::GetHostName() +$domainName = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().DomainName + +if(-Not $hostName.endswith($domainName)) { + $hostName += "." + $domainName +} + +choco config set --name="'centralManagementServiceUrl'" --value="'https://$($hostname):24020/ChocolateyManagementService'" +``` + +If this is not the case, it will be necessary to provide the information to the package about the actual name for the machine that is being used. When using a self-signed certificate, this can be specified using the `CertificateDnsName`, and when using an existing certificate, no additional parameters are required. In both cases, it will be necessary to also set the `centralManagementServiceUrl` [configuration parameter](#centralmanagementserviceurl). This can be done using the following command: + +```powershell +choco config set --name="'centralManagementServiceUrl'" --value="'https://:24020/ChocolateyManagementService'" +``` + +### Package Parameters + +Note items with "`:`" mean a value should be provided. Items without are simply switches. + +* `/Username:` - Username to run the service under. Defaults to `ChocolateyLocalAdmin`. This should be a local Administrator - this is typically ensured during installation. `Logon as Service` and `Logon as Batch` privileges are also ensured. +* `/Password:` - Password for the user. Default is the [Chocolatey Managed Password](#chocolatey-managed-password). +* `/EnterPassword` - Receive the password at runtime as a secure string. Requires input at runtime whe installing/upgrading the package. +* `/NoRestartService` - Do not shut down and restart the service. You will need to restart later to take advantage of new service information. +* `/DoNotReinstallService` - Do not re-install the service. +* `/PortNumber:` - The port the Chocolatey Management Service will listen on. This will automatically create a rule to open the firewall on the port specified. Defaults to `24020`. +* `/CertificateDnsName:` - The DNS name of the self-signed certificate that is generated if no existing certificate thumbprint is provided using the `/CertificateThumbprint` parameter (below). Defaults to ``. +* `/CertificateThumbprint:` - Provide the thumbprint of an existing certificate (already installed in `LocalMachine\TrustedPeople` certificate store) to use for secure communication with clients. Defaults to a new self-signed SSL certificate on first installation / reuses existing on upgrades. +* `/ConnectionString:` - The SQL Server database connection string to be used to connect to the Chocolatey Central Management database. Defaults to default or explicit values for `/SqlServiceInstance` and `/Database`, along with Integrated Security (`Server=; Database=ChocolateyManagement; Trusted_Connection=True;`). The account should have `db_datareader`/`db_datawriter` access to the database ([data reader / data writer](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles#fixed-database-roles)). +* `/SqlServerInstance:` - Instance name of the SQL Server database to connect to. Alternative to passing full connection string with `/ConnectionString`. Uses `/Database` (below) to build a connection string. Defaults to ``. +* `/Database:` - Name of the SQL Server database to use. Alternative to passing full connection string with `/ConnectionString`. Uses `/SqlServerInstance` (above) to build a connection string. Defaults to `ChocolateyManagement`. + +> :choco-info: **NOTE** +> +> Items suffixed with "`:`" mean a value should be provided. Items without are simply switches. + +### Service Settings + +* Service Name: **chocolatey-central-management** +* Service Displayname: **Chocolatey Central Management Service** +* Description: **Chocolatey Central Management Service is a service for Chocolatey** +* Service Startup: **Automatic** +* Service Username: **ChocolateyLocalAdmin** or '`/Username:`' + +### Chocolatey Central Management Service Configuration + +For most installations, the default values for the Chocolatey Central Management Service configuration should be all that is required. However, if you need to modify this configuration, then full details of what can be controlled is detailed on the . + +### Chocolatey Configuration + +There are a number of different Chocolatey Configuration values that can be set for the Chocolatey Central Management Service. The main setting that _has_ to be set is detailed below, and you can find a complete list on the . + +* `centralManagementServiceUrl` = **' '** (empty) - The URL that should be used to communicate with Chocolatey Central Management. It should look something like `https://servicemachineFQDN:24020/ChocolateyManagementService`. See . Defaults to '' (empty). NOTE: Chocolatey Agent and Chocolatey Central Management Service share this value on a machine that contains both. If blank, the Chocolatey Central Management Service will construct a URL based on defaults of the machine, but is required to be set for Agents. + +> :choco-warning: **WARNING** +> +> The Chocolatey Agent installed on the same machine that has the Chocolatey Central Management Service installed will share the `centralManagementServiceUrl` setting, so that agent can only report into that Chocolatey Central Management Service. + +### Chocolatey Managed Password + +When Chocolatey manages the password for a local Administrator, it creates a very complex password: + +* It is 32 characters long. +* It uses uppercase, lowercase, numbers, and symbols to meet very stringent complexity requirements. +* The password is different for every machine. +* Due to the way that it is generated, it is completely unguessable. +* No one at Chocolatey Software could even tell you what the password is for a particular machine without local access. + +### Chocolatey Central Management Service Windows Account Considerations + +* Windows Account (required, defaults to `ChocolateyLocalAdmin`) + * The Chocolatey Central Management Service requires **an** administrative account, whether that is a domain account or a local account - it just needs to be a local admin (a member of the Administrators group). + * The Chocolatey Central Management Service doesn't specifically require the `ChocolateyLocalAdmin` account. Any Windows account can be used. The `ChocolateyLocalAdmin` is used as the default if one is not specified. + * Upon use of an account during installation, it will make that account a member of the Administrators account. + * The account used will also be granted `LogonAsService` and `LogonAsBatch` privileges. +* Managed Password (optional, default) + * When the `ChocolateyLocalAdmin` account is used, it generates a managed password that is different on every machine. The password is 32 characters long, meets complexity requirements, and is basically very strong. + * To determine the managed password, it would take access to the box and someone from Chocolatey Software who has access to the algorithm used to generate the password (more information in the FAQs below). +* Rotating/Updating Passwords + * If a different account with a rotating password is used, the service will need to be updated with the new credentials and restarted soon after changing that password. + * The managed password is not currently updated/rotated, but it is something we are looking to implement once we have figured out the best approach to do so. + +### Database Authentication Scenarios + +* +* +* +* + +export const tabsOne = [ + { id: 'scenario-one', title: 'Scenario 1', isActive: true }, + { id: 'scenario-two', title: 'Scenario 2' }, + { id: 'scenario-three', title: 'Scenario 3' }, + { id: 'scenario-four', title: 'Scenario 4' } +]; + + + + + #### Windows Authentication to Local SQL Server + + Monolithic - you have set up the to use Windows Authentication (or Mixed Mode Authentication). You wish to use a local Windows account to connect to the local database. + + ##### Specify User + + ```powershell + choco install chocolatey-management-service -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True; /Username:'" --package-parameters-sensitive="'/Password:'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the user `` has been given `db_datareader` and `db_datawriter` access to the database. See . + + --- + + ##### `ChocolateyLocalAdmin` User + + ```powershell + choco install chocolatey-management-service -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the user `ChocolateyLocalAdmin` has been given `db_datareader` and `db_datawriter` access to the database. See . + + > :choco-info: **NOTE** + > + > Note the connection string doesn't include credentials. That's because Windows Authentication for SQL Server uses the context of what is running it and why the service itself needs the right user/password. + + + + #### Active Directory Authentication to Remote SQL Server + + Split - you have set up the to use Windows Authentication (or Mixed Mode Authentication). You wish to use an Active Directory account to connect to an existing SQL instance. + + ```powershell + choco install chocolatey-management-service -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True; /Username:'" --package-parameters-sensitive="'/Password:'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the user `` has been given `db_datareader` and `db_datawriter` access to the database. See . + + > :choco-info: **NOTE** + > + > Note the connection string doesn't include credentials. That's because Windows Authentication for SQL Server uses the context of what is running it and why the service itself needs the right user/password. + + + + #### SQL Server Authentication to Local SQL Server + + Monolithic - you are installing the management service on the same machine as a SQL Server Express instance. You likely have a smaller environment where you have up to 1,000 machines. You have set up the to use Mixed Mode Authentication. + + ##### Licensed SQL Server + + ```powershell + choco install chocolatey-management-service -y --package-parameters-sensitive="'/ConnectionString:Server=Localhost;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + --- + + ##### SQL Server Express + + ```powershell + choco install chocolatey-management-service -y --package-parameters-sensitive="'/ConnectionString:Server=Localhost\SQLEXPRESS;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + + + #### SQL Server Authentication to Remote SQL Server + + Split - you are installing the management service(s) on a server, and targeting an existing SQL Server instance in your organization. You have set up the to use Mixed Mode Authentication. + + ```powershell + choco install chocolatey-management-service -y --package-parameters-sensitive="'/ConnectionString:Server=;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + + + +## Step 3: Verify Installation + +The `chocolatey-management-service` is responsible for making a number of changes to your system. A successful installation of this package can be verified by: + +* Open the services snap-in (services.msc) and check for the presence of the `Chocolatey Management Service` which should be in the "Started" state. +* The installation folder for `chocolatey-management-service` is at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service`. +* Open the Service log file located at `$env:ChocolateyInstall\logs\ccm-service.log` and verify that there are no recently reported errors. If you are on a version of Chocolatey Central Management prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +## FAQ + +### Why is the Chocolatey Central Management Service not marked as 'Stopped' when there is an error during its execution? + +By default, all exceptions that occur within the Chocolatey Central Management Service are logged to the applications log file (ccm-service.log). However, these exceptions do not result in actually physically stopping the service. +If an exception is thrown within the application, and you checked the Chocolatey Central Management Service in the Windows Services snap-in, you would still see that the service is running. +Due to the nature of how exceptions occur within the Chocolatey Central Management Service, this is normally perfectly fine since operations are attempted again at a later date. +There are occasions, for example when something in the `appsettings.json` file has been misconfigured, that an exception can be thrown and the service doesn't start up correctly, but it is still marked as Running. +This situation can occur with any version of Chocolatey Central Management up to and including v0.6.2, but it is something that we are looking to address in a future release. + +### What is the minimum required configuration for the `appsettings.json` file? + +As of Chocolatey Central Management v0.6.2, the default configuration values in the `appsettings.json` for the Chocolatey Central Management service are: + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + }, + "CertificateThumbprint": "" +} +``` + +> :choco-info: **NOTE** +> +> This file will usually be condensed into a single line, with the values encrypted. + +If these values are removed or incorrect, the Chocolatey Central Management service may fail to start. +To correct this, ensure all configuration is present and correct and then restart the Chocolatey Central Management service. + +```powershell +Get-Service -Name chocolatey-central-management | Restart-Service +``` + +### How can we increase the level of logging for Chocolatey Central Management? + +This can be done by changing the level value, which should be currently INFO, to use DEBUG, as per the following: + +```xml + + + + + +``` + +In the following files: + +* `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\log4net.config`. If you are on a version less than 0.2.0, then it will be in `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\chocolatey-central-management.exe.config`. +* `$env:ChocolateyInstall\lib\chocolatey-agent\tools\service\chocolatey-agent.exe.config` + +When the value is changed, the services may also need restarted. + +### How can we view what SSL registrations have been made by the installation of chocolatey-management-service? + +By default, the installation of the `chocolatey-management-service` package will register a single `netsh` binding between a self-signed certificate (created at the point of installation) and port 24020. This can be verified using the following command: + +```powershell +netsh http show sslcert +``` + +>:choco-info: **NOTE** +> +>Starting with Chocolatey Central Management 0.6.0, `netsh` bindings are no longer created during the installation of the Chocolatey Central Management Service package. On installing the 0.6.0 Chocolatey Central Management Service package, any existing `netsh` bindings that were created specifically for Chocolatey Central Management usage will be removed. + +### How can we remove a `netsh` binding that has been created? + +If you need to remove a `netsh` binding, you can do that using the following command: + +```powershell +netsh http delete sslcert ipport=0.0.0.0: +``` + +> :choco-info: **NOTE** +> +> Here, `` should be replaced with the Port Number that has been registered. +> +>Starting with Chocolatey Central Management 0.6.0, `netsh` bindings are no longer created during the installation of the Chocolatey Central Management Service package. On installing the 0.6.0 Chocolatey Central Management Service package, any existing `netsh` bindings that were created specifically for Chocolatey Central Management usage will be removed. + +### Can we manually create an SSL binding? + +If required, it is possible to manually create a `netsh` binding. This is done using the following command: + +```powershell +netsh http add sslcert ipport=0.0.0.0: certhash= appid={} +``` + +> :choco-info: **NOTE** +> +> Here, `` should be replaced with the Port Number to be used for the registration. `` should be replaced with the thumbprint for the certificate that is to be used for the registration. `` should be replaced with a random guid in the following format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` +> +>Starting with Chocolatey Central Management 0.6.0, `netsh` bindings are no longer created during the installation of the Chocolatey Central Management Service package. On installing the 0.6.0 Chocolatey Central Management Service package, any existing `netsh` bindings that were created specifically for Chocolatey Central Management usage will be removed. + +### Can we install the Chocolatey Central Management Service behind a load balancer? + +Unfortunately, this is not a supported scenario. If you are trying to load balance requests to the Chocolatey Central Management service, you should install multiple instances on multiple machines and point clients explicitly to an instance so they can work together. If you are trying to load balance other things on a machine and the Chocolatey Central Management service just happens to be there (like with QDE), move the Chocolatey Central Management service to a different machine or allow direct connections to the box for Chocolatey Central Management. + +> :choco-info: **NOTE** +> +> If you are an expert in managing X509 certificates with load balancing, you can certainly set this up, but if you can't get it to work, move to a supported scenario. The Support team will tell you the same. + +### We want to set up the Chocolatey Central Management service to use a domain account that will have local admin privileges on each box. Can we do this? + +Yes, absolutely. You will pass those credentials through at install/upgrade time, and you will also want to turn on the feature `useRememberedArgumentsForUpgrades` (see ) so that future upgrades will have that information available. The remembered arguments are stored encrypted on the box (and that encryption is reversible so you may opt to pass that information each time). + +* `/Username`: - provide username - instead of using the default 'ChocolateyLocalAdmin' user. This user should be a local Administrator. +* `/Password`: - optional password for the user. +* `/EnterPassword` - receive the password at runtime as a secure string + +You would pass something like `choco install chocolatey-management-service -y --params="'/Username:domain\account /EnterPassword'"` to securely pass the password at runtime. You could also run `choco install chocolatey-management-service -y --params="'/Username:'" --package-parameters-sensitive="'/Password:'"` (or do it as part of `choco upgrade`). + +### Is the password stored anywhere? + +No, that would reduce the security of the password. It exists in memory long enough to set the value on the user and the service and then it is cleared. + +There is no storage of the password anywhere other than how Windows stores passwords. + +### We are going to use our own account with a rotating password. When we rotate the password for the account that we use for the Chocolatey Central Management Service, what do we need to do? + +Like with any service that uses rotating passwords, you will need to redeploy the service or go into the Services Management console and update the password. As it is much faster to deploy out that update, you can do something like `choco upgrade chocolatey-management-service -y --params="'/Username:domain\account'" --package-parameters-sensitive="'/Password:newpassword'" --force` (the `--force` ensures the code is redeployed). + +### Tell me more about the Chocolatey managed password. + +So you've seen from above that + +* It is 32 characters long. +* It uses uppercase, lowercase, numbers, and symbols to meet very stringent complexity requirements. +* The password is different for every machine. +* Due to the way that it is generated, it is completely unguessable. +* No one at Chocolatey Software could even tell you what the password is for a particular machine without local access. + +Chocolatey uses something unique about each system, along with an encrypted value in the licensed code base to generate the base password. It then makes some other changes to ensure that the password meets complexity requirements. We won't give you the full algorithm of how the password is generated as knowing the algorithm would be a security issue. Like having a partial picture of a key; you could start working on how to break in. Unlike a picture of a key, even knowing the full algorithm doesn't get you everything you need as you would require local access to **each** machine to determine the password for **each** machine. + +### Is the managed password stored or logged anywhere? + +No, that would reduce the security of the password. It exists in memory long enough to set the value on the user and the service and then it is cleared. + +There is no storage of the password anywhere other than how Windows stores passwords. + +### Is the managed password the same on every machine? + +No, a different password is created for every machine at deployment. + +### How would someone potentially get access to the managed password? + +The Chocolatey licensed code base is encrypted, so only people that work at Chocolatey Software would be able to determine the password for a particular box (just that one) **IF** they have local access to that box. Even with all of the information and the algorithm, it's still going to take our folks a while to determine the password. That gets them access to one machine. Of course, Chocolatey folks are not going to do this for obvious reasons. + +Let's realize this to its full potential - If someone were able to hack the Chocolatey licensed codebase, they would be able to determine the full password algorithm. Then they'd also need to hack into your infrastructure and get local access to every box that they wanted to get the Chocolatey-managed password so they could get admin access to just that box. Taking this out a bit further, it's reasonable to assume that if someone has hacked into your infrastructure, it's highly unlikely they are going to be using a non-Administrator account to get local access to a box so they can get the password for an Administrator account for just that one box. It's more likely they would would already have a local admin account for the boxes they are attacking, and are likely to seek other attack vectors that are much less sophisticated. + +### Do you rotate the managed password on a schedule? + +We are looking to do this in a future release. We may make the schedule configurable. + +### Can I take advantage of Chocolatey managed passwords with my own Windows services? + +Yes, absolutely. If you use Chocolatey For Business's PowerShell Windows Services code, you will be able to install services and have Chocolatey manage the password for those as well. + +### What is the Chocolatey Central Management Component Compatibility Matrix? + +Chocolatey Central Management has specific compatibility requirements with quite a few moving parts. It is important to understand that there are some Chocolatey Agent versions that may not be able to communicate with some versions of Chocolatey Central Management and vice versa. Please see the for details. + +### I entered incorrect database details on install. Do I need to reinstall to fix that? + +It depends. You can simply go to the `appsettings.json` file and adjust the connection string to be plaintext. It will remain in plaintext though (at least until upgrade), so if you have actual password details you need to keep secure, you should do a force installation using the `--force` parameter. + +1. The file is located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\appsettings.json`. +1. You would open that up in an editor and modify the `"Default"` connection string. +1. It would look something like the following (adjust the connection string as necessary): + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + } +} +``` + +1. You may find it all on a single line in the file, and that is okay. +1. Restart the service by running the following from an admin powershell session: `Get-Service chocolatey-management-service | Stop-Service; Get-Service chocolatey-management-service | Start-Service` + +> :choco-warning: **WARNING** +> +> Do not put `sec:` or `secure-` at the start (prefix) of any values that you are adding/modifying directly. That tells Chocolatey components they are encrypted and it will attempt to decrypt them for use. If that is done incorrectly, it will cause things to crash. + +### Can we use an account for the service that is not a local Administrator? + +No. This is not a supported scenario. The installation will attempt to ensure that the user becomes an Administrator if they are not, in addition to `Logon as Service` and `Logon as Batch` privileges. + +### Where is the management service installed? + +The installation folder for `chocolatey-management-service` is at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service`. + +___ + +## Common Errors and Resolutions + +### Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32". + +You may see this error message when attempting to install version 0.6.0 of the `chocolatey-management-service` package. + +Please see [Licensed Issue #242](https://github.com/chocolatey/chocolatey-licensed-issues/issues/242) for details on a workaround that can be used. This bug will be addressed in the 0.6.1 release of Chocolatey Central Management. + +### Agents are unable to communicate with Chocolatey Central Management Service and the Chocolatey Central Management service log shows "Unable to start Kestrel". + +This is a known issue with Chocolatey Central Management v0.6.0 and v0.6.1 due to changes in how the Chocolatey Central Management service is hosted. +`netsh` bindings are no longer required for the Chocolatey Central Management service, and you may also notice the bindings for the Chocolatey Central Management service removed during upgrade. +The identifying symptom of this issue is the following in the Chocolatey Central Management service log file: + +```log +[FATAL] Microsoft.AspNetCore.Server.Kestrel (0): Unable to start Kestrel +``` + +In these versions, the best workaround is to ensure that your `LocalMachine\TrustedPeople` certificate store contains only one certificate with a DNS name that matches the Chocolatey Central Management service URL setting in your `chocolatey.config` file, and that this certificate has the `ServerAuthentication` usage applied to it. + +Starting in v0.6.2, it is possible to configure the Chocolatey Central Management service to select a specific certificate to use. +The Chocolatey Central Management service log file error will also now contain slightly more information, looking something like this: + +```powershell +[FATAL] ChocolateyServiceManagementTask: Microsoft.AspNetCore.Server.Kestrel [0] +Unable to start Kestrel. +System.InvalidOperationException: Certificate 3edebdfee63b57b0a0a12a079ed8da791da03ba7 cannot be used as an SSL server certificate. It has an Extended Key Usage extension but the usages do not include Server Authentication (OID 1.3.6.1.5.5.7.3.1). +``` + +You may also receive a differently-worded error if the certificate used by the Chocolatey Central Management service in the `LocalMachine\TrustedPeople` store is removed. + +Starting in Chocolatey Central Management v0.6.2, the Chocolatey Central Management Service package will attempt to select an appropriate certificate during installation, and store the thumbprint in the `appsettings.json` file. +You can also specify the thumbprint for the certificate to use as the `/CertificateThumbprint` package parameter during installation or upgrade. + +If you need to change the certificate you're using after installation, you can modify the entry in the `appsettings.json` file for the Chocolatey Central Management service, shown below. + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + }, + "CertificateThumbprint": "" +} +``` + +Altering the `CertificateThumbprint` value will cause the Chocolatey Central Management service to select the corresponding certificate from the `LocalMachine\TrustedPeople` store instead. +You will need to restart the Chocolatey Central Management service after changing this value for it to take effect. + +```powershell +Get-Service -Name chocolatey-central-management | Restart-Service +``` + +### Chocolatey Agent Service is unable to communicate with Chocolatey Central Management Service. + +There is a known issue with the beta release of Chocolatey Central Management where an inconsistent Port Number is used between these two services. One used 24020 and the other used 24040. The correct default Port Number is 24020, and this is used in the 0.1.0 release of Chocolatey Central Management. If required, the Port Number can be explicitly set during the installation of the Chocolatey Central Management packages using the following option when installing `chocolatey-management-service`: + +```powershell +--params="'/PortNumber=24020'" +``` + +### Unable to report computer information to Chocolatey Central Management. + +You may see messaging like the following in the `chocolatey-agent.log`: + +```powershell +[INFO ] - Creating secure channel to https://ccmserver:24020/ChocolateyManagementService ahead of CCM check-in... +[ERROR] - Unable to report computer information to CCM.: + The message with Action 'http://tempuri.org/IChocolateyManagementService/report_computer_information' cannot be + processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a + contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender + and the receiver. Check that sender and receiver have the same contract and the same binding (including security + requirements, e.g. Message, Transport, None). +``` + +This is due to having a Chocolatey Agent that is v0.10.0+ versus an older Chocolatey Central Management Service (< v0.2.0). Newer agents are incompatible because they use newer and more secure methods of communication. Please upgrade Chocolatey Central Management to v0.2.0+ at your earliest convenience. Or if you are on Chocolatey Central Management v0.3.0+, your agents need to be on v0.11.0+. Please refer to the . + +### Unable to check for deployments from Chocolatey Central Management. + +This will provide similar messaging as the above. The fix is the same, upgrade Chocolatey Central Management to v0.2.0+. Or if you are on Chocolatey Central Management v0.3.0+, your agents need to be on v0.11.0+. Please refer to the . You may need to be on at least v0.3.0 and agents on v0.11.0+. If you are experiencing improper passphrase issues noted below, it means you need to likely upgrade to v0.3.0+ / v0.11.0 across your infrastructure. + +### We are seeing the error "attempted to call report_computer_information with an improper passphrase" in the Chocolatey Central Management service log. + +If you are in the Chocolatey Central Management service logs, you may see the above error. This is a bug that was found with the communication of Chocolatey Central Management v0.2.0 and Chocolatey Agent v0.10.0. That was resolved in Chocolatey Central Management v0.3.0 and Chocolatey Agent v0.11.0. Please see the and [Licensed Issue #152](https://github.com/chocolatey/chocolatey-licensed-issues/issues/152) for more details. + +### The client reports successful check-in, but nothing is showing up in Chocolatey Central Management. + +You need to check the Chocolatey Central Management service logs. The agent will always report success when it communicates with the service successfully. The service may reject what it receives, but due to security settings, it won't tell the client about that. + +The logs are located at `$env:ChocolateyInstall\logs\ccm-service.log`. If you are on a version of Chocolatey Central Management prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +### A parameter cannot be found that matches parameter name KeyUsage. + +This is a known issue with the beta release of Chocolatey Central Management regarding the creation of a self-signed certificate. You may see the error: + +`A parameter cannot be found that matches parameter name KeyUsage` + +This happens when installing Chocolatey Central Management on a machine that has PowerShell 4 or earlier. This is corrected in the 0.1.0 release of Chocolatey Central Management. + +To work around this issue, you can use the following script to manually create a self-signed certificate, which will then be used to continue the installation: + +```powershell +$hostName = [System.Net.Dns]::GetHostName() +$domainName = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().DomainName + +if(-Not $hostName.endswith($domainName)) { + $hostName += "." + $domainName +} + +$certificateDnsName = $hostName + +$newCert = New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName $certificateDnsName + +# move the certificate to 'TrustedPeople' +$certPath = Get-ChildItem -Path 'Cert:\\LocalMachine\\My' | Where-Object subject -like "*$certificateDnsName" +$null = Move-Item -Path $certPath.PsPath -Destination 'Cert:\\LocalMachine\\TrustedPeople' +``` + +### The term 'Install-ChocolateyAppSettingsJsonFile' is not recognized as the name of a cmdlet, function, script file, or operable program. + +In the beta version of the Chocolatey Licensed Extension, there was a cmdlet named `Install-ChocolateyAppSettingsJsonFile` and this was used in the 0.1.0-beta-20181009 release of the Chocolatey Central Management components. In the final released version of the Chocolatey Licensed Extension, this was renamed to `Install-AppSettingsJsonFile`. + +As a result, the Chocolatey Central Management beta no longer works with the released version of Chocolatey Licensed Extension. This will be corrected once the next release of the Chocolatey Central Management components is completed. + +### Cannot process command because of one or more missing mandatory parameters: FilePath. + +During the creation of Chocolatey Central Management, some additional PowerShell cmdlets were created, and these are installed as part of the Chocolatey Licensed Extension package. These cmdlets went through a number of iterations, and as a result, different combinations of Chocolatey Central Management packages were incompatible with the Chocolatey Licensed Extension package, resulting in the error: + +`Cannot process command because of one or more missing mandatory parameters: FilePath` + +The guidance in this case to update to the latest versions of all packages where the situation should be addressed. + +### The remote server returned an unexpected response: (413) Request Entity Too Large. + +When reporting a larger number of packages (approximately 200), this error may be reported. This is due to the size of the information, in bytes, being too large to send between the Chocolatey Agent Service and the Chocolatey Central Management Service. This has been identified as a [bug](https://github.com/chocolatey/chocolatey-licensed-issues/issues/95), which is due to be corrected in version 0.1.1 of Chocolatey Central Management. + +### ERROR: Cannot index into a null array. + +This error can be reported when installing the Chocolatey Central Management Service. This can happen depending on the `netsh` bindings that are currently present on the machine that the Chocolatey Central Management service is being installed on. If, for example, you have enabled SNI on a website on the machine that you are installing onto, then this error may occur. This has been identified as a [bug](https://github.com/chocolatey/chocolatey-licensed-issues/issues/96), which is due to be corrected in version 0.1.1 of Chocolatey Central Management. + +This could also be when you are providing an existing certificate - this was identified as a [bug](https://github.com/chocolatey/chocolatey-licensed-issues/issues/143) and was fixed in Chocolatey Central Management v0.2.0. + +There is a known issue with Chocolatey Central Management v.0.3.0 affecting at least French machines. Please reach out to Support if you are experiencing this (run `choco support` for options). + +### The new license is not being picked up. + +You need to restart services and Chocolatey Central Management web to pick up the license. Here's a handy script: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process +Get-Service chocolatey-* | Start-Service +``` + +### Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. + +You may see the following: "System.Data.SqlClient.SqlException (0x80131904): Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. Please make sure the user has a local user profile on the computer. The connection will be closed." + +This means you are attempting to attach a Local DB file as part of your connection. **This is an invalid scenario.** This could also mean that there is something wrong with your connection strings format in the `appsettings.json` file. + +### System.ServiceModel.AddressAccessDeniedException HTTP could not register URL. + +You may see the following: `System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL https://+:24020/ChocolateyManagementService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied` + +You are attempting to set up a user that is not in the local Administrators group with the Chocolatey Central Management Service. **This is not a supported scenario.** + +Please refer to the and select an option that works best for your organization. + + | + +### Error 1053: The service did not respond to the start or control request in a timely fashion. + +If the Chocolatey Central Management Service is not able to be started due to "Error 1053: The service did not respond to the start or control request in a timely fashion.", it is likely caused due to no compatible versions of dotnet aspnetruntime not being installed. + +The installed runtimes can be listed with `dotnet --list-runtimes`. Ensure that a 6.x.x version of Microsoft.AspNetCore.App is listed. If there is not a version listed, reinstall `dotnet-6.0-aspnetruntime`. + +There is a known issue with the aspnetcoremodule-v2 installer that will uninstall the aspnetruntime on upgrade, which may be the root cause for this missing runtime. https://github.com/dotnetcore-chocolatey/dotnetcore-chocolateypackages/issues/64 \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/setup/upgrade.mdx b/src/content/docs/en-us/central-management/setup/upgrade.mdx new file mode 100644 index 00000000000..4573cb9b0bf --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/upgrade.mdx @@ -0,0 +1,253 @@ +--- +order: 50 +xref: ccm-upgrade +title: Upgrade +description: How to upgrade CCM +--- +import Xref from '@components/Xref.astro'; + +This will guide us through upgrading an existing Chocolatey Central Management installation to newer versions. + +> :choco-info: **NOTE** +> +> Looking for installation instructions? See . + +> :choco-warning: **WARNING** +> +> - Unless otherwise noted, please follow these steps in **exact** order. These steps build on each other and need to be completed in order. +> - All deployed components of the CCM packages should **always** be the **SAME VERSION**. The only time you should not have this is when you are in a state of upgrading and that transition time should be quite short. + +## Step 0: Backup Your Current CCM Environment + +We suggest you go through and take a snapshot of your CCM VM before proceeding with an upgrade. If taking a snapshot is not an option, at a bare minimum we recommend creating a local backup of the CentralManagement SQL Database and backing up your appsettings.json file located at `C:\tools\chocolatey-management-web\appsettings.json`. + +## Step 1: Download Latest Packages + +> :choco-info: **NOTE** +> +> Make sure you have read over the prior to starting internalization as this will save you some headaches. + +Similar to how we internalized in , we need to get the latest editions of everything compatible. Be sure that the versions of packages you have match up with the . + +```powershell +# To run this, you need Chocolatey for Business installed (chocolatey / chocolatey.extension). + +# Update the values and remove the < > +$YourInternalRepositoryPushUrl = '' +$YourInternalRepositoryApiKey = '' +# You get this from the chocolatey.license.xml file: +$YourBusinessLicenseGuid = '' + +# Download Chocolatey community related dependencies, internalization necessary +choco download dotnet-6.0-runtime dotnet-6.0-aspnetruntime dotnet-aspnetcoremodule-v2 --source="'https://community.chocolatey.org/api/v2/'" --internalize --output-directory="'C:\packages'" + +# Download Licensed Packages +## DO NOT RUN WITH `--internalize` and `--internalize-all-urls` - see https://github.com/chocolatey/chocolatey-licensed-issues/issues/155 +choco download chocolatey chocolatey-agent chocolatey.extension chocolatey-management-database chocolatey-management-service chocolatey-management-web --source="'https://licensedpackages.chocolatey.org/api/v2/'" --ignore-dependencies --output-directory="'C:\packages'" --user="'user'" --password="'$YourBusinessLicenseGuid'" + +# Push all downloaded packages to your internal repository +Get-ChildItem C:\packages -Recurse -Filter *.nupkg | Foreach-Object { choco push $_.Fullname --source="'$YourInternalRepositoryPushUrl'" --api-key="'$YourInternalRepositoryApiKey'"} +``` + +## Step 2: Upgrade Central Management Database + +> :choco-info: **NOTE** +> +> Please see for details about all arguments that can be passed and set. + +```powershell +choco upgrade chocolatey-management-database -y +``` + +> :choco-warning: **WARNING** +> +> If you are using QDE and receive an error about deserializing and padding, see the resolution below. + +## Step 3: Setup Central Management Windows Service(s) + +> :choco-info: **NOTE** +> +> Please see for details about all arguments that can be passed and set. + +```powershell +choco upgrade chocolatey-management-service -y +``` + +> :choco-warning: **WARNING** +> +> - If you passed non-default options for any of the following: +> - `/Username:` / `/Password:` / `/EnterPassword` +> - `/PortNumber:` +> You **will need to pass those items again** for upgrades in current releases of CCM. +> - If you passed a non-default option for the `/CertificateDnsName:` / `/CertificateThumbprint:`, you **may need to pass those items again** under the following conditions: +> - Your certificate's DNS name does not match `*`(a certificate that at least starts with the hostname). + +> :choco-info: **NOTE** +> +> Database details that have not changed will not need to be passed. + +There may be additional (new) things you will want to configure. Please see for details. + +## Step 4: Setup Central Management Website + +> :choco-info: **NOTE** +> +> Please see for details about all arguments that can be passed and set. + +```powershell +choco upgrade chocolatey-management-web -y +``` + +> :choco-warning: **WARNING** +> +> You may need to adjust permissions/roles for your user if not using the default `ccmadmin` account. Please see the roles and permissions your account has versus what is available in `Administration -> Users`. + +## Step 5: Upgrade Agent Machines + +> :choco-info: **NOTE** +> +> Please see for details about all arguments that can be passed and set. + +```powershell +choco upgrade chocolatey-agent -y +``` + +There may be additional (new) things you will want to configure. Please see for details. + +> :choco-info: **NOTE** +> +> This could include the agent(s) on the CCM machine(s). + +> :choco-warning: **WARNING** +> +> The Chocolatey Agent installed on the same machine that has the CCM Service installed will share the `centralManagementServiceUrl` setting, so that agent can only report into that CCM Service. + +### New Deployments Feature Example + +As an example, configuring using Deployments would have the folllowing: + +```powershell +# Requires Chocolatey Licensed Extension v2.1.0+, Chocolatey-Agent v0.10.0+, and Chocolatey Central Management v0.2.0+: +choco feature enable --name="'useChocolateyCentralManagementDeployments'" +``` + +> :choco-warning: **WARNING** +> +> As these features have security considerations (it is enabling cross-machine communication), they must be turned on explicitly. +> If you decide you want to open this up for over the internet communication, you should also set `centralManagementClientCommunicationSaltAdditivePassword` and `centralManagementServiceCommunicationSaltAdditivePassword`. +> For more in-depth configuration options and settings for your endpoints, you can view the + +## FAQs + +### Can I simply upgrade all three CCM packages in the same command? + +We strongly advise against it as there is an explicit order that things must be upgraded in. Since CCM components can be installed on separate machines, there is no explicit dependency that can be taken. Just note that running + +```powershell +# !!!DO NOT DO THIS!!! +# choco upgrade chocolatey-management-database chocolatey-management-service chocolatey-management-web -y +``` + +when you have everything on the same box may work, but it may not. Please follow the steps here for best success. + +### If I update the license file, do I need to restart my services and web? + +Yes, you do need to restart the agents, the service, and the web to pick up the license. Here's a script to handle that: + +```powershell +# For CCM versions older than v0.6.0 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + +# For CCM version 0.6.0 and 0.6.1 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# For CCM v0.6.2 and up +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# Restart Chocolatey Agent and/or CCM service (all versions) +Get-Service chocolatey-* | Restart-Service +``` + +### Can I use Chocolatey Deployments to upgrade CCM based components? + +Likely you absolutely can, just keep in mind that there may be a specific ordering in how you would upgrade everything and adhere to that order. In some instances, you may need to upgrade agents first, then CCM components as once CCM is upgraded it may not be able to talk to the agents. However agents will stop being able to talk to CCM for a small period of time while you are upgrading CCM, but then things will start working again. + +### Why does the chocolatey-management-web package upgrade when I upgrade the chocolatey-management-service package? + +> :choco-warning: **WARNING** +> +> This only applies to version of CCM _after_ 0.6.0 and _before_ 0.9.0. + +When you run the upgrade of the chocolatey-management-service package from a computer that has all the CCM packages installed, you may not expect the chocolatey-management-web package to also be upgraded. + +This happens due to the bounded version numbers that are in place for the service and web packages. Starting with 0.6.0, both the service and web packages have the following dependencies: + +```xml + + +``` + +Prior to 0.6.0, only the chocolatey-management-web package had the following dependencies: + +```xml + + +``` + +You will notice that there is an upper bounded version number of 3.0.0, meaning that Chocolatey won't allow a version higher than 3.0.0 of these dependencies to be installed. + +In the new 0.6.0 packages for CCM, the upper bounded version number has changed to 4.0.0. As a result, when running the upgrade command for the chocolatey-management-service package, Chocolatey will also want to install a 4.x.x version of the dependencies, but this _isn't_ allowed due to the constraints on the installed earlier version of the chocolatey-management-web package. To remedy this, Chocolatey is able to find a newer version of the chocolatey-management-web package which does fit within these new constraints, and therefore the chocolatey-management-web package is also upgraded. + +## Common Errors and Resolutions + +### ERROR: There was an error deserializing the requested JSON file: C:\ProgramData\chocolatey\lib\chocolatey-management-database\tools\app\appsettings.json Padding is invalid and cannot be removed. + +This means that the Chocolatey Unique Machine GUID has been changed since you installed the database, as you might see with some versions of QDE (which might be corrected in a version you have.) + +In that case you should run the following script: + +```powershell +Remove-Item -Force -Path "$env:ChocolateyInstall\lib\chocolatey-management-database\tools\app\appsettings.json" -ErrorAction SilentlyContinue +choco upgrade chocolatey-management-database -y --package-parameters="'/SqlServerInstance:localhost\SQLEXPRESS'" --source="'c:\choco-setup\packages'" +``` + +### When I upgrade the website, it wipes out any http port bindings I created + +This was an issue in releases prior to upgrading to CCM v0.3.0 - see https://github.com/chocolatey/chocolatey-licensed-issues/issues/156. +If you run into this, please recreate the bindings again. + +### ERROR: The term 'Install-SettingsJsonFile' is not recognized as the name of a cmdlet, function, script file, or operable program. + +This is https://github.com/chocolatey/chocolatey-licensed-issues/issues/161. + +There are two workarounds noted: + +- Delete the appsettings.json file prior to upgrade +- Do not pass database details if they have not changed during upgrade. + + | + +### When upgrading the CCM website, Chocolatey reports a lot of errors about files being locked, and the CCM website does not function after the upgrade + +This is a known issue for v0.6.0 and v0.6.1 releases, and is resolved as of v0.6.2. +The IIS hosting model changed as of v0.6.0 to use the in-process model, which alters how the website needs to be shut down and restarted. + +A quick workaround is to stop the CCM website manually before running the upgrade by running the following in an administrative Windows PowerShell session: + +```powershell +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force -PassThru +Stop-Website -Name ChocolateyCentralManagement +Stop-WebAppPool -Name ChocolateyCentralManagement +``` + +Once the upgrade process has completed, you can ensure the website is properly restarted by running: + +```powershell +Start-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement +``` diff --git a/src/content/docs/en-us/central-management/setup/website.mdx b/src/content/docs/en-us/central-management/setup/website.mdx new file mode 100644 index 00000000000..786fe0c9771 --- /dev/null +++ b/src/content/docs/en-us/central-management/setup/website.mdx @@ -0,0 +1,619 @@ +--- +order: 30 +xref: ccm-website +title: Website +description: Information on how to setup the CCM Website +--- +import Xref from '@components/Xref.astro'; +import IisWsusChocolatey from '@components/docs/IisWsusChocolatey.mdx'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +This is the Chocolatey Central Management website that gives an API and a web layer to centrally manage information about your environment and manage endpoints with deployment tasks. + +> :choco-warning: **WARNING** +> +> Unless otherwise noted, please follow these steps in **exact** order. These steps build on each other and need to be completed in order. + +## Step 1: Complete Prerequisites + +> :choco-warning: **WARNING** +> +> The must be setup and available, along with . + +* +* PowerShell 5.1 +* IIS Set up and available +* dotnet-aspnetcoremodule-v2 version 16.0.23055 +* dotnet-6.0-runtime version 6.0.15 +* dotnet-6.0-aspnetruntime version 6.0.15 + +The Chocolatey Central Management Website is built on ASP.Net Core, and as such we need to ensure that it is installed on the server for proper function. Note that the codebase is currently locked to version `6.x.x` of these packages, and it is critical that you install these right, otherwise you will encounter errors. At the time of release, the most recent version of these packages was 6.0.5, though we recommend installing the latest versions of these packages. + +### Script for some prerequisites + +```powershell +choco install IIS-WebServer --source windowsfeatures --no-progress -y +choco install IIS-ApplicationInit --source windowsfeatures --no-progress -y +choco install dotnet-aspnetcoremodule-v2 --version 16.0.23055 --no-progress -y +choco install dotnet-6.0-runtime --version 6.0.15 --no-progress -y +choco install dotnet-6.0-aspnetruntime --version 6.0.15 --no-progress -y +``` + +## Step 2: Install Chocolatey Central Management Web Package + +> :choco-info: **NOTE** +> +> At this time we don't recommend opening internet access to Chocolatey Central Management web. However, if you choose to, you will want to set up SSL/TLS certificates to ensure communication is encrypted over the internet. + +### Package Parameters + +Note items with "`:`" mean a value should be provided. Items without are simply switches. + +* `/Username:` - Username that the IIS Web Application Pool will run under. Defaults to `IIS APPPOOL\ChocolateyCentralManagement`. If this is specified, you must also specify either `/Password` or `/EnterPassword`. + > :choco-info: **NOTE** + > + > This may require manual steps after install as well. See [Non-Default App Pool User Considerations](#non-default-app-pool-user-considerations). +* `/Password:` - Password for the user. Defaults to a Windows autogenerated secure password for the IIS AppPool. +* `/EnterPassword` - Receive the password at runtime as a secure string. Requires input at runtime whe installing/upgrading the package. +* `/ConnectionString:` - The SQL Server database connection string to be used to connect to the Chocolatey Central Management database. Defaults to default or explicit values for `/SqlServiceInstance` and `/Database`, along with Integrated Security (`Server=; Database=ChocolateyManagement; Trusted_Connection=True;`). The account should have `db_datareader`/`db_datawriter` access to the database ([data reader / data writer](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles#fixed-database-roles)). +* `/SqlServerInstance:` - Instance name of the SQL Server database to connect to. Alternative to passing full connection string with `/ConnectionString`. Uses `/Database` (below) to build a connection string. Defaults to ``. +* `/Database:` - Name of the SQL Server database to use. Alternative to passing full connection string with `/ConnectionString`. Uses `/SqlServerInstance` (above) to build a connection string. Defaults to `ChocolateyManagement`. + +### IIS Settings + +This package creates the Chocolatey Central Management Website and Application Pool with the following defaults: + +* IIS Web Application Pool: **ChocolateyCentralManagement** + * enable32BitAppOnWin64: **True** + * managedPipelineMode: **Integrated** + * managedRuntimeVersion: <blank> + * startMode: **AlwaysRunning** + * processModel.idleTimeout: **0** + * recycling.periodicRestart.schedule: **Disabled** + * recycling.periodicRestart.time: **0** +* Website Name: **ChocolateyCentralManagement** + * PortBinding: **80** + * applicationDefaults.preloadEnabled: **True** + +### Non-Default App Pool User Considerations + +If you've used a specific username for the app pool, specified by `/Username:` or later added one manually to IIS settings, it's important to note that the installation procedure as of Chocolatey Central Management v0.3.0 does not currently set the following and they will need to be set manually. + +This includes (but may not be limited to): + +* User needs to be granted "Logon as batch" in local security policy. +* User needs to be given explicit Read/Execute rights (ACLs) to `c:\tools\chocolatey-management-web`. +* User needs to be given explicit Modify rights (ACLs) to `c:\tools\chocolatey-management-web\App_Data`. + +### Database Authentication Scenarios + +* +* +* +* + +export const tabsOne = [ + { id: 'scenario-one', title: 'Scenario 1', isActive: true }, + { id: 'scenario-two', title: 'Scenario 2' }, + { id: 'scenario-three', title: 'Scenario 3' }, + { id: 'scenario-four', title: 'Scenario 4' } +]; + + + + + #### Windows Authentication to Local SQL Server + + Monolithic - you have set up the to use Windows Authentication (or Mixed Mode Authentication). You wish to use a local Windows account to connect to the local database. + + ##### Specify User + + ```powershell + choco install chocolatey-management-web -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True; /Username:'" --package-parameters-sensitive="'/Password:'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the user `` has been given `db_datareader` and `db_datawriter` access to the database. See . + + --- + + ##### Default User (`IIS APPPOOL\ChocolateyCentralManagement`) + + ```powershell + choco install chocolatey-management-web -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the user `IIS APPPOOL\ChocolateyCentralManagement` has been given `db_datareader` and `db_datawriter` access to the database. See . + + > :choco-info: **NOTE** + > + > Note the connection string doesn't include credentials. That's because Windows Authentication for SQL Server uses the context of what is running it and why the service itself needs the right user/password. Whatever is running the IIS Application Pool is the user you need to ensure is in the database. + + + + #### Active Directory Authentication to Local SQL Server + + Split - you have set up the to use Windows Authentication (or Mixed Mode Authentication). You wish to use an Active Directory account to connect to an existing SQL instance. + + ```powershell + choco install chocolatey-management-web -y --package-parameters="'/ConnectionString:Server=;Database=ChocolateyManagement;Trusted_Connection=True; /Username:'" --package-parameters-sensitive="'/Password:'" + ``` + + > :choco-info: **NOTE** + > + > Note the connection string doesn't include credentials. That's because Windows Authentication for SQL Server uses the context of what is running it and why the service itself needs the right user/password. In this case, whatever is running the IIS Application Pool is the user you need to ensure has access to the database. + + + + #### SQL Server Authentication to Local SQL Server + + Monolithic - you are installing the management service on the same machine as a SQL Server Express instance. You likely have a smaller environment where you have up to 1,000 machines. You have set up the to use Mixed Mode Authentication. + + ##### Licensed SQL Server + + ```powershell + choco install chocolatey-management-web -y --package-parameters-sensitive="'/ConnectionString:Server=Localhost;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + --- + + ##### SQL Server Express + + ```powershell + choco install chocolatey-management-web -y --package-parameters-sensitive="'/ConnectionString:Server=Localhost\SQLEXPRESS;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + + + #### SQL Server Authentication to Remote SQL Server + + Split - you are installing the management service(s) on a server, and targeting an existing SQL Server instance in your organization. You have set up the to use Mixed Mode Authentication. + + ```powershell + choco install chocolatey-management-web -y --package-parameters-sensitive="'/ConnectionString:Server=;Database=ChocolateyManagement;User ID=ChocoUser;Password=Ch0c0R0cks;'" + ``` + + > :choco-warning: **WARNING** + > + > Please ensure the login has been given `db_datareader` and `db_datawriter` access to the database. See . + + + + +## Step 3: Verify Installation + +The `chocolatey-management-web` package is responsible for creating and deploying the Chocolatey Central Management Website within IIS. A successful installation of this package can be verified by: + +* Opening an internet browser on the machine to the following address `http://localhost` which should result in the login page for Chocolatey Central Management being displayed. +* It should be possible to login to the site using the default credentials mentioned in Step 4 (below). +* The installation folder for `chocolatey-management-web` is at `c:\tools\chocolatey-management-web` (this is configurable by `$env:ChocolateyToolsLocation`). +* Open the website log file located at `c:\tools\chocolatey-management-web\App_Data\Logs\ccm-website.log` and verify that there are no recently reported errors. If you are on a version of Chocolatey Central Management prior to 0.2.0, the log will be located at `c:\tools\chocolatey-management-web\App_Data\Logs\Logs.txt`. + +## Step 4: Set Up Website + +### Step 4.1: Login And Change Default Credentials + +When you access the Chocolatey Central Management Website you will be prompted to provide a username and password to access the site. By default, the username is `ccmadmin` and the password is `123qwe`. After you input this, you will be prompted to change the password. + +![First time login - change password](/images/ccm-playwright/account/login/alert-additional-settings.png) + +### Step 4.2: SMTP Configuration + +In order to send email from Chocolatey Central Management, you will need to make sure that . + +#### `appsettings.json` configuration + +> :choco-info: **NOTE** +> +> In version 0.2.0+ of Chocolatey Central Management, this configuration will likely be automatically applied during installation and will use defaults but be encrypted. If the value is incorrect, you can simply set it as shown here as encryption is not necessary for this value. + +There is a requirement within the Chocolatey Central Management site to send emails to end users of the application when, for example, registering a new user or resetting a password. To ensure that these emails contain a properly clickable link a modification needs to be made to the `appsettings.json` file which is located in the `c:\tools\chocolatey-management-web` folder. + +Open this file in a text editor, and add the following entry: + +```json + "App": { + "WebSiteRootAddress": "" + } +``` + +> :choco-info: **NOTE** +> +> - `URL_to_CCM` should be the accessible URL to access the Chocolatey Central Management Website. +> This will typically be the FQDN of the server that is hosting the Chocolatey Central Management Website, but it will depend on your environment's configuration. +> - When adding this entry, be sure to include a `,` either before or after the entry, depending on where you add it in the file. +> In other words, the end result needs to be a properly formatted JSON document. + +The end result should look something like this: + +![Modified appsettings.json file](/images/features/ccm/updated_appsettingsjson_file.png) + +Once this change has been added, save the file and then run the following to ensure that the process running the Chocolatey Central Management Website is stopped: + +```powershell +# For CCM versions older than v0.6.0 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + +# For CCM version 0.6.0 and 0.6.1 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# For CCM v0.6.2 and up +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement +``` + +Then try accessing the website again. Any emails that are then sent from Chocolatey Central Management should then contain valid links back to the site. + +### Step 4.3: LDAP Configuration + +You may want to allow for users that are logging into the Chocolatey Central Management website. + +### Step 4.4: Application Settings File + +Some application settings will require you to edit the `appsettings.json` file, which is located in the `c:\tools\chocolatey-management-web` folder. + +Here is a copy of items that can be set. They are not required to be encrypted. Any item that is encrypted can be replaced by a non-encrypted value. During package install/upgrade, Chocolatey will encrypt the settings (even if they were previously plain text). + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + }, + "App": { + "WebSiteRootAddress": "http://" + }, + "Recaptcha": { + "SiteKey": "", + "SecretKey": "" + } +} +``` + +> :choco-warning: **WARNING** +> +> Recaptcha is likely to require a publicly available Chocolatey Central Management Website, and we currently have a strong recommendation to **NOT** open up the website to the internet. You likely do not want to set this or turn it on inside the Administration -> Settings section. However, if you do, you will _need_ the items set here in the `appsettings.json` as well. + +### Step 4.5: Audit Retention + +You may want to configure the that are captured by Chocolatey Central Management website. + +### Step 4.6: Stale Computer Retention + + +You may want to setup the that are no longer reporting into Chocolatey Central Management. + + +### Step 4.7: Set up Two Factor Login + +You may want to setup for users who are going to be logging into the Chocolatey Central Management website. + +## FAQ + +### What is the minimum required configuration for the `appsettings.json` file? + +As of Chocolatey Central Management v0.6.2, the default settings in the `appsettings.json` for the website package are: + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + }, + "App": { + "WebSiteRootAddress": "http://" + } +} +``` + +> :choco-info: **NOTE** +> +> This file will usually be condensed into a single line, with the values encrypted. + +If these values are removed or incorrect, the Chocolatey Central Management website may fail to start. +To correct this, ensure all configuration is present and correct and then restart the Chocolatey Central Management website. + +```powershell +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement +``` + +### Can I install the Chocolatey Central Management Website under a Virtual Directory in IIS? + +Currently, no. The Chocolatey Central Management Website expects to reside at the site level within IIS. + +### What is the Chocolatey Central Management Component Compatibility Matrix? + +Chocolatey Central Management has specific compatibility requirements with quite a few moving parts. It is important to understand that there are some Chocolatey Agent versions that may not be able to communicate with some versions of Chocolatey Central Management and vice versa. Please see the for details. + +### I entered incorrect database details on install, do I need to reinstall to fix that? + +It depends. You can simply go to the `appsettings.json` file and adjust the connection string to be plaintext. It will remain in plaintext though (at least until upgrade), so if you have actual password details you need to keep secure, you should do a force installation. + +1. The file is located at `c:\tools\chocolatey-management-web\appsettings.json`. +1. You would open that up in an editor and modify the `"Default"` connection string. +1. It would look something like the following (adjust the connection string as necessary): + +```json +{ + "ConnectionStrings": { + "Default": "Server=; Database=ChocolateyManagement; Trusted_Connection=True;" + }, + "App": { + "WebSiteRootAddress": "http://" + } +} +``` + +1. Then restart the website by running from admin powershell: + + ```powershell + # For CCM versions older than v0.6.0 + Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + + # For CCM version 0.6.0 and 0.6.1 + Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + Stop-Website -Name ChocolateyCentralManagement + Restart-WebAppPool -Name ChocolateyCentralManagement + Start-Website -Name ChocolateyCentralManagement + + # For CCM v0.6.2 and up + Stop-Website -Name ChocolateyCentralManagement + Restart-WebAppPool -Name ChocolateyCentralManagement + Start-Website -Name ChocolateyCentralManagement + ``` + +> :choco-warning: **WARNING** +> +> Do not put `sec:` or `secure-` at the start (prefix) of any values that you are adding/modifying directly. That tells Chocolatey components they are encrypted and it will attempt to decrypt them for use. If that is done incorrectly, it will cause things to crash. + +### Where is the Chocolatey Central Management Website installed? + +The default installation folder for `chocolatey-management-web` is at `c:\tools\chocolatey-management-web`. However, this is configurable based on `$env:ChocolateyToolsLocation`. We would not suggest changing that value once you have installed anything that makes use of it as permissions and other things will be pointing to that set of folders. + +## Common Errors and Resolutions + +### Chocolatey Central Management Website fails to start, showing "An error occurred while starting the application." + +You may also see the following entry in the Chocolatey Central Management website log file: + +```log +System.ArgumentNullException: Value cannot be null. (Parameter 'str') +``` + +This indicates some of the [required configuration values][required-config] for the CCM website to function are not present. +Ensure all [required configuration values][required-config] are present, then restart the CCM website: + +```powershell +# For CCM versions older than v0.6.0 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + +# For CCM version 0.6.0 and 0.6.1 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# For CCM v0.6.2 and up +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement +``` + +### Chocolatey Central Management Website fails to load with a `500.21` error code. + +This error code indicates that IIS failed to start the website due to a misconfiguration. +By default, Chocolatey Central Management uses the `AspNetCoreModuleV2` in IIS, however the initial versions of Chocolatey Central Management initially used `AspNetCoreModule` instead. +Due to how the upgrade logic has worked prior to v0.6.2, this old configuration value may be kept during upgrade. + +As of v0.6.0, the IIS webhost can no longer run the website using the `AspNetCoreModule` as 0.6.x is running on .NET Core 3.1, and the structure of the `web.config` file has changed. +If you encounter this issue, you will need to update your `web.config` file to match the new format. +The default `web.config` file structure as of v0.6.0 is as follows: + +```xml + + + + + + + + + + + +``` + +As of v0.6.2, the `chocolatey-management-website` package upgrade process will inform you during upgrade if your `web.config` file is not usable. +If it is not, the installer will show a large warning message, indicating where the existing `web.config` file has been backed up to. +After the installation completes, you will need to replicate any customizations you have made to the `web.config` file into the new file manually. + +### Configure Chocolatey Central Management alongside WSUS admin site. + + + +### The specified path, file name, or both are too long. + +This error can occur when installing the `chocolatey-management-web` package. Due to the nested folder structure contained within this package, when extracting to the default cache location, the path can become too long. This problem is known is occur in the 0.1.0-beta-20181009 release of this package, and it should be corrected in subsequent releases. As a workaround, adding the following parameters to the install command should allow the installation to complete successfully: + +```powershell +--cache-location="'C:\Temp\choco'" +``` + +### HTTP Error when trying to access Chocolatey Central Management Website. + +When you try to access the Chocolatey Central Management Website (by default, this is hosted on `http://localhost`), errors messages similar to the following may be returned: + +`HTTP Error 500.19 - Internal Server Error` + +These errors happen very early in the application execution, and as a result, are not logged to the standard log location. It is possible to increase the logging that is performed by the ASP.NET Worker Process, so that additional information about the error can be found. Follow these steps to enable that additional logging: + +1. In Windows Explorer, navigate to the `c:/tools/chocolatey-management-web` folder +1. Find the `web.config` file and open this in a text editor +1. Locate the `stdoutLogEnabled` attribute, which will be set to false by default +1. Change this to true, and save the file +1. Check to see if there is a running process called `ChocolateySoftware.ChocolateyManagement.Web.Mvc.exe`. If there is, stop it. +1. Restart the CCM app pool and website in IIS. +1. Attempt to access the website again. An additional log file will be created in the `App_Data\Logs\stdout` folder. In Chocolatey Central Management v0.6.0 and v0.6.1, this may be incorrectly located in the `Logs\stdout` folder. +1. Review this log for additional error information +1. Ensure that you set the `stdoutLogEnabled` attribute back to false + +In these situations, we have found that incorrect database connection strings are typically the root cause of the problem. + +Another possible cause for this error is if there are mismatching versions of `dotnet-6.0-aspnetruntime` and `dotnet-aspnetcoremodule-v2`. Ensure that both are on the same patch level. Note that `dotnet-aspnetcoremodule-v2` package versioning does not directly correspond to the dotnet patch level, so it is recommended to use the versions specified in the prerequisites above + +### The term 'Install-ChocolateyAppSettingsJsonFile' is not recognized as the name of a cmdlet, function, script file, or operable program. + +In the beta version of Chocolatey Licensed Extension, there was a cmdlet named `Install-ChocolateyAppSettingsJsonFile` and this was used in the 0.1.0-beta-20181009 release of the Chocolatey Central Management components. In the final released version of the Chocolatey Licensed Extension, this was renamed to `Install-AppSettingsJsonFile`. + +As a result, the Chocolatey Central Management beta no longer works with the released version of Chocolatey Licensed Extension. This will be corrected once the next release of the Chocolatey Central Management components is completed. + +### Cannot process command because of one or more missing mandatory parameters: FilePath. + +During the creation of Chocolatey Central Management, some additional PowerShell cmdlets were created, and these are installed as part of the Chocolatey Licensed Extension package. These cmdlets went through a number of iterations, and as a result, different combinations of Chocolatey Central Management packages were incompatible with the Chocolatey Licensed Extension package, resulting in the error: + +`Cannot process command because of one or more missing mandatory parameters: FilePath` + +The guidance in this case is either to pin to the specific version of the Chocolatey Extension package required by the version of Chocolatey Central Management being used, or, update to the latest versions of all packages, where the situation should be addressed. + +### All attempts to send email from Chocolatey Central Management result in an error. + +When any attempt is made by Chocolatey Central Management to send an email, an error occurs. This either results in an HTTP 500 errors similar to the following: + +![HTTP 500 error when sending email](/images/features/ccm/error_when_sending_email_500.png) + +Or an inline error, with text similar to: "Unable to send email, please contact System Administrator to ensure SMTP settings are configured correctly.". + +Checking the log file, an error similar to this is found: + +```powershell +ERROR 2019-06-14 00:54:03,491 [55 ] Microsoft.AspNetCore.Server.Kestrel - Connection id "0HLNGIPBBV01R", Request id "0HLNGIPBBV01R:00000001": An unhandled exception was thrown by the application. +System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it 127.0.0.1:25 +``` + +This is caused due to the default SMTP configuration being used by CCM, which is incompatible with the environment. Chocolatey Central Management, by default, assumes that there is an available SMTP Server available on the current machine, using port 25. To fix this, follow the . + +### Emails sent from Chocolatey Central Management to users have links that contain localhost, rather than the actual Chocolatey Central Management Server name. + +There is a requirement within the Chocolatey Central Management site to send emails to end users of the application when, for example, registering a new user or resetting a password. When this happens, the email should contain a link back to the Chocolatey Central Management site, which the user can click on to bring up the site in their browser. However, emails sent from Chocolatey Central Management contain links that contain localhost in the address, which means when clicked on, they fail to open correctly. This can be fixed by making a change to the `appsettings.json` file which is located in the `c:\tools\chocolatey-management-web` folder. + +Open this file in a text editor, and add the following entry: + +```json + "App": { + "WebSiteRootAddress": "" + } +``` + +> :choco-info: **NOTE** +> +> When adding this entry, be sure to include a `,` either before or after the entry, depending on where you add it in the file. i.e. the end result needs to be a properly formatted JSON document. + +where `URL_to_CCM` should be the accessible URL to access the Chocolatey Central Management Website. This will typically be the FQDN of the server that is hosting the Chocolatey Central Management Website, but it will depend on your environment's configuration. + +The end result should look something like this: + +![Modified appsettings.json file](/images/features/ccm/updated_appsettingsjson_file.png) + +Once this change has been added, save the file, and then run the following to ensure that the process running the Chocolatey Central Management Website is stopped: + +```powershell +# For CCM versions older than v0.6.0 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + +# For CCM version 0.6.0 and 0.6.1 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# For CCM v0.6.2 and up +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement +``` + +And then try accessing the website again. Any emails that are then sent from Chocolatey Central Management should then contain valid links back to the site. + +### The updated license file is not being picked up in the website. + +You need to restart the web executable currently. We are looking to have it automatically picked up in future releases. Here's a script to handle that: + +```powershell +# For CCM versions older than v0.6.0 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + +# For CCM version 0.6.0 and 0.6.1 +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# For CCM v0.6.2 and up +Stop-Website -Name ChocolateyCentralManagement +Restart-WebAppPool -Name ChocolateyCentralManagement +Start-Website -Name ChocolateyCentralManagement + +# Restart Chocolatey Agent and/or CCM service (all versions) +Get-Service chocolatey-* | Restart-Service +``` + +### A computer or group is not showing as available for deployments but I have plenty of available licenses. + +Once you upgrade to Chocolatey Central Management v0.3.0+, you have upgraded the Agent on the machine to v0.11.0+, and it has successfully completed a check in, then that messaging should go away. Note that clients do not get a message back that there was a failure as a security feature - you'll need to consult the Chocolatey Central Management Service logs. You can find that at `$env:ChocolateyInstall\logs\ccm-service.log`, or if you are on a version of Chocolatey Central Management prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +### Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. + +You may see the following: "System.Data.SqlClient.SqlException (0x80131904): Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. Please make sure the user has a local user profile on the computer. The connection will be closed." + +This means you are attempting to attach a Local DB file as part of your connection. This is an invalid scenario. + +### The website app pool shuts down almost as soon as it is started. + +If you see the app pool shutting down immediately when you start it. + +* Check the event log first. It's very helpful in seeing what the actual issues are +* Turn on stdout logging in the config at `c:\tools\chocolatey-management-web\web.config` if it is not already on. The attribute is named `stdoutLogEnabled` (set it to true). This will allow logging to `c:\tools\chocolatey-management-web\App_Data\Logs`. Permissions will play a role in this so ensure [the user has the right access](#non-default-app-pool-user-considerations). +* Check for [Non-Default App Pool User Considerations](#non-default-app-pool-user-considerations). + +### Errors when attempting to communicate with SignalR. + +Within the Chocolatey Central Management Website, [SignalR](https://dotnet.microsoft.com/apps/aspnet/signalr) is used to enable real time communications for notifications. It has been found that the following errors can be shown within the Developer Tools sections of some browsers: + +* Error: Connection disconnected with error 'Error: Cannot send until the transport is connected' +* The connection to ... was interrupted while the page was loading. Error: Connection disconnected with error 'Error: Error occurred' +* Error: failed to start the connection: Error: Unable to connect to the server with any of the available transports. ServerSentEvents failed: Error: 'ServerSentEvents' is disabled by the client. LongPolling failed: Error: 'LongPolling' is disabled by the client. + +In all of these cases, we haven't seen any drop in functionality for the notifications that are sent from the Chocolatey Central Management application. Our suspicion is that there is a timing issue when attempting to make the connection to the SignalR Hub, which is almost immediately rectified. Due to the fact that SignalR is a 3rd party integration, we do not believe that there is anything that can be done to resolve this problem, and since the functionality continues to work as expected, these errors in the JavaScript console can safely be ignored. + + | + +[required-config]: #what-is-the-minimum-required-configuration-for-the-appsettingsjson-file + +### Current user did not login to the application! + +After upgrading to v0.6.0/0.6.1/0.6.2 of the Chocolatey Central Management Website, you may see the error message: + +> Current user did not login to the application! + +When you attempt to login to the application, and you will be immediately logged out again. + +Full details of this problem can be found in the [GitHub issue](https://github.com/chocolatey/chocolatey-licensed-issues/issues/260), including a workaround for the problem. + +This issue has been addressed in v0.6.3. diff --git a/src/content/docs/en-us/central-management/usage/api/examples.mdx b/src/content/docs/en-us/central-management/usage/api/examples.mdx new file mode 100644 index 00000000000..518c67e72b5 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/api/examples.mdx @@ -0,0 +1,209 @@ +--- +order: 10 +xref: ccm-api-examples +title: Examples +description: CCM API usage examples +--- +import Xref from '@components/Xref.astro'; + +## Creating An _All Computers_ Group and Deploy Application Upgrades + +From a completely fresh CCM instance with at least one computer checking into Central Management, this process will: + +- Create a new group containing all the computers currently registered to Central Management. +- Create a new Deployment Plan with a single step, which will upgrade all Chocolatey-managed applications to the latest available versions. +- Start the Deployment Plan. + +The process involves a couple of intermediary steps as well, since we're using the raw REST API endpoints here (see below). +We're also assuming as part of this example that you've already [Authenticated to the CCM API](#authentication) and have a `$Session` variable created as in that example. + +### 1. Get All CCM-Managed Computers + +```powershell +$CcmServerHostname = 'chocoserver' +$params = @{ + Uri = "https://$CCmServerHostname/api/services/app/Computers/GetAll" + Method = 'GET' + WebSession = $Session +} +$ComputerList = Invoke-RestMethod @params +``` + +### 2. Create an _All Computers_ Group + +```powershell +# Create group in CCM +$GroupName = 'All Clients' +$Params = @{ + Uri = "https://$CcmServerHostname/api/services/app/Groups/CreateOrEdit" + Method = 'POST' + WebSession = $Session + ContentType = 'application/json' + Body = @{ + name = $GroupName + description = 'All CCM client machines' + groups = @() + computers = @( + $ComputerList.result | Select-Object -Property @{ Name = 'computerId'; Expression = { "$($_.id)" } } + ) + } | ConvertTo-Json +} +$null = Invoke-RestMethod @params + +# Retrieve created group information +$params = @{ + Uri = "https://$CcmServerHostname/api/services/app/Groups/GetAll" + Method = "GET" + WebSession = $Session +} +$Group = Invoke-RestMethod @params | + Select-Object -ExpandProperty result | + Where-Object Name -EQ $GroupName +``` + +### 3. Create a New Deployment Plan + +```powershell +$params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/CreateOrEdit" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ name = "Upgrade Chocolatey-Managed Applications [$(Get-Date)]" } | ConvertTo-Json +} +$deployment = (Invoke-RestMethod @params).result +``` + +### 4. Add a Deployment Step + +```powershell +$params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentSteps/CreateOrEdit" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ + deploymentPlanId = $deployment.Id + name = "Choco Upgrade All" + validExitCodes = "0, 1605, 1614, 1641, 3010" + executionTimeoutInSeconds = 14400 + machineContactTimeoutInMinutes = "0" + failOnError = $true + requireSuccessOnAllComputers = $false + deploymentStepGroups = @( + @{ groupId = $Group.Id; groupName = $Group.Name } + ) + # Syntax for basic Deployment Steps is "|" + script = "upgrade|all" + } | ConvertTo-Json +} +$null = Invoke-RestMethod @params +``` + +### 5. Move Deployment Plan to Ready & Start the Deployment Plan + +```powershell +$params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/MoveToReady" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ id = $deployment.Id } | ConvertTo-Json +} +$null = Invoke-RestMethod @params + +$params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/Start" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ id = $deployment.Id } | ConvertTo-Json +} +$null = Invoke-RestMethod @params +``` + +## Create a Recurring Scheduled Task to run Recurring Deployment Plans + +This example uses the concepts in the previous example and streamlines the process of creating a scheduled task on Windows to create a recurring Deployment Plan task. +In this example, we set the trigger to run daily, but you could configure it to run as needed for your use case. + +```powershell +$recurringDeploymentScript = { + # Fill in the CCM Server name as well as the Group ID that the Deployment Step will target + $CcmServerHostname = 'chocoserver' + $GroupId = 1 + + # Authenticate to API + # NOTE: This is an example only; it's never a great idea to store your credentials in a script or scheduled task. + # Instead, store the credentials securely and retrieve them during the scheduled task script. + $body = @{ + usernameOrEmailAddress = 'ccmadmin' + password = 'ch0c0R0cks' + } + + $null = Invoke-WebRequest -Uri "https://$CcmServerHostname/Account/Login" -Method POST -ContentType 'application/x-www-form-urlencoded' -Body $body -SessionVariable Session -ErrorAction Stop + + # Create New Deployment Plan + $params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/CreateOrEdit" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ name = "Upgrade Chocolatey-Managed Applications [$(Get-Date)]" } | ConvertTo-Json + } + $deployment = (Invoke-RestMethod @params).result + + # Add Deployment Step + $params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentSteps/CreateOrEdit" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ + deploymentPlanId = $deployment.Id + name = "Choco Upgrade All" + validExitCodes = "0, 1605, 1614, 1641, 3010" + executionTimeoutInSeconds = 14400 + machineContactTimeoutInMinutes = "0" + failOnError = $true + requireSuccessOnAllComputers = $false + deploymentStepGroups = @( + @{ groupId = $GroupId } + ) + script = "upgrade|all" + } | ConvertTo-Json + } + $null = Invoke-RestMethod @params + + # Move Deployment Plan to Ready & Start the Deployment Plan + $params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/MoveToReady" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ id = $deployment.Id } | ConvertTo-Json + } + $null = Invoke-RestMethod @params + + $params = @{ + Uri = "https://$CcmServerHostname/api/services/app/DeploymentPlans/Start" + Method = "POST" + WebSession = $Session + ContentType = 'application/json' + Body = @{ id = $deployment.Id } | ConvertTo-Json + } + $null = Invoke-RestMethod @params +} + +$argumentString = '-NoProfile -WindowStyle Hidden -Command "& {{ {0} }}"' -f $recurringDeploymentScript + +$taskParams = @{ + Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument $argumentString + # Fill in the requirements for the repeating scheduled task; here, it will trigger once a day @ 6 PM + Trigger = New-ScheduledTaskTrigger -Daily -At 6pm + TaskName = 'Repeat - Choco Update Deployment' + Description = "Create and start a Chocolatey Central Management Deployment Plan which will trigger all computers in the group '$groupName' to update their Chocolatey-managed applications." +} + +Register-ScheduledTask @taskParams +``` diff --git a/src/content/docs/en-us/central-management/usage/api/index.mdx b/src/content/docs/en-us/central-management/usage/api/index.mdx new file mode 100644 index 00000000000..e513a0f52af --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/api/index.mdx @@ -0,0 +1,235 @@ +--- +order: 30 +xref: ccm-api +title: API +description: Information on using the CCM API +--- +import Xref from '@components/Xref.astro'; + +## Description + +As of CCM v0.4.0, the API for Chocolatey Central Management is exposed via Swagger. +The API documentation and examples can be reached from your CCM dashboard by selecting the :gear: **API** option on the left sidebar. +The information contained there is referenced here, but you can additionally try out the various API endpoints directly from the Swagger API page for your own CCM environment. + +> :choco-warning: **WARNING** +> +> The Swagger UI does not work in Internet Explorer. Please use another browser. + +## ChocoCCM + +The PowerShell module is available from the PowerShell Gallery for use with CCM v0.4.0 and later. +This module contains PowerShell commands designed for interfacing with the CCM API directly. + +See the page for a full list of commands and their associated documentation. + +## Authentication + +Before being able to utilise the CCM API, you will need to create an authenticated session. +This can be done by targeting the `/Account/Login` endpoint and submitting the username and password. +You will need to use the authenticated session variable for any API calls. + +```powershell +# Replace 'chocoserver' with the hostname of your CCM server in your environment +$CcmServerHostname = 'chocoserver' +$Credential = Get-Credential +$body = @{ + usernameOrEmailAddress = $Credential.UserName + password = $Credential.GetNetworkCredential().Password +} +$Result = Invoke-WebRequest -Uri "https://$CcmServerHostname/Account/Login" -Method POST -ContentType 'application/x-www-form-urlencoded' -Body $body -SessionVariable Session -ErrorAction Stop +``` + +While authenticated, you can target API endpoints like this: + +```powershell +# The $Session variable name must match the string given to -SessionVariable when authenticating. +Invoke-WebRequest -Uri "https://$CcmServerHostname/$endpointUrl" -Method $Method -Body $Parameters -Session $Session +``` + +## Endpoints + +Below is a list of the API endpoints available for CCM as of v0.10.0. +For more detailed information on the API endpoints and their parameters for your version of CCM, select the :gear: **API** option from the sidebar on the Central Management dashboard, or navigate to `https://CCM_SERVER_HOSTNAME/swagger/`. + +### AuditLog + +| Method | EndpointUrl | +| :----: | :-------------------------------------- | +| GET | /api/services/app/AuditLog/GetAuditLogs | + +### ChocolateyLicenseInformation + +| Method | EndpointUrl | +| :----: | :-------------------------------------------------------------------- | +| GET | /api/services/app/ChocolateyLicenseInformation/GetLicenseCount | +| GET | /api/services/app/ChocolateyLicenseInformation/GetLicenseExpiration | +| GET | /api/services/app/ChocolateyLicenseInformation/GetIsTrialLicense | +| GET | /api/services/app/ChocolateyLicenseInformation/GetIsLicenseCountValid | + +### ComputerGroup + +| Method | EndpointUrl | +| :----: | :------------------------------------------------- | +| GET | /api/services/app/ComputerGroup/GetAllByComputerId | +| GET | /api/services/app/ComputerGroup/GetAllByGroupId | +| POST | /api/services/app/ComputerGroup/CreateOrEdit | +| DELETE | /api/services/app/ComputerGroup/Delete | + +### Computers + +| Method | EndpointUrl | +| :----: | :----------------------------------------------------------- | +| GET | /api/services/app/Computers/GetComputerCount | +| GET | /api/services/app/Computers/GetAllPaged | +| GET | /api/services/app/Computers/GetAll | +| GET | /api/services/app/Computers/GetComputerForView | +| GET | /api/services/app/Computers/GetComputerForEditByComputerGuid | +| GET | /api/services/app/Computers/GetComputerForEdit | +| POST | /api/services/app/Computers/Edit | +| DELETE | /api/services/app/Computers/Delete | + +### ComputerSoftware + +Methods for querying or managing mappings between Computer objects and Software entries + +| Method | EndpointUrl | +| :----: | :--------------------------------------------------------- | +| GET | /api/services/app/ComputerSoftware/GetAllByComputerId | +| GET | /api/services/app/ComputerSoftware/GetAllPagedByComputerId | +| GET | /api/services/app/ComputerSoftware/GetAllBySoftwareId | +| GET | /api/services/app/ComputerSoftware/GetAllPagedBySoftwareId | + +### DeploymentPlans + +| Method | EndpointUrl | +| :----: | :--------------------------------------------------------------------------- | +| GET | /api/services/app/DeploymentPlans/GetAllPaged | +| GET | /api/services/app/DeploymentPlans/GetAll | +| GET | /api/services/app/DeploymentPlans/GetDeploymentPlanForView | +| GET | /api/services/app/DeploymentPlans/GetAllScheduledDeploymentPlansReadyToStart | +| GET | /api/services/app/DeploymentPlans/GetDeploymentPlanForEdit | +| POST | /api/services/app/DeploymentPlans/CreateOrEdit | +| DELETE | /api/services/app/DeploymentPlans/Delete | +| DELETE | /api/services/app/DeploymentPLans/DeleteNewDraftDeploymentPlan | +| POST | /api/services/app/DeploymentPlans/Archive | +| POST | /api/services/app/DeploymentPlans/Duplicate | +| POST | /api/services/app/DeploymentPlans/Start | +| POST | /api/services/app/DeploymentPlans/Cancel | +| POST | /api/services/app/DeploymentPlans/MoveToReady | + +### DeploymentStepComputers + +| Method | EndpointUrl | +| :----: | :------------------------------------------------------------------------------------ | +| GET | /api/services/app/DeploymentStepComputers/GetAllPagedByDeploymentStepId | +| GET | /api/services/app/DeploymentStepComputers/GetAllByDeploymentStepId | +| GET | /api/services/app/DeploymentStepComputers/GetDeploymentStepComputerForView | +| GET | /api/services/app/DeploymentStepComputers/GetDeploymentStepComputerForEdit | +| GET | /api/services/app/DeploymentStepComputers/GetReadyDeploymentStepComputerByMachineGuid | +| GET | /api/services/app/DeploymentStepComputers/GetUnreachableDeploymentStepComputers | +| GET | /api/services/app/DeploymentStepComputers/GetStaleActiveDeploymentStepComputers | +| POST | /api/services/app/DeploymentStepComputers/CreateOrEdit | +| DELETE | /api/services/app/DeploymentStepComputers/Delete | +| GET | /api/services/app/DeploymentStepComputers/GetDeploymentStepDetailsToZip | + +### DeploymentStepGroups + +| Method | EndpointUrl | +| :----: | :------------------------------------------------------------------- | +| GET | /api/services/app/DeploymentStepGroups/GetDeploymentStepGroupForView | +| GET | /api/services/app/DeploymentStepGroups/GetDeploymentStepGroupForEdit | +| POST | /api/services/app/DeploymentStepGroups/CreateOrEdit | +| DELETE | /api/services/app/DeploymentStepGroups/Delete | + +### DeploymentSteps + +| Method | EndpointUrl | +| :----: | :-------------------------------------------------------------- | +| GET | /api/services/app/DeploymentSteps/GetAllPagedByDeploymentPlanId | +| GET | /api/services/app/DeploymentSteps/GetAllByDeploymentPlanId | +| GET | /api/services/app/DeploymentSteps/GetDeploymentStepForView | +| GET | /api/services/app/DeploymentSteps/GetDeploymentStepForEdit | +| POST | /api/services/app/DeploymentSteps/CreateOrEdit | +| POST | /api/services/app/DeploymentSteps/CreateOrEditPrivileged | +| DELETE | /api/services/app/DeploymentSteps/Delete | +| DELETE | /api/services/app/DeploymentSteps/DeletePrivileged | + +### Groups + +| Method | EndpointUrl | +| :----: | :--------------------------------------- | +| GET | /api/services/app/Groups/GetAllPaged | +| GET | /api/services/app/Groups/GetAll | +| GET | /api/services/app/Groups/GetGroupForEdit | +| POST | /api/services/app/Groups/CreateOrEdit | +| DELETE | /api/services/app/Groups/Delete | + +### OutdatedReports + +| Method | EndpointUrl | +| :----: | :------------------------------------------------- | +| GET | /api/services/app/OutdatedReports/GetAllPaged | +| GET | /api/services/app/OutdatedReports/GetAll | +| GET | /api/services/app/OutdatedReports/GetAllByReportId | +| POST | /api/services/app/OutdatedReports/Create | +| DELETE | /api/services/app/OutdatedReports/Delete | + +### Permission + +| Method | EndpointUrl | +| :----: | :--------------------------------------------- | +| GET | /api/services/app/Permission/GetAllPermissions | + +### Role + +| Method | EndpointUrl | +| :----: | :---------------------------------------- | +| GET | /api/services/app/Role/GetRoles | +| GET | /api/services/app/Role/GetRoleForEdit | +| POST | /api/services/app/Role/CreateOrUpdateRole | +| DELETE | /api/services/app/Role/DeleteRole | + +### SensitiveVariables + +| Method | EndpointUrl | +| :----: | :--------------------------------------------------------------- | +| GET | /api/services/app/SensitiveVariables/GetAllPaged | +| GET | /api/services/app/SensitiveVariables/GetAll | +| GET | /api/services/app/SensitiveVariables/GetSensitiveVariableForView | +| POST | /api/services/app/SensitiveVariables/Create | +| DELETE | /api/services/app/SensitiveVariables/Delete | + +### Software + +| Method | EndpointUrl | +| :----: | :----------------------------------------------------------------- | +| GET | /api/services/app/Software/GetAll | +| GET | /api/services/app/Software/GetAllCurrentlyInstalled | +| GET | /api/services/app/Software/GetAllWithoutFilter | +| GET | /api/services/app/Software/GetSoftwareByPackageId | +| GET | /api/services/app/Software/GetSoftwareByPackageIdAndVersion | +| GET | /api/services/app/Software/GetSoftwareForView | +| GET | /api/services/app/Software/GetSoftwareForEdit | +| GET | /api/services/app/Software/GetSoftwareForEditByPackageIdAndVersion | + +### TokenAuth + +| Method | EndpointUrl | +| :----: | :------------------------------------------------ | +| POST | /api/TokenAuth/Authenticate | +| POST | /api/TokenAuth/RefreshToken | +| GET | /api/TokenAuth/LogOut | +| POST | /api/TokenAuth/SendTwoFactorAuthCode | +| POST | /api/TokenAuth/ImpersonatedAuthenticate | +| POST | /api/TokenAuth/LinkedAccountAuthenticate | +| GET | /api/TokenAuth/GetExternalAuthenticationProviders | +| POST | /api/TokenAuth/ExternalAuthenticate | +| GET | /api/TokenAuth/TestNotification | + +### WebLog + +| Method | EndpointUrl | +| :----: | :---------------------------------------- | +| GET | /api/services/app/WebLog/GetLatestWebLogs | +| POST | /api/services/app/WebLog/DownloadWebLogs | diff --git a/src/content/docs/en-us/central-management/usage/examples/deployment-plans.mdx b/src/content/docs/en-us/central-management/usage/examples/deployment-plans.mdx new file mode 100644 index 00000000000..8f1fd556968 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/examples/deployment-plans.mdx @@ -0,0 +1,388 @@ +--- +order: 10 +xref: ccm-example-deployment-plans +title: Deployment Plans +description: Example Deployment Plans that can be imported into Chocolatey Central Management for immediate use. +--- +import Xref from '@components/Xref.astro'; +import Collapse from '@components/Collapse.astro'; +import ImportDeploymentPlan from '@components/docs/ImportDeploymentPlan.mdx'; + +## Summary + +Chocolatey Central Management (CCM) now (in version 0.11.0 and up) supports importing and exporting Deployment Plans. We have several example Deployment Plans that you can import and use immediately, to help you make best use of your Chocolatey for Business suite! + + + +### Updating Values in Deployment Plans + +When importing an example Deployment Plan, you may have to update the `Target Group(s)` and any `Deployment Start Time` that are set. + +After importing the Deployment Plan, you should follow these steps to ensure you are able to deploy it! + +#### Setting the Target Group(s) + +You will also need to set a Target Group for the Deployment Step: + +- Mouse-over the Deployment Step and click the **Edit** button. + ![Editing a Deployment Step](/images/ccm-playwright/deployment-plans/edit/button-edit-step.png) + +- Navigate to the `Select Target Groups` panel. + +- Highlight your preferred groups and click the **>** button to move them into `Selected Groups`. + ![Selecting Target Groups](/images/ccm-playwright/deployment-plans/edit/modal-step-select-target-groups.png) + +- Click **Save**. + +#### Setting the Start Time Date (Scheduled Deployments) + +Before you can run the Deployment Plan, you must set the `Start Date Time` to a time at least 30 minutes in the future. + +To do so, click on the clock icon next to the `Start Date Time` field. When you have selected an appropriate time, click **Save**. + +![Updating an invalid Start Date Time](/images/ccm-playwright/deployment-plans/edit/calendar-start-date-time.png) + +## Example Deployment Plans + +We have several example Deployment Plans shown below, and you can check the [Chocolatey Central Management Deployment Plan Examples repository](https://github.com/chocolatey/ccm-deployment-examples) on GitHub for more. + +#### Installing or Upgrading a Package + +The only Deployment Step in this Deployment Plan upgrades, or installs if not present, the `Firefox` package ([available on the Chocolatey Community Repository](https://community.chocolatey.org/packages/firefox)). + +Assuming this package was available on your sources, you will only need to set the Target Groups for the Deployment Step. If you don't have it available, you can download it using `choco download firefox --source="'https://community.chocolatey.org/api/v2/'"` and then upload it to your internal repository. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseOne = { + id: 'simplePackageJson', + title: 'View JSON' +} + + + ```json + { + "Name": "Installing a Package (Simple)", + "ScheduledDateTimeUtc": null, + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 0, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Deploy Firefox", + "IsPrivileged": false, + "PlanOrder": 1, + "Script": "upgrade|firefox||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +#### Installing Multiple Packages + +This Deployment Plan is a basic example of deploying multiple packages. + +We recommend that you use a separate Deployment Step for each package to deploy to allow per-computer reporting. + +You can use this to generate larger Deployment Plans with more comprehensive suites of packages, even mixing Basic and Advanced Deployment Steps in order to provide additional configuration. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseTwo = { + id: 'multiplePackageJson', + title: 'View JSON', +} + + + ```json + { + "Name": "Deploying Multiple Packages", + "ScheduledDateTimeUtc": null, + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 0, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Deploy Cloudflared", + "IsPrivileged": false, + "PlanOrder": 1, + "Script": "upgrade|cloudflared||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + }, + { + "Name": "Deploy Firefox", + "IsPrivileged": false, + "PlanOrder": 2, + "Script": "upgrade|firefox||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + }, + { + "Name": "Deploy VSCode", + "IsPrivileged": false, + "PlanOrder": 3, + "Script": "upgrade|vscode||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + }, + { + "Name": "Deploy 7zip", + "IsPrivileged": false, + "PlanOrder": 4, + "Script": "upgrade|7zip||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +#### Installing a Package with Parameters + +This Deployment Plan is an example of deploying a package using an Advanced Deployment Step, in this case to provide a package parameter during deployment. + +The example passes the `/InstallDir` parameter to the `python312` package, causing the package to be installed to the location provided. + +We use the Advanced Deployment Step to do this because the Basic Deployment Step does not allow package parameters to be used. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseThree = { + id: 'packageParams', + title: 'View JSON', +} + + + ```json + { + "Name": "Deployment Plan with Parameters", + "ScheduledDateTimeUtc": null, + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 0, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Deploy Python to Agent Directory", + "IsPrivileged": true, + "PlanOrder": 1, + "Script": "choco install python312 --package-parameters=\"'/InstallDir:C:\\BuildAgent\\tools\\python312'\"\nexit $LASTEXITCODE", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +### Advanced Deployments + +#### Using a Deployment Schedule + +The following Deployment Plan maintains your Chocolatey license in your environment. It assumes that as a Chocolatey for Business customer +you have created a `chocolatey-license` package. If you don't currently have a license package, you can create one by following [the instructions](https://docs.chocolatey.org/en-us/c4b-environments/azure/license-update#creating-a-new-license-package). + +The Deployment Step included in this Deployment Plan upgrades, or installs if not present, the `chocolatey.license` package. The Deployment Plan +utilizes a schedule which will execute daily. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseFour = { + id: 'dailyLicense', + title: 'View JSON', +} + + + ```json + { + "Name": "Upgrade License (Daily)", + "ScheduledDateTimeUtc": "2023-01-01T00:00:00Z", + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 1, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Update License", + "IsPrivileged": false, + "PlanOrder": 1, + "Script": "upgrade|chocolatey.license||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +A weekly version of this Deployment Plan is available. Click the button below and save +the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseFive = { + id: 'weeklyLicense', + title: 'View JSON', +} + + + ```json + { + "Name": "Upgrade License (Weekly)", + "ScheduledDateTimeUtc": "2023-01-01T00:00:00Z", + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 2, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Update License", + "IsPrivileged": false, + "PlanOrder": 1, + "Script": "upgrade|chocolatey.license||false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +#### Upgrading Chocolatey for Business Client Packages + +These Deployment Plans are examples of upgrading the Chocolatey for Business client packages. + +There are two example Deployment Plans here. They follow the instructions laid out on the [upgrading to Chocolatey v2](https://docs.chocolatey.org/en-us/guides/upgrading-to-chocolatey-v2-v6#upgrade-using-chocolatey-central-management-deployments) page. + +##### Upgrade the Chocolatey for Business Client Packages to the Latest 1.x Version. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseSix = { + id: 'latest1xJson', + title: 'View JSON', +} + + + ```json + { + "Name": "Upgrade Chocolatey for Business Client to Latest 1.x", + "ScheduledDateTimeUtc": null, + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 0, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Upgrade to Latest 1.x Client Components", + "IsPrivileged": true, + "PlanOrder": 1, + "Script": "$Installed = choco list --local-only --limit-output | ConvertFrom-Csv -Delimiter '|' -Header 'Id','Version'\n$ChocolateyVersion = $Installed.Where{$_.Id -eq 'chocolatey'}.Version\n$AgentVersion = $Installed.Where{$_.Id -eq 'chocolatey-agent'}.Version\n$ExtensionVersion = $Installed.Where{$_.Id -eq 'chocolatey.extension'}.Version\n# We don't need to run this step if we're already on the latest 1.*\nif ([version]$ChocolateyVersion -ge '1.4.0' -and [version]$AgentVersion -ge '1.1.2' -and [version]$ExtensionVersion -ge '5.0.3') {\n exit 0\n}\n\n$delayInMinutes = 1\n# If using an internal repository to install Chocolatey Agent, replace `chocolatey.licensed` below\n# with the name or URL of your internally configured source.\nchoco upgrade chocolatey-agent --version=1.1.2 --source=\"'chocolatey.licensed'\"\n\n# Ensure the deployment task registers as failed if the installation failed, and skip registering the\n# scheduled task.\nif ($LASTEXITCODE -ne 0) {\n Write-Error 'The upgrade failed!'\n exit $LASTEXITCODE\n}\n\n# Restart the Agent service after the preset delay time via a scheduled task.\n$ScheduledTask = @{\n TaskName = \"Restart chocolatey-agent\"\n Description = \"Upgrade Chocolatey Agent\"\n Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes($delayInMinutes)\n Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument \"-WindowStyle Hidden -Command Restart-Service chocolatey-agent\"\n Principal = New-ScheduledTaskPrincipal -GroupId Administrators -RunLevel Highest\n Settings = New-ScheduledTaskSettingsSet -Hidden\n}\n\nRegister-ScheduledTask @ScheduledTask -Verbose:$false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + }, + { + "Name": "Ensure Chocolatey CLI 1.4.0", + "IsPrivileged": true, + "PlanOrder": 2, + "Script": "choco upgrade chocolatey --version=1.4.0 --source=\"'chocolatey.licensed'\"\nexit $LASTEXITCODE", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + + +##### Upgrade the Chocolatey for Business Client Packages to the Latest Version. + +Save the following as a `.json` file to import as a Chocolatey Central Management Deployment Plan: + +export const collapseSeven = { + id: 'absoluteLatestJson', + title: 'View JSON', +} + + + ```json + { + "Name": "Upgrade Chocolatey for Business Client", + "ScheduledDateTimeUtc": null, + "LastScheduledDateTimeUtc": null, + "RepeatPeriod": 0, + "ExecutionTimeoutInSeconds": 14400, + "RequiresApproval": false, + "DeploymentSteps": [ + { + "Name": "Upgrade Chocolatey for Business Client Components", + "IsPrivileged": true, + "PlanOrder": 1, + "Script": "$delayInMinutes = 1\n\n# If using an internal repository to install Chocolatey Agent, replace `chocolatey.licensed` below\n# with the name or URL of your internally configured source.\nchoco upgrade chocolatey-agent --source=\"'chocolatey.licensed'\"\n\n# Ensure the deployment task registers as failed if the installation failed, and skip registering the\n# scheduled task.\nif ($LASTEXITCODE -ne 0) {\n Write-Error 'The upgrade failed!'\n exit $LASTEXITCODE\n}\n\n# Restart the Agent service after the preset delay time via a scheduled task.\n$ScheduledTask = @{\n TaskName = \"restart chocolatey-agent\"\n Description = \"Upgrade Chocolatey Agent\"\n Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes($delayInMinutes)\n Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument \"-WindowStyle Hidden -Command Restart-Service chocolatey-agent\"\n Principal = New-ScheduledTaskPrincipal -GroupId Administrators -RunLevel Highest\n Settings = New-ScheduledTaskSettingsSet -Hidden\n}\nRegister-ScheduledTask @ScheduledTask -Verbose:$false", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + }, + { + "Name": "Ensure Chocolatey CLI is Upgraded", + "IsPrivileged": true, + "PlanOrder": 2, + "Script": "choco upgrade chocolatey --source=\"'chocolatey.licensed'\"\nexit $LASTEXITCODE", + "ValidExitCodes": "0, 1605, 1614, 1641, 3010", + "ExecutionTimeoutInSeconds": 14400, + "FailOnError": true, + "RequireSuccessOnAllComputers": false, + "MachineContactTimeoutInMinutes": 0, + "DeploymentStepGroupIds": [] + } + ] + } + ``` + diff --git a/src/content/docs/en-us/central-management/usage/examples/index.mdx b/src/content/docs/en-us/central-management/usage/examples/index.mdx new file mode 100644 index 00000000000..5d25cf52c80 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/examples/index.mdx @@ -0,0 +1,8 @@ +--- +order: 40 +xref: ccm-usage-examples +title: Examples +description: Suggested configurations, deployments, and usages for Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/index.mdx b/src/content/docs/en-us/central-management/usage/index.mdx new file mode 100644 index 00000000000..40226799cce --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/index.mdx @@ -0,0 +1,8 @@ +--- +order: 30 +xref: ccm-usage +title: Usage +description: Information about how to works with the different entities/functionality contained within Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/service/configuration.mdx b/src/content/docs/en-us/central-management/usage/service/configuration.mdx new file mode 100644 index 00000000000..03e3a6c14b0 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/service/configuration.mdx @@ -0,0 +1,117 @@ +--- +order: 10 +xref: ccm-usage-service-configuration +title: Configuration +description: Information about the configuration options available for the CCM Service +--- +import Xref from '@components/Xref.astro'; + +## Chocolatey Central Management Service Configuration File + +> :choco-warning: **WARNING** +> +> Any changes to the `chocolatey-central-management.exe.config` file will require that the Chocolatey Central Management Service be restarted. + +There are a number of configuration options within the `chocolatey-central-management.exe.config` to control how the Chocolatey Central Management Service operates. + +### StaleActiveTimeoutBufferInSeconds + +The amount of time, in seconds, to add as a buffer when checking for stale active computers in Chocolatey Central Management. + +Default Value: `600` + +### UpdateKpisTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between each execution of updating the Chocolatey Central Management KPIs (Key Performance Indicators). + +Default Value: `180` + +### CheckForComputerInformationMessagesToProcessTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between checking for computer information messages to process in Chocolatey Central Management. + +Default Value: `30` + +### CheckForDeploymentStepResultMessagesToProcessTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between checking for Deployment Step result messages to process in Chocolatey Central Management. + +Default Value: `30` + +### CheckForUnreachableComputersTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between checking for unreachable computers in Chocolatey Central Management. + +Default Value: `180` + +### CheckForStaleActiveDeploymentComputersTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between checking for stale active computers in Chocolatey Central Management. + +Default Value: `240` + +### CheckForScheduledDeploymentPlansTimerIntervalInSeconds + +The amount of time, in seconds, of the interval between checking for scheduled Deployment Plans in Chocolatey Central Management. + +Default Value: `60` + +### ComputerInformationMessagesFolderPath + +The path to the folder where incoming computer information messages will be stored. + +Default Value: `C:\ProgramData\chocolatey\services\computer_information_messages` + +### ComputerInformationMessagesProcessingFolderPath + +The path to the folder where computer information messages will be processed. + +Default Value: `C:\ProgramData\chocolatey\services\computer_information_messages_processing` + +### DeploymentStepResultMessagesFolderPath + +The path to the folder where incoming Deployment Step result messages will be stored. + +Default Value: `C:\ProgramData\chocolatey\services\deployment_step_result_messages` + +### DeploymentStepResultMessagesProcessingFolderPath + +The path to the folder where Deployment Step result messages will be processed. + +Default Value: `C:\ProgramData\chocolatey\services\deployment_step_result_messages_processing` + +### DeploymentStepResultMessagesFailedFolderPath + +The path to the folder where Deployment Step result messages that failed to process will be stored. _(Available since v0.8.0)_ + +Default Value: `C:\ProgramData\chocolatey\services\deployment_step_result_messages_failed` + +## Chocolatey Configuration File + +> :choco-info: **NOTE** +> +> When changes are made to these settings via the `choco config` command, there is no requirement to restart the CCM Service. These changes will be automatically picked up, and the necessary components within the CCM Service updated to use the changed values. + +### centralManagementServiceUrl + +The is the URL that is used by the Chocolatey Central Management Service to listen for incoming requests from the Chocolatey Agents installed on client machines. This configuration setting is used by both the Chocolatey Central Management Service, as well as Chocolatey Agent. + +Default Value: `https://:24020/ChocolateyManagementService` + +### centralManagementReceiveTimeoutInSeconds + +The amount of time, in seconds, that the Chocolatey Central Management Service connection can remain inactive, during which no application messages are received, before it is dropped. + +Default Value: `30` + +### centralManagementSendTimeoutInSeconds + +The amount of time, in seconds, that the Chocolatey Central Management Service will wait before raising an exception when attempting to perform a write operation. + +Default Value: `30` + +### centralManagementMaxReceiveMessageSizeInBytes + +The maximum size, in bytes, for a message that can be processed by the Chocolatey Central Management Service. + +Default Value: `2147483647` \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/service/index.mdx b/src/content/docs/en-us/central-management/usage/service/index.mdx new file mode 100644 index 00000000000..652939a2860 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/service/index.mdx @@ -0,0 +1,8 @@ +--- +order: 20 +xref: ccm-usage-service +title: Service +description: Information about how to works with the different entities/functionality contained within Chocolatey Central Management Service +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/service/message-processing.mdx b/src/content/docs/en-us/central-management/usage/service/message-processing.mdx new file mode 100644 index 00000000000..23a58c55647 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/service/message-processing.mdx @@ -0,0 +1,46 @@ +--- +order: 20 +xref: ccm-usage-service-message-processing +title: Message Processing +description: Information about how messages are processed by the Chocolatey Central Management Service +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> The message processing that is described below was introduced in version 0.4.1 of the Chocolatey Central Management Service. + +In order to ensure the safe delivery of messages from each Chocolatey Agent into the Chocolatey Central Management Service, a message processing system has been implemented. Rather than attempt to immediately add information into the database, each message is immediately stored to disk, and then processed via recurring jobs within the Chocolatey Central Management Service. This allows for the Service to easily handle bursts of messages that may happen as a result of a Deployment Step occurring on many machines, and then computers reporting into the Service. + +## Message Processing Folders + +The Chocolatey Central Management Service uses a number of different folders to process the incoming messages. These can be configured in the `chocolatey-central-management.exe.config` within the installation folder for the service. These folders are: + +* +* +* +* +* + +As new messages, both computer information and Deployment Step results, arrive at the Chocolatey Central Management Service, they are immediately stored into the `*MessagesFolderPath` folders. Then as the service begins to process these messages, they are moved into the `*MessageProcessingFolderPath` folders, and once they are processed, the stored messages are deleted. + +## Message Processing Folder Permissions + +During start up of the Chocolatey Central Management Service, it will ensure that all required folders are created (based on the configured values above). In addition, it will ensure, for security purposes, that only the user account that is currently running the Chocolatey Central Management Service has read/write permissions to these folders. By default, this will be the ChocolateyLocalAdmin user, which Chocolatey creates as part of the installation process. If an additional account is used to run the Chocolatey Central Management Service, then this account, and only this account, will be provided read/write permissions to these folders. + +## Poison Messages + +Starting in version 0.8.0 of the Chocolatey Central Management service there is now an additional folder for Deployment Step messages. Processed messages that failed to update the status of the Deployment Step will be moved to the folder specified in after the update has been tried 3 times. Files in this directory are not deleted by the Chocolatey Central Management service. + +See the additional information below for computers which have reported in the status of their Chocolatey packages, or for older versions of Chocolatey Central Management service. + +If there is an error during the processing of a message, the message will not be deleted from the `*MessageProcessingFolderPath`. As a result, the message will attempt to be processed again. + +In the unlikely event that there is something "wrong" with the message, and it can't be processed, it will become what is known as a "poison message" and it will remain in the queue indefinitely, attempting to be processed each cycle. If/when this happens, it will be necessary to remove this message from the `*MessageProcessingFolderPath` folder. + +To do this, first stop the Chocolatey Central Management Service. Due to the permissions that are applied on these folders, it will first be necessary for an administrator of the machine to take ownership of the folder that contains the message(s), and to either: + +* move the message to another location +* delete the message + +Once any poison messages have been removed, the Chocolatey Central Management Service should be restarted, and the permissions for those folders will be reapplied. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/audit-logs.mdx b/src/content/docs/en-us/central-management/usage/website/administration/audit-logs.mdx new file mode 100644 index 00000000000..ee2004add87 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/audit-logs.mdx @@ -0,0 +1,41 @@ +--- +order: 40 +xref: ccm-administration-audit-logs +title: Audit Logs +description: Information about using the audit logs within the Chocolatey Central Management Administration section +--- +import Xref from '@components/Xref.astro'; + +## Operation logs + +The Chocolatey Central Management Website stores a lot of information about the operations that have been performed on it. + +It is possible to search for operations that have happened using a number of different filters: + +- Date range +- User name + +Expanding the `Show advanced filters` section displays the following filters: + +- Service +- Duration +- Action +- Error state +- Browser + +Once the required filters have been set, pressing the `Refresh` button will show the available results. + +![Operation logs tab within the Audit logs section of the Administration | Settings page](/images/ccm-playwright/administration/audit-logs/left-menu-active.png) + +It is possible to see all available information for an operation by clicking the :mag: button to the left-hand side of the table. + +If required, the available results can be exported to an Excel document using the `Export | Export to Excel` button. +This will generate a file named something similar to the following `Chocolatey_AuditLogs_20231122_095144.xlsx`. + +The length of time that Operation logs are stored within the Chocolatey Central Management Website can be configured in the Settings tab. + +## Change logs + +> :choco-warning: **WARNING** +> +> This section of the Chocolatey Central Management Website does not actually provide any functionality, and will be removed in a future version. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/index.mdx b/src/content/docs/en-us/central-management/usage/website/administration/index.mdx new file mode 100644 index 00000000000..bb956d32e7f --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/index.mdx @@ -0,0 +1,8 @@ +--- +order: 70 +xref: ccm-administration +title: Administration +description: How to configure the different administration sections of Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/maintenance.mdx b/src/content/docs/en-us/central-management/usage/website/administration/maintenance.mdx new file mode 100644 index 00000000000..e67accdb74c --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/maintenance.mdx @@ -0,0 +1,25 @@ +--- +order: 50 +xref: ccm-administration-maintenance +title: Maintenance +description: Information about using the maintenance functions within the Chocolatey Central Management Administration section. +--- +import Xref from '@components/Xref.astro'; + +## Caches + +To improve overall performance of the Chocolatey Central Management Website, a number of different caches are used. + +If/when required, these caches can be cleared, either individually, or all at once. + +![Caches tab within the Maintenance section of the Administration | Settings page](/images/ccm-playwright/administration/maintenance/left-menu-active.png) + +## Website Logs + +It is possible to review, and download, the logs for the Chocolatey Central Management Website. + +Clicking the `Download all` button will download all the available Website logs in a `WebSiteLogs.zip` file. + +Clicking the `Refresh` button will load any additional logs that have been created since the page was first opened. + +![Websites Logs tab within the Maintenance section of the Administration | Settings page](/images/ccm-playwright/administration/maintenance/tab-website-logs.png) \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/roles.mdx b/src/content/docs/en-us/central-management/usage/website/administration/roles.mdx new file mode 100644 index 00000000000..09e824d69c2 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/roles.mdx @@ -0,0 +1,75 @@ +--- +order: 10 +xref: ccm-administration-roles +title: Roles +description: Information about configuring roles within the Chocolatey Central Management Administration section +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management's roles are the basis for setting collections of permissions that can be assigned to specific users within Chocolatey Central Management. + +Roles can be accessed by going to Administration on the left-hand navigation and selecting roles. + +![Roles menu entry on the CCM Dashboard](/images/ccm-playwright/dashboard/left-menu-nested-roles.png) + +## Creating a Role + +On the main roles page, select the **+ Create New Role** button. + +![Create New Role button on the Roles page](/images/ccm-playwright/administration/roles/button-create-new-role.png) + +You will then be presented with the Role properties window where you can enter the name for the new role. You also have the option to make your new role the Default which will be added to all new users by default. + +![Creating New Role Setting Role Properties](/images/ccm-playwright/administration/roles/modal-new-role-tab-role.png) + +Next you'll want to click over to Permissions. This window will allow you to select what specific permissions you wish to give your new role. + +![Creating New Role Setting Permissions](/images/ccm-playwright/administration/roles/modal-new-role-tab-permissions.png) + +Click :floppy_disk: **Save** to close the window and create the new role. + +## Editing a Role + +> :choco-info: **NOTE** +> +> If you do not see the **Edit** menu entry or the :gear: **Actions** buttons, please see your Administrator to determine if your account has the _Edit Roles_ permission. + +On the main Roles page, find the role you want to edit. +You can also use _Select Permissions (0)_ to filter the Roles listed based on them having the permissions you select. + +Select the :gear: **Actions** button on the left-hand side of the role, and then select **Edit** to open the _Edit Group_ window. + +![Edit menu entry in role actions flyout menu](/images/ccm-playwright/administration/roles/table-row-button-action-dropdown-menu-edit.png) + +From the **Edit Role** window, you can modify the name, set it to be the Default role, and edit its permissions. + +## Deleting a Role + +> :choco-info: **NOTE** +> +> If you do not see the **Delete** menu entry or the :gear: **Actions** buttons, please see your Administrator to determine if your account has the _Edit Roles_ permissions. +> +> Roles labelled **Static** cannot be deleted. +> +> You cannot delete a Role if the account you are using also has the Role assigned to it. + +On the main Roles page, find the role you want to delete. You can also use _Select Permissions (0)_ to filter the roles listed based on permission. Similar to the [Edit Role](#editing-a-role) action, select the :gear: **Actions** button on the left-hand side of the role, and select **Delete**. You will be prompted to confirm the deletion. + +## Pre-Configured Roles + +When first browsing to the Roles page, you'll be presented with 4 pre-configured roles that are built-in to Chocolatey Central Management. + +* CCM Admin +* CCM User +* CCM Deployment +* CCM Deployment Privileged + +These pre-configured roles are labeled **Static** and cannot be deleted. They can however be edited by name, default role selection, and permissions. + +We recommend you review the permissions these roles have. Then edit them, if needed, to work within your environment. + +## Related Topics + +* +* +* diff --git a/src/content/docs/en-us/central-management/usage/website/administration/sensitive-variables.mdx b/src/content/docs/en-us/central-management/usage/website/administration/sensitive-variables.mdx new file mode 100644 index 00000000000..317b863fe4c --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/sensitive-variables.mdx @@ -0,0 +1,51 @@ +--- +order: 30 +xref: ccm-administration-sensitive-variables +title: Sensitive Variables +description: Information on sensitive variables within Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; +import SensitiveVariablesNote from '@components/docs/SensitiveVariablesNote.mdx'; + +Chocolatey Central Management gives you the ability to create sensitive variables for use in Deployment Steps. + +The **Sensitive Variables** page can be accessed from the Administration section of Chocolatey Central Management. The page is only visible to users who have permissions to create or delete sensitive variables. + +![Chocolatey Central Management dashboard, arrow pointing to Sensitive Variables menu in the left sidebar entry.](/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png) + +## Creating a new Sensitive Variable + +1. From the Chocolatey Central Management Dashboard, select `Administration` > `Sensitive Variables` from the left sidebar. + + ![Chocolatey Central Management dashboard, arrow pointing to Sensitive Variables menu in the left sidebar entry.](/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png) +1. Select the :heavy_plus_sign: **Create new sensitive variable** button at the top of the page. + + ![CCM Sensitive Variables page, arrow pointing to Create new sensitive variable button](/images/ccm-playwright/administration/sensitive-variables/button-create-new-sensitive-variable.png) +1. Fill in the details and click Save. + + ![Fill in Sensitive Variables information](/images/ccm-playwright/administration/sensitive-variables/modal-new-sensitive-variable.png) + +Alternatively, variables can also be added from an Deployment Step Advanced script by clicking the :heavy_plus_sign: in the upper right corner. + +![Sensitive Variables Added from the Advanced script of a Deployment Step](/images/ccm-playwright/deployment-plans/edit/modal-step-button-create-sensitive-variable.png) + +## Adding Sensitive Variables to scripts + + + +1. In an Advanced script of a Deployment Step, select the variable to insert from the Sensitive Variables drop down. + +![Deployment Step Advanced script, with an arrow pointing to the Sensitive Variables selection dropdown.](/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command-select-sensitive-variable.png) + +## Deleting Sensitive Variables + +1. From the Chocolatey Central Management Dashboard, select `Administration` > `Sensitive Variables` from the left sidebar. + + ![Central Management dashboard, arrow pointing to Sensitive Variables menu in the left sidebar entry on the CCM Dashboard](/images/ccm-playwright/dashboard/left-menu-nested-sensitive-variables.png) +1. Select :wastebasket: **Delete** beside the Sensitive Variable you wish to delete. + + ![Sensitive Variables page with arrow to a delete button](/images/ccm-playwright/administration/sensitive-variables/button-quick-action-delete.png) + +## Editing / Changing Sensitive Variables + +You cannot change or edit a Sensitive Variable directly. If you need to change the value a Sensitive Variable has, please [delete it](#deleting-sensitive-variables) and [create it](#creating-a-new-sensitive-variable) again. diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/dashboard.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/dashboard.mdx new file mode 100644 index 00000000000..e08c44b6be4 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/dashboard.mdx @@ -0,0 +1,31 @@ +--- +order: 13 +xref: ccm-administration-settings-dashboard +title: Dashboard +description: Information about setting Dashboard settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.12.0. + +On the there is a count of the `Total Stale Computers`. This is defined as `the total number of Computers that haven't reported into Chocolatey Central Management in the last 180 days.`. Here 180 is the default value, but you can change this by using the following steps: + +1. Open the Chocolatey Central Management Site in the browser. +1. Login with the `ccmadmin` user. +1. In the left-hand menu click on `Administration` and then `Settings`. +1. Click on the `Dashboard` tab in the `Settings` screen. + + ![Chocolatey Central Management Dashboard Settings](/images/ccm-playwright/administration/settings/tab-dashboard.png) + +1. Adjust the `Amount of time, in Days, before being notified of Computers not reporting in`. +1. Click the `Save All` button to save changes. + +> :choco-info: **NOTE** +> +> When the is enabled, it is not possible to set the `Amount of time, in Days, before being notified of Computers not reporting in` for the Dashboard to a number that is lower than what is currently configured for the `Amount of time, in Days, to keep stale Computers before deleting` setting, and vice versa. If this is attempted, a validation warning will be shown. + +> :choco-info: **NOTE** +> +> When upgrading to Chocolatey Central Management 0.12.0, if the is enabled, if the current value for `Amount of time, in Days, to keep stale Computers before deleting` is less than the default value for `Amount of time, in Days, before being notified of Computers not reporting in`, a change will be made to the default value to make it half of the configured value for `Amount of time, in Days, to keep stale Computers before deleting`. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/email.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/email.mdx new file mode 100644 index 00000000000..ba84e999de3 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/email.mdx @@ -0,0 +1,29 @@ +--- +order: 40 +xref: ccm-administration-settings-email +title: Email (SMTP) +description: Information about using up email settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +The CCM Site needs to be able to send email for certain actions. For example, when a new user is registering with the system, or when sending out forgotten password emails. Valid SMTP Configuration has to be provided in order for these emails to be sent out. Follow these steps to configure SMTP for CCM. + +1. Open the CCM Site in the browser +1. Login with the `ccmadmin` user +1. In the left-hand menu click on `Administration` and then `Settings` +1. Click on the `Email (SMTP)` tab in the `Settings` screen + + ![Chocolatey Central Management Email Settings](/images/ccm-playwright/administration/settings/tab-email-(smtp).png) + +1. Add the SMTP settings for your environment. If you uncheck the `Use default credentials` checkbox, you will need to provide the `Domain name`, `User name` and `SMTP Password` for a user that is permitted to send email via the system that is being used. +1. Click the `Save All` button to save changes +1. Change the email address to go to your email address +1. Click the `Send Test Email` button and ensure that an email is received correctly + +You should receive a notification similar to this: + +![Test email sent successfully](/images/ccm-playwright/administration/settings/email-(smtp)-toast-success.png) + +> :choco-warning: **WARNING** +> +> If you leave either the `Default from (sender) email address` or `Default from (sender) display name` with their default values, you will see an error when an email is attempted to be sent via the system. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/encryption-passphrase.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/encryption-passphrase.mdx new file mode 100644 index 00000000000..37cfc50edd7 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/encryption-passphrase.mdx @@ -0,0 +1,8 @@ +--- +order: 70 +xref: ccm-encryption-passphrase +title: Encryption Passphrase +description: Information on the Encryption Passphrase within Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/general.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/general.mdx new file mode 100644 index 00000000000..2ba51136bdb --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/general.mdx @@ -0,0 +1,13 @@ +--- +order: 10 +xref: ccm-administration-settings-general +title: General +description: Information about using up general settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +The Administration Settings page loads the General tab by default. This page is used to set the default timezone. + +If a user does not set their own timezone for display from `My Settings`, then the selected timezone will be used for the display of all times. + +![General Settings Administration page of Chocolatey Central Management](/images/ccm-playwright/administration/settings/tab-general.png) diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/index.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/index.mdx new file mode 100644 index 00000000000..da883efdcb3 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/index.mdx @@ -0,0 +1,8 @@ +--- +order: 60 +xref: ccm-administration-settings +title: Settings +description: How to configure the different settings of Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/retention.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/retention.mdx new file mode 100644 index 00000000000..18916184be0 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/retention.mdx @@ -0,0 +1,75 @@ +--- +order: 50 +xref: ccm-administration-settings-retention +title: Retention Policies +description: Information about using retention settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management has a number of settings that allow you to adjust various retention periods. By default, only the Audit Retention policy is enabled. + +If you want to change these settings, follow these steps: + +1. Open the CCM Site in the browser. +1. Login with the `ccmadmin` user. +1. In the left-hand menu click on `Administration` and then `Settings`. +1. Click on the `Retention Policies` tab + +1. Modify the settings as required +1. Click the `Save All` button at the bottom left of the page to save your settings. + + +As noted in the User Interface, any modifications to this section of the settings will require the Web Application to be restarted. This can be completed by doing the following: + +1. Get direct access to the machine that is hosting the CCM Web Application +1. Open an administrative PowerShell session +1. Run the following commands: + ```powershell + Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process -Force + Stop-Website -Name ChocolateyCentralManagement + Restart-WebAppPool -Name ChocolateyCentralManagement + Start-Website -Name ChocolateyCentralManagement + ``` + +## Audit Retention + +> :choco-warning: **WARNING** +> +> **BREAKING CHANGE** +> +> This feature was added, as a breaking change, in version 0.6.0 of Chocolatey Central Management. Audit Retention is enabled by default, and will immediately start truncating the audit log table as soon as it is installed. +> If you require keeping all audit logs, we would recommend that you first back up the CCM database before applying the new version. + +In an attempt to control the size of the Chocolatey Central Management database, it is possible to control the retention policy for the audit logs table within the application. + +By default, Audit Retention is enabled, and any logs that are older than 30 days will automatically be removed. + +![Audit Retention Settings](/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-audit-retention.png) + +## Stale Computer Retention + + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +In Chocolatey Central Management, a stale computer is one which hasn't reported in for a long period of time. This could be perfectly normal, but it could also be a sign that this computer is no longer active, and should be removed. This is something that can be done manually, given the correct permissions, from the , however, enabling this setting automatically removes stale computers from Chocolatey Central Management. + +By default, Stale Computer Deletion is disabled. When it is enabled, computers that haven't reported into Chocolatey Central Management within the set timeframe (the default is 365 days) will be removed. + +![Stale Computer Deletion Settings](/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-stale-computer-retention.png) + +## Deployment Plan Retention + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.11.0. + +Chocolatey Central Management has the ability to automatically archive or delete Deployment Plans that have reached a completion state. + + +By default, Deployment Plan Retention is disabled for both archiving and deleting. When it is enabled, Deployment Plans that have completed beyond the set timeframe (the default is 30 days) will be archived, or deleted. If both archive and delete are enabled, the delete period will be considered the combination of the archive and the delete. + + + +![Deployment Plan Retention Settings](/images/ccm-playwright/administration/settings/retention-policies-checkbox-enable-deployment-plan-retention.png) diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/security.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/security.mdx new file mode 100644 index 00000000000..b5a99138039 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/security.mdx @@ -0,0 +1,36 @@ +--- +order: 30 +xref: ccm-administration-settings-security +title: Security +description: Information about using up security settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +## Two Factor Login + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +By default, Two Factor Login is disabled in Chocolatey Central Management. + +If you want to change these settings, follow these steps: + +1. Open the CCM Site in the browser. +1. Login with the `ccmadmin` user. +1. In the left-hand menu click on `Administration` and then `Settings`. +1. Click on the `Security` tab +1. Either enable, or disable, the `Enable two factor user login` checkbox as required. + + ![Chocolatey Central Management Security Two Factor Login Settings](/images/ccm-playwright/administration/settings/security-checkbox-enable-two-factor-authentication.png) + +1. If enabled, choose whether to `Enable email verification` and `Allow to remember browser. If you allow this, users can select to remember browser to skip second time two factor login for the same browser.` +1. Click the `Save All` button at the top right of the page to save your settings. + +> :choco-info: **NOTE** +> +> If you disable the `Enable email verification` option, this is the same as disabling all two factor login. In future versions of Chocolatey Central Management, there will be additional methods of verification on top of only email, this is why there is a checkbox for it currently. + +Once enabled, any user logging into the Chocolatey Central Management website will be presented with this screen, where they will have the allotted time to enter the security code which will have been sent to the email address associated with their account. + +The `Remember this browser` checkbox is what can be enabled/disabled in step 6 above. If the user chooses to enable this setting, a cookie will be created and stored in the browser, meaning that they will not be promoted for a two factor login security code on this browser again. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/user-management.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/user-management.mdx new file mode 100644 index 00000000000..4e1376d53bb --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/user-management.mdx @@ -0,0 +1,36 @@ +--- +order: 20 +xref: ccm-administration-settings-user-management +title: User Management +description: Information about using up user management settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +## LDAP Configuration + +> :choco-info: **NOTE** +> +> The Central Management Server must be joined to the Active Directory Domain. + +1. Open the CCM Site in the browser. +1. Login with the `ccmadmin` user. +1. In the left-hand menu click on `Administration` and then `Settings`. +1. Click on the `User management` tab in the `Settings` screen. +1. Under LDAP Setting click the `Enable LDAP Authentication` button. +1. Fill in your FQDN for the `Domain name` field and the `User name` field with an active directory account that has access to query user accounts within your active directory environment. + + ![CCM LDAP Setup](/images/ccm-playwright/administration/settings/user-management-checkbox-enable-ldap.png) + +1. Click the `Update LDAP Password` button to open a modal window to allow you to enter/confirm the password that is to be used. + + ![Update LDAP Password](/images/ccm-playwright/administration/settings/user-management-modal-ldap-password.png) + +1. Click the `Save` button +1. Click the `Save All` button at the top right of the page to save your settings. + +> :choco-info: **NOTE** +> +> In order for LDAP authentication to succeed in versions of Central Management 0.3.1 and lower +> an Email Address, Surname, and GivenName must be configured on the properties of the Active Directory user you are +> attempting to use for login. If any of these fields are empty, errors will be encountered when attempting to login +> to the Central Management application. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/administration/settings/website.mdx b/src/content/docs/en-us/central-management/usage/website/administration/settings/website.mdx new file mode 100644 index 00000000000..07f03b02658 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/settings/website.mdx @@ -0,0 +1,29 @@ +--- +order: 15 +xref: ccm-administration-settings-website +title: Website +description: Information about setting Website settings within the Administration Settings screen +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.11.0. + +When Chocolatey Central Management sends out emails, they need to know the hostname of the CCM server in order to be able to correctly link back to the Chocolatey Central Management website. When Chocolatey Central Management is installed, it tries to determine the website host and stores it in the Website Settings as the `Web site root address`. If the hostname used to access the Chocolatey Central Management website changes, you will want to update this setting. Follow these steps to configure the Web site root address for Chocolatey Central Management. + +1. Open the CCM Site in the browser. +1. Login with the `ccmadmin` user. +1. In the left-hand menu click on `Administration` and then `Settings`. +1. Click on the `Website` tab in the `Settings` screen. + + ![Chocolatey Central Management Website Settings](/images/ccm-playwright/administration/settings/tab-website.png) + +1. Adjust the Web site root address. +1. Click the `Save All` button to save changes. + +As noted in the User Interface, any modifications to this section of the settings will require the Chocolatey Central Management Service to be restarted. This can be completed by doing the following: + +1. Get direct access to the machine that is hosting the Chocolatey Central Management Service. +1. Open an administrative PowerShell session. +1. Run the following command: `Restart-Service chocolatey-central-management`. diff --git a/src/content/docs/en-us/central-management/usage/website/administration/users.mdx b/src/content/docs/en-us/central-management/usage/website/administration/users.mdx new file mode 100644 index 00000000000..72e42eac65e --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/administration/users.mdx @@ -0,0 +1,110 @@ +--- +order: 20 +xref: ccm-administration-users +title: Users +description: Information about configuring Users within the Chocolatey Central Management Administration section +--- +import Xref from '@components/Xref.astro'; + +In Chocolatey Central Management, Users are people who are given access to login in, and perform operations. + +Users can be accessed by going to Administration on the left-hand navigation and selecting Users. + +![Users menu entry on the Chocolatey Central Management Dashboard](/images/ccm-playwright/dashboard/left-menu-nested-roles.png) + +## Creating a User + +> :choco-info: **NOTE** +> +> If you do not see the **+ Create new user** button, please see your Administrator to determine if your account has the _Creating new user_ permission. + +On the main Users page, select the **+ Create New User** button. + +![Create New User button on the Users page](/images/ccm-playwright/administration/users/button-create-new-user.png) + +You will then be presented with the `Create New User` window where you can enter all the information for the User, including `First Name`, `Email address`, etc. + +![Creating New User Setting User Properties](/images/ccm-playwright/administration/users/modal-new-user-tab-information.png) + +Next you'll want to click over to `Roles``. This window will allow you to select what specific you wish to give your new User. + +![Creating New User Setting Roles](/images/ccm-playwright/administration/users/modal-new-user-tab-roles.png) + +Click :floppy_disk: **Save** to close the window and create the new User. +A green toast notification will be shown once the operation completes successfully. + +## Editing a User + +> :choco-info: **NOTE** +> +> If you do not see the **Edit** menu entry or the :gear: **Actions** buttons, please see your Administrator to determine if your account has the _Editing user_ permission. + +On the main Users page, [find](#searching-for-a-user) the User you want to edit. +Select the :gear: **Actions** button on the left-hand side of the User, and then select **Edit** to open the _Edit User_ window. + +![Edit menu entry in User actions flyout menu](/images/ccm-playwright/administration/users/table-row-button-action-dropdown-menu-edit.png) + +From the **Edit Role** window, you can modify all the properties for a User, for example, `First Name`, `Phone number`, etc. In addition, you can alter the associated with the User. + +Once modifications are complete, click the :floppy_disk: **Save** button. +A green toast notification will be shown once the operation completes successfully. + +## Fine grained permissions + +In addition to configuring a set of Roles for an individual User, so can set speicial permissions for an individual User. + +On the main Users page, [find](#searching-for-a-user) the User you want to edit. +Select the :gear: **Actions** button on the left-hand side of the User, and then select **Permission** to open the _Permissions_ window. + +![Permissions menu entry in User actions flyout menu](/images/ccm-playwright/administration/users/modal-permissions.png) + +From the tree of permissions, check/uncheck the permissions that are needed. + +Once modifications are complete, click the :floppy_disk: **Save** button. +A green toast notification will be shown once the operation completes successfully. + +## Deleting a User + +> :choco-info: **NOTE** +> +> If you do not see the **Delete** menu entry or the :gear: **Actions** buttons, please see your Administrator to determine if your account has the _Deleting user_ permission. + +On the main Users page, [find](#searching-for-a-user) the User that needs to be deleted. +Select the :gear: **Actions** button on the left-hand side of the User, and then select **Delete**. +A prompt will be shown asking `Are you sure?`. +Click `Cancel` to not continue with the operation. +Click `Yes` to proceed with the operation. +A green toast notification will be shown once the operation completes successfully. + +## Unlocking a User + +> :choco-info: **NOTE** +> +> If you do not see the **Unlock** menu entry or the :gear: **Actions** buttons, please see your Administrator to determine if your account has the _Editing user_ permission. + +If a User enters the wrong login information 5 times, their account will become locked. +To allow them to attempt to login again, the account will need to be unlocked. +On the main Users page, [find](#searching-for-a-user) the User that is locked out. +Select the :gear: **Actions** button on the left-hand side of the User, and then select **Unlock**. +A green toast notification will be shown once the operation completes successfully. + +## Searching for a User + +By default, there is a single search box, which can be used to search for a given User by their `User name`, `First Name`, `Surname`, and `Email`. + +Clicking the `Show advanced filters` link, provide additional filtering options: + +- Permissions +- Role +- Only locked users + +## Exporting User Information + +From the main Users page, it is possible to export all User information into either PDF or Excel format. +This can be done by using either the `Export | Export to PDF`, or the `Export | Export to Excel` button. + +This will generate a file name similar to `Chocolatey_Users_20231122_130612.xlsx`, or `Chocolatey_Users_20231122_130612.pdf`. + +## Pre-Configured Users + +In a fresh installation of Chocolatey Central Management, there is a single pre-configured User called `ccmadmin`, which has been allocated the `CCM Admin` Role. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/computers.mdx b/src/content/docs/en-us/central-management/usage/website/computers.mdx new file mode 100644 index 00000000000..1ab79567606 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/computers.mdx @@ -0,0 +1,124 @@ +--- +order: 40 +xref: ccm-computers +title: Computers +description: Information on computers within CCM +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management gives you visibility into what's installed on a given computer, as well as their last check-in to Central Management and IP Address. + +The **Computers** page can be accessed from the Central Management Dashboard via the menu entry in the left-hand sidebar. + +![Computers menu entry on the CCM Dashboard](/images/ccm-playwright/dashboard/left-menu-computers.png) + +## Registering a New Computer + +Client computers (agents) will show up in Central Management automatically as long as long as these conditions are met for the client computer: + +1. The `chocolatey`, `chocolatey.extension`, and `chocolatey-agent` packages are installed, alongside a valid Chocolatey for Business license. +1. The `useChocolateyCentralManagement` feature is enabled. +1. The `centralManagementServiceUrl` is set correctly in the chocolatey configuration file (typically to `https://:24020/ChocolateyManagementService`) +1. The client has access to the above URL (this may require opening the port in your firewall, etc.) so that it can resolve the SSL certificate necessary to communicate with the CCM service. + +Please see for more details and setup. + +## Viewing Installed Software on a Computer + +> :choco-info: **NOTE** +> +> Starting with Chocolatey Central Management 0.10.0, the groups that a computer is a member of is shown in both the table of all computers, as well as on the computer details pages. By default, this will only show the first 5 group memberships. If there are more group associations: +> +> - The computers table will display a `...` link in the Groups column. Upon hovering this link, a tooltip will be shown with all group memberships. +> - On the computer details page, a `View More` link will be shown. When clicked, this will cause an expansion to show all group memberships and the link will update to say `View Less`. Clicking this link again will show the default previous view. + +From the main Computers page in Central Management, locate the computer of interest in the list or by providing a search term in the table filter. +Select the :gear: **Actions** menu in the corresponding left-hand column, and click **Details**. + +![Finding a computer's details menu option](/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-details.png) + +You will be presented with a list of the installed software packages for the machine, similar to below. + +![Computer details screen showing installed software](/images/ccm-playwright/computers/details/screen.png) + +## Creating a Draft Deployment Plan for a Computer + +Creating a Draft Deployment Plan for a Computer can be done from two pages: + +1. In the leftmost column of the Computer table you will find an :gear: **Actions** menu which will display a **Create New Deployment Plan** option. + + ![Finding the Create New Deployment Plan menu entry for a specific Computer on the Computers page](/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-create-new-deployment-plan.png) + +1. From the Computer Details page, click the :gear: **Actions** button and select the **Create New Deployment Plan** option. + + ![Button to create a new draft Deployment Plan from the Computer Details page](/images/ccm-playwright/computers/details/button-action-dropdown-menu-create-new-deployment-plan.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with a [Temporary Group](#xref:ccm-groups#temporary-groups) that contains the Computer selected. Upon arriving on the Edit Deployment Plan screen, this Deployment Step will be opened and ready to add a script command. + +![Automatically created Deployment Plan showing the Deployment Step modal script command area](/images/ccm-playwright/deployment-plans/edit/computers-modal-new-deployment-plan.png) + +The Deployment Plan can be saved without adding a script command, however it will be ineligible for deployment. A red warning icon will be shown on the Deployment Step, that when clicking will show a message. + +![Red popover warning on Deployment Step with ineligible deployment message](/images/ccm-playwright/deployment-plans/edit/popover-ineligible-step.png) + +After adding a script command to the Deployment Step, the Deployment Plan can be deployed as outlined in the . + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Upgrading All Outdated Software on a Computer + +Upgrading all outdated Software installed on a Computer can be done from two pages: + +1. In the leftmost column of the Computer table you will find an :gear: **Actions** menu which will display a **Upgrade Outdated Software** option. + + ![Finding the Upgrade Outdated Software menu entry for a specific Computer on the Computers page](/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-upgrade-outdated-software.png) + +1. From the Computer Details page, click the :gear: **Actions** button and select the **Upgrade Outdated Software** option. + + ![Button to create a new Deployment Plan to upgrade all outdated Software on a Computer from the Computer Details page](/images/ccm-playwright/computers/details/button-action-dropdown-menu-upgrade-outdated-software.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step per outdated Software. + +![Automatically created Deployment Plan showing Deployment Steps](/images/ccm-playwright/deployment-plans/edit/computers-upgrade-outdated-software.png) + +Each Deployment Step has a selected that contains the Computer, and the script command automatically entered. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Exporting a `packages.config` file for a computer + +> :choco-info: **NOTE** +> +> Starting with Chocolatey Central Management 0.11.0, the packages installed on a computer can be exported to a `packages.config` file. + +From the Computer details page, click the `Export` button and select the `Export to packages.config` option. + +![Computer details screen highlighting Export to packages.config button](/images/ccm-playwright/computers/details/button-action-dropdown-menu-export-to-packages.config.png) + +## Removing a Computer from Chocolatey Central Management + +> :choco-info: **NOTE** +> +> Unless you first uninstall (at minimum) the `chocolatey-agent` or disable Central Management by disabling the feature setting, the deleted computer will reappear when the Chocolatey Agent performs its next check-in. + +From the main Computers page in Central Management, locate the computer of interest in the list or by providing a search term in the table filter. +Select the :gear: **Actions** menu in the corresponding left-hand column, and click **Delete**. You will be prompted to confirm the deletion. + +![Deleting a computer in Central Management](/images/ccm-playwright/computers/table-row-button-action-dropdown-menu-delete.png) + +## FAQ + +### What do I do if computers are not showing up in CCM? + +You need to check the CCM service logs. The agent will always report success when it communicates with the service successfully. The service may reject what it receives, but due to security settings, it won't tell the client about that. + +The logs are located at `$env:ChocolateyInstall\logs\ccm-service.log`. If you are on a version of CCM prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +For more common errors related to checking in, see the as they dive deeper into common errors and resolutions related to things such as this. + +## Related Topics + +* +* +* +* diff --git a/src/content/docs/en-us/central-management/usage/website/dashboard.mdx b/src/content/docs/en-us/central-management/usage/website/dashboard.mdx new file mode 100644 index 00000000000..857baa839a0 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/dashboard.mdx @@ -0,0 +1,37 @@ +--- +order: 10 +xref: ccm-dashboard +title: Dashboard +description: Information on the dashboard page +--- +import Xref from '@components/Xref.astro'; + +The Dashboard page within the Chocolatey Central Management Website is the first page that can be seen after successful login. + +It captures top level information about the current state of the overall application, including: + +- Total Installed Packages + - This is the total number of packages currently installed across all the Computers that are reporting into Chocolatey Central Management. +- Total Outdated Packages + - This is the total number to outdated packages currently installed across all the Computers that are reporting into Chocolatey Central Management. +- Total Unique Installed Packages + - This is the total number of unique packages currently installed across all the Computers that are reporting into Chocolatey Central Management. +- Total Unique Outdated Packages + - This is the total number of unique outdated packages currently installed across all the Computers that are reporting into Chocolatey Central Management. + +Starting with Chocolatey Central Management 0.12.0, the following metrics are also available: + +- Total Draft/Ready Deployment Plans + - This is the total number of unique Deployment Plans in the Draft or Ready states in Chocolatey Central Management. +- Total Active Deployment Plans + - This is the total number of unique Deployment Plans in the Active state in Chocolatey Central Management. +- Total Stale Computers + - This is the total number of Computers that haven't reported into Chocolatey Central Management in the last 180 days. + +> :choco-info: **NOTE** +> +> There is a configuration value in the page to control how long a Computer has to be absent from reporting into Chocolatey Central Management before being considered stale. + +The `Last Updated` date/time that is shown is when the information was last updated by the Chocolatey Central Management Service. + +![Dashboard page for Chocolatey Central Management showing available KPI's and last updated time](/images/ccm-playwright/dashboard/left-menu-dashboard.png) \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/deployments.mdx b/src/content/docs/en-us/central-management/usage/website/deployments.mdx new file mode 100644 index 00000000000..169a863aec0 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/deployments.mdx @@ -0,0 +1,484 @@ +--- +order: 20 +xref: ccm-deployments +title: Deployment Plans +description: How to deploy packages, and execute PowerShell, on client machines +--- +import Xref from '@components/Xref.astro'; +import ImportDeploymentPlan from '@components/docs/ImportDeploymentPlan.mdx'; +import SensitiveVariablesNote from '@components/docs/SensitiveVariablesNote.mdx'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +## Description + +Chocolatey Central Managements' Deployments functionality allows for pre-defined actions to be executed across any Chocolatey-managed computers. +Deployment actions can be defined as simple `choco` commands, or as fully-fledged PowerShell scripts. + +## Creating a Deployment Plan + +To setup a new Deployment Plan, you'll need to create a Deployment Plan which defines the steps for the Deployment Plan and the Computers which will run them. +In order to get started, you'll need at least the `Create New Deployment Plan` and/or the `Create New Privileged Deployment Plan` permissions applied to your user account in Chocolatey Central Management. +You will also need to have at least one Group of computers already defined. + +1. From the Chocolatey Central Management dashboard, select `Deployment Plans` from the left sidebar. + + ![Chocolatey Central Management dashboard, arrow pointing to Deployment Plans menu in the left sidebar](/images/ccm-playwright/dashboard/left-menu-deployment-plans.png) + +1. Select the :heavy_plus_sign: **Create New Deployment Plan** button at the top of the page. + + ![Chocolatey Central Management Deployment Plans page, arrow pointing to Create New Deployment Plan button](/images/ccm-playwright/deployment-plans/button-create-new-deployment-plan.png) + +1. (Optional) Give the Deployment Plan a custom name by clicking the edit icon displayed next to it and entering a new name. + Press **Enter** to save the new name. + + ![Chocolatey Central Management New Deployment Plan page, arrow pointing to the edit title button](/images/ccm-playwright/deployment-plans/edit/button-edit-name.png) + +1. (Optional, Requires Chocolatey Central Management v0.11.0+) Add a Deployment Plan execution timeout in seconds to be used by all Deployment Steps. + + ![Chocolatey Central Management New Deployment Plan page, arrow pointing to the Deployment Plan execution timeout in seconds setting](/images/ccm-playwright/deployment-plans/edit/input-execution-timeout-in-seconds.png) + + * The Deployment Plan execution timeout in seconds will be used on all steps created **after it has been modified**. A Deployment Step can override the Deployment Plan execution timeout in seconds by modifying the Deployment Step execution timeout in seconds in the Deployment Step modal located in the advanced filters dropdown. + + ![Chocolatey Central Management Deployment Step modal, arrow pointing to execution timeout in seconds](/images/ccm-playwright/deployment-plans/edit/modal-step-input-execution-timeout-in-seconds.png) + +1. (Optional, Requires Chocolatey Central Management v0.4.0+) Add a schedule by selecting the :heavy_plus_sign: **Add Schedule** button. + + ![Chocolatey Central Management New Deployment Plan page, arrow pointing to Add Schedule button](/images/ccm-playwright/deployment-plans/edit/button-add-schedule.png) + + * Enter a date and time, or click the :calendar: button to pick the date and time from a calendar UI. + + ![Chocolatey Central Management Deployment Plan schedule picker](/images/ccm-playwright/deployment-plans/edit/calendar-start-date-time.png) + + * (Optional) If you'd like to define a maintenance window for the Deployment Plan start time, select the **Restrict schedule to a maintenance window** option and enter the ending date and time for the maintenance window. + + ![Chocolatey Central Management Deployment Plan maintenance window option](/images/ccm-playwright/deployment-plans/edit/checkbox-restrict-schedule.png) + + * (Optional) If you'd like a Deployment Plan to happen again, on a recurring basis, select how often you'd like the Deployment Plan to recur. Check the [recurring Deployment Plans section for more information](#recurring-deployments) + + ![Chocolatey Central Management Deployment Plan Repeat Period](/images/ccm-playwright/deployment-plans/edit/select-repeat-period.png) + +1. Select :heavy_plus_sign: **Add Step** to add your first Deployment Step. + + ![Chocolatey Central Management Deployment Plan add Deployment Step button](/images/ccm-playwright/deployment-plans/edit/button-add-deployment-step.png) + +1. (Optional) In the `Create New Deployment Step` modal, enter a custom name for the Deployment Step. + + ![Chocolatey Central Management Deployment Plan new step modal](/images/ccm-playwright/deployment-plans/edit/modal-step.png) + +1. Add the Deployment Step action: + * For _Basic_ Deployment Steps, select a `Script command` from the list, a `Package name` to install, and optionally a specific package version to install or whether to allow Chocolatey to install the latest prerelease package version. **NOTE:** It is not possible to use a space character within the `Package name` or `Package Version` textboxes, and the `Package Version` textbox must contain at least one digit. + + ![Chocolatey Central Management Deployment Plan basic step action](/images/ccm-playwright/deployment-plans/edit/modal-step-basic-command.png) + + * For _Advanced_ Deployment Steps (requires the _Create Privileged Deployment_ user role), click the **Advanced** button and then enter one or more PowerShell script commands. + + ![Chocolatey Central Management Deployment Plan advanced step action](/images/ccm-playwright/deployment-plans/edit/modal-step-advanced-command.png) + + * You can use in an Advanced script in Chocolatey Central Management version 0.7.0 and later. + + +1. (Optional) Click **Show advanced filters** to set one or more of the following options: + * `Execution timeout`. + * `Valid exit codes`. + * `Machine contact timeout` (requires Chocolatey Central Management v0.4.0+ to edit). + * `Fail overall Deployment Plan if not successful`. + Disabling this option will allow the overall Deployment Plan to be marked as successful even if the step fails. + By default, if any Deployment Step fails, the overall Deployment Plan is marked as Failed. + * `Only run other Deployment Steps if successful`. + Enabling this option will prevent subsequent Deployment Steps from starting if this step fails. + The overall Deployment Plan will be marked as Failed, and subsequent Deployment Steps will be Cancelled. +1. Select the **Select Target Groups** tab. + + ![Chocolatey Central Management Deployment Step Select Target Group tab](/images/ccm-playwright/deployment-plans/edit/modal-step-tab-select-target-groups.png) + +1. Add groups from the **Available Groups** column to the **Selected Groups** column by selecting them from the list and pressing the `>` button. You can also select the `>>` button to immediately move all groups into the **Selected Groups** column. + + ![Chocolatey Central Management Deployment Step Select Target Groups modal](/images/ccm-playwright/deployment-plans/edit/modal-step-select-target-groups.png) + +1. Click the :floppy_disk: **Save** button to save the Deployment Step. + + ![Chocolatey Central Management Deployment Step Save button](/images/ccm-playwright/deployment-plans/edit/modal-step-button-save.png) + +1. Continue to add steps until your Deployment Plan is complete. + +1. (Optional, requires Chocolatey Central Management v0.12.0) If you need to create multiple similar Deployment Steps, you can use the Duplicate Deployment Step button on an individual Deployment Step to make a copy of it. + + ![Chocolatey Central Management Deployment Step Duplicate button](/images/ccm-playwright/deployment-plans/edit/button-duplicate-step.png) + +1. Select :floppy_disk: **Save** to save the changes to the Deployment Plan. + + + +## Recurring Deployment Plans + +As mentioned above, when creating a Deployment Plan, it is possible to select a scheduled start date/time, and in addition a Repeat Period. This Repeat Period controls how often a Deployment Plan recurs going forward. The values for the Repeat Period are: + +- `Daily` +- `Weekly` +- `Every two weeks` +- `Every four weeks` +- `Monthly` +- `Every two months` +- `Quarterly` +- `Every six months` +- `Yearly` + +Once a Deployment Plan has been assigned a Repeat Period, and it is moved to the [Ready](#ready) state, it will be shown with a slightly different icon: + +![Chocolatey Central Management Deployment Plan marked as recurring](/images/ccm-playwright/deployment-plans/table-row-icon-recurring-deployment-plan.png) + +Let's take as example a Deployment Plan in the [Ready](#ready) state that is scheduled to start on `23rd August 2022 at 07:11 UTC`, with a Repeat Period of `Weekly` set. +Once this instance of the Deployment Plan moves to the [Active](#active) state, another instance of the Deployment Plan will be created. +The new instance will have the same steps and settings except for the scheduled start date/time, which will be set to exactly 1 week from the scheduled start date/time of the previous instance (in this case `30th August 2022 at 07:11 UTC`). + +For repeating Deployment Plans, a new instance of the Deployment Plan will be created once a scheduled Deployment Plan moves to the [Active](#active) state. +If a repeating Deployment Plan specifies a maintenance window date/time (`Last Scheduled Date Time`), the new instance's maintenance window will also be adjusted from the previous instance's value by the same period as the scheduled start date/time. + +> :choco-warning: **WARNING** +> +> If the scheduled start date/time of a Deployment Plan is overridden using the [Run Now](#run-now) action, the new instance of the recurring Deployment Plan will use the **scheduled** start date/time of the previous instance when calculating the next scheduled start date/time, **not** the date/time that the Deployment Plan actually started. +> If you want to change the scheduled start date/time of the recurring Deployment Plan, edit the Deployment Plan while it is in the [Ready](#ready) state to ensure that future instances of the recurring Deployment Plan will use that value when calculating the next scheduled date/time. + +While in the [Ready](#ready) state, if you use the [Cancel](#cancel) or [Delete](#delete) action on the recurring Deployment Plan, no further instances of the recurring Deployment Plan will be created. + +## Deployment Plan States + +### Draft + +A Deployment Plan is initially created in the [`Draft`](#draft) state, and will remain in this state until it is moved into the [`Ready`](#ready) state. +While it is in the [`Draft`](#draft) state, it cannot be run, and scheduled Deployment Plan start times will be ignored. + +While in the [`Draft`](#draft) state, the available actions that can be performed on a Deployment Plan are: + +- [Move To Ready](#move-to-ready) +- [Edit](#edit) +- [Duplicate](#duplicate) +- [Delete](#delete) +- [Export](#export) + +### Scheduled/Ready + +Once the Deployment Plan enters the [`Ready`](#ready) state, it's eligible to be started. +Deployment Plans in this state can be started manually or according to a schedule. + +> :choco-info: **NOTE** +> +> Any modifications to a Deployment Plan in this state will revert it back to the [`Draft`](#draft) state. + +While in the [`Ready`](#ready) state, the available actions that can be performed on a Deployment Plan are: + +- [View](#view) +- [Run Now](#run-now) +- [Edit](#edit) +- [Duplicate](#duplicate) +- [Cancel](#cancel) +- [Delete](#delete) +- [Export](#export) + +### Active + +Deployment Plans that are currently in progress will be in this state. + +While in the [`Active`](#active) state, the available actions that can be performed on a Deployment Plan are: + +- [Details](#details) +- [Duplicate](#duplicate) +- [Cancel](#cancel) +- [Export](#export) + +### Completed + +Deployment Plans that have completed running will be in either the `Success`, `Failed`, `Unreachable`, `Inconclusive`, or `Cancelled` state, depending on how the run went. + +While in one of these states, the available actions that can be performed on a Deployment Plan are: + +- [Details](#details) +- [Duplicate](#duplicate) +- [Archive](#archive) +- [Export](#export) + +In most cases Deployment Plans in one of the Completed states will remain in that same state. +However, due to changes introduced in , a Deployment Plan in the `Inconclusive` state due to the computer or the Agent service being shut down or restarted during the Deployment Step, may retry the task and later update the Deployment Plan's status. +This can result in the Deployment Step or overall Deployment Plan changing from the `Inconclusive` status to `Success` or `Failed` depending on the final status of the retried task. + +### Archived + +Deployment Plans that are in a [completed](#completed) state can be actioned using [`Archive`](#archive) action to hide them from the main Deployment Plans screen. +This is helpful if you'd like to reduce clutter on the main Deployment Plans screen without discarding the information the completed report contains. + +You can access archived Deployment Plans from the `Deployment Plans` page and clicking on the `View Archived Deployment Plans` button. [`Archived`](#archived) Deployment Plans will not appear in any other reports that contain Deployment Plans. + +While in the [`Archived`](#archived) state, no additional actions can be performed on a Deployment Plan. + +## Deployment Plan Actions + +Depending on the [state](#deployment-states) that a Deployment Plan is currently in, there are a defined set of actions that can be performed on them. What follows are is a description of each of those actions. + +### Move To Ready + +This action moves a Deployment Plan from the [`Draft`](#draft) state to the [`Ready`](#ready) state. While in this interim state, no additional changes can be made to the Deployment Plan. If changes are made, it will be moved back to the [`Draft`](#draft) state. + +### Edit + +The action opens the edit page for the selected Deployment Plan. Here changes can be made to the steps, schedule, groups, etc. If any changes are made on the page, a Deployment Plan that was in the [`Ready`](#ready) state, will be moved back to the [`Draft`](#draft) state. + +### Duplicate + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +The action makes an exact copy (with the exception of any scheduled start/end time or repeat period) of any given Deployment Plan. Once the duplicate has been created, you will be taken to the edit page ready to make any additional required changes. The name of the new Deployment Plan will be the same as the original with some additional information added to the end. For example, if the original Deployment Plan was called `Install Papercut`, the name given to the duplicate would be `Install Papercut - Copy (19 Aug 2022 12:52:25)` where the timestamp is the current date time. + +> :choco-info: **NOTE** +> +> There is a specific permission to allow duplication of a Deployment Plan. If you want to configure this permission, it can be done either for an individual , or a specific + +### Delete + +This removes all information about the Deployment Plan from Chocolatey Central Management. + +The action cannot be undone, so care should be taken before using it. + +### View + +The action opens the edit page for the selected Deployment Plan where all the parts of the plan can be viewed. Here changes can be made to the steps, schedule, groups, etc. If any changes are made on the page, a Deployment Plan that was in the [`Ready`](#ready) state, will be moved back to the [`Draft`](#draft) state. + +### Run Now + +This action takes a Deployment Plan from the [`Ready`](#ready) state, to the [`Active`](#active) state. This can be thought of as actually setting the Deployment Plan in motion, and the steps within this Deployment Plan will begin to be picked up by the computers that are contained within the steps (in the order that has been defined). + +> :choco-warning: **WARNING** +> +> If the scheduled start date/time of a Deployment Plan is overridden using the [Run Now](#run-now) action, the new instance of the recurring Deployment Plan will use the **scheduled** start date/time of the previous instance when calculating the next scheduled start date/time, **not** the date/time that the Deployment Plan actually started. +> If you want to change the scheduled start date/time of the recurring Deployment Plan, edit the Deployment Plan while it is in the [Ready](#ready) state to ensure that future instances of the recurring Deployment Plan will use that value when calculating the next scheduled date/time. + +### Cancel + +This action stops all future steps from being performed within a Deployment Plan. Any steps that are currently active will still be allowed to complete, but no further steps will occur. + +If a recurring Deployment Plan is Cancelled from the [`Ready`](#ready) state, all future instances of the Deployment Plan are also cancelled. +If you want to skip an iteration of a recurring Deployment Plan, instead change its scheduled start time directly. + +### Details + +This action opens up the details for the selected Deployment Plans, allowing the user to see the progress so far. For example: the currently active Deployment Step, or which computers have picked up this step. This view is useful for monitoring the progress in real time, as the details pages update automatically. + +### Archive + +This action will mark any completed Deployment Plan as archived, and it will no longer be shown in the main Deployment Plans screen of Chocolatey Central Management website. You can access archived Deployment Plans from the `Deployment Plans` page and clicking on the `View Archived Deployment Plans` button. + +### Export + +This action will export the details of the Deployment Plan to a `.json` file. The name of the new Deployment Plan will be the same as the original with some additional information added to the end. For example, if the original Deployment Plan was called `Install Papercut`, the name given to the exported Deployment Plan would be `Install Papercut - Exported (19 Sept 2023 12:52:25)` where the timestamp is the current date time. + +## Deployment Plan Status Notifications + +> :choco-info: **Note** +> +> Email notifications require that the Email / SMTP settings have been configured first. +> If these settings have not been configured, email notifications will not be sent. + +### Deployment Plan Completion Notifications + +As of Chocolatey Central Management v0.11.0, all Deployment Plans will issue an email notification when they finish to the user that created the Deployment Plan. +The email notification will indicate the status of the Deployment Plan, as well as linking back to the Deployment Plan details page for further information. + +![Example email from Chocolatey Central Management for a successfully completed Deployment Plan, showing the status, start time, and finish time, as well as the Deployment Plan name and a link to the Deployment Plan details.](/images/ccm-manual/deployment-plans/email-deployment-success.png) + +### Notification for Scheduled Deployment Plans Unable to Start + +As of Chocolatey Central Management v0.10.0, a scheduled Deployment Plan that fails to start will issue a push notification as well as an email notification to the user who initially created the Deployment Plan. The push notification can be viewed in Chocolatey Central Management by clicking the "bell" icon in the top navigation. + +![Example email from Chocolatey Central Management for a scheduled Deployment Plan that failed to start, showing the Deployment Plan name and scheduled start time](/images/ccm-manual/deployment-plans/email-failed-scheduled-start.png) + +## FAQ + +### What Versions of Components Do I Need for Deployments to Work Properly? + +While you might be able to get things to work with Chocolatey Central Management v0.2.x and Chocolatey Agent v0.10.x, it's best to use the following: + +* Chocolatey Central Management components (`chocolatey-management-*` all 3 packages) - v0.3.0+ +* Chocolatey Agent (`chocolatey-agent` package on all clients) - v0.11.0+ +* Chocolatey Licensed Extension (`chocolatey.extension` on all clients) - v2.1.1+ + +### What Is the Chocolatey Central Management Compatibility Matrix? + +Chocolatey Central Management has specific compatibility requirements with quite a few moving parts. It is important to understand that there are some Chocolatey Agent versions that may not be able to communicate with some versions of Chocolatey Central Management and vice versa. Please see the for details. + +### Why Do I See Some Machines Have Not Opted in for Deployments? + +If you are on the Groups screen, you may notice that some machines show up highlighted with a color. The legend below it mentions "Not Opted In For Deployments (Configuration)". + +![Group eligibility legend](/images/ccm-playwright/groups/modal-warning-legend.png) + +As you can see from the text, it is meant to help you figure out the issue: + +> The Computer has not opted in, or a Group contains computers that have not opted in for Deployments by configuration. Please ensure the computer has at least chocolatey-agent v0.10.0+ installed and the feature "useChocolateyCentralManagementDeployments" has been set to enabled on the client computer. + +This is telling you that you need to ensure you set the client to allow for the use of Deployments. As it is a security consideration, it requires an explicit opt-in on client machines. See for details on how to set it. + +### I Have Plenty of Licenses, Why Do Some Machines Show Not Opted in for Deployments and Also Exceeds Your Current License Count? + +Once you upgrade to at least Chocolatey Central Management v0.2.0, every machine will show that until they check in the next time. Once they check in, that will go away. So it's basically normal to see that until those machines check in again. + +### Can I use Chocolatey Deployment Plans to upgrade Chocolatey Central Management based components? + +You can upgrade the chocolatey-agent package via Chocolatey Central Management. To do so please see as this must be performed as an advanced Deployment Step. + +We do not recommend upgrading Chocolatey Central Management itself via an automated Deployment Plan process. Please see our for the supported upgrade process. + +### What is Run Actual? + +You may have seen `--run-actual` get attached to scripts where you are running choco commands - what is it? + +This is a switch that is passed to opt out of Chocolatey Self-Service. It's typically passed by the agent service back to choco to run a command for a user. You typically would not issue this, but the agent service will, so you are likely to see it in the logs if you are looking closely. + +### What Happens if More Than One Deployment Plan is "Active" at the Same Time? + +This will depend a little bit on the version of Chocolatey Central Management you're running. +Prior to v0.4.0, control of Deployment Plans was handled entirely on a per-Deployment-_step_ basis. +This means that if you have an active Deployment Plan with some of the Computers in it idling (waiting for a later step in the Deployment Plan to begin, essentially), these machines will pick up available Deployment Steps from an unrelated Deployment Plan while they're waiting. + +As of v0.4.0 of Chocolatey Central Management, this has been fine-tuned a little bit so that any Computer which is acted on by a Deployment Step will not pick up any further Deployment Steps from unrelated Deployment Plans until all its assigned steps in the first Deployment Plan are completed. + +This can get a bit confusing, so let's consider the following scenario: + +* Deployment Plan A + * Deployment Step 1 + * Computer A + * Computer B + * Deployment Step 2 + * Computer B + * Deployment Step 3 + * Computer A +* Deployment Plan B + * Deployment Step 1 + * Computer A + +Let's say `Deployment Plan A` is started first, and `Deployment Plan B` starts while `Deployment Plan A` is in either `Deployment Step 1` or `Deployment Step 2`. +When `Deployment Plan A` reaches `Deployment Step 2`, even though `Computer A` is not currently running any Deployment Steps, it will not start running steps from `Deployment Plan B` because it still has a task to do in `Deployment Plan A`. +If you are running Chocolatey Central Management 0.3.x, `Computer A` will instead pick up and run the step from `Deployment Plan B` despite `Deployment Plan A` still being in progress. + +### Why do My Computers or Groups Show as Ineligible for Deployments While They're Opted In? + +Computers can be considered ineligible for Deployments based on two criteria: + +1. Is the computer licensed under your Chocolatey for Business license? +1. Is the computer opted in for Deployments based on the Chocolatey configuration? + +If **either** one of these two criteria is not met, that computer is considered ineligible for Deployments. + +Additionally, any group that contains any of the following will be considered ineligible: + +* An ineligible Computer +* A Group containing **any** ineligible Computers +* A Group containing **any** ineligible Groups + +### What Happens if a Computer / Group in a Deployment Becomes Ineligible? + +* For Deployment Plans that have not yet started: + * If the Deployment Plan is scheduled, it will not run until all Computers/Groups are eligible again. + * If the Deployment Plan is not scheduled, it cannot be started until all Computers/Groups are eligible again. + + Once Chocolatey Central Management has confirmed the problem Computer(s)/Group(s) are eligible again, the Deployment Plan can be started. + If the Deployment Plan was previously scheduled, and it has not passed the maintenance window time (if set), it will start at that point. +* For Deployment Plans that are currently [`Active`](#active) + * As soon as Chocolatey Central Management detects the ineligible Computer, it will terminate the current Deployment Step. + * Then, all following Deployment Steps will be `Cancelled`. + +### How Can I Run Deployment Plans in a Semi-Connected Environment? + +As of Chocolatey Central Management v0.4.0, you are able to configure Deployment Plans to tolerate semi-connected environments. +This effectively allows Chocolatey Central Management Deployments to simply wait until a machine is connected to the network before it begins a given Deployment Step. + +To configure this, you can set the `Machine Contact Timeout` value in the Advanced settings of each individual Deployment Step to `0`. +This value must be positive, or zero (which is treated as infinite). +You may want to configure this only for the first step of a Deployment Plan, or for multiple steps if you expect the target machines to be connected/disconnected over the course of the Deployment Plan. + +> :choco-info: **NOTE** +> +> If the Deployment Plan is scheduled with a maintenance window set, the `Machine Contact Timeout` value of the first Deployment Step is ignored. +> In this case, the maintenance window defines the contact timeout for the first step. +The `Execution Timeout` is the maximum allowed time for the Chocolatey Agent to execute the Deployment Step task. +Any positive value for this setting will be respected, and as with `Machine Contact Timeout`, a `0` value is treated as infinite. +However, if the execution timeout is infinite and a computer goes offline, that Deployment Step will not complete until that computer checks in again. If it errors three times attempting to provide the results, it will fail it at the client and that computer will not report results, and require manual intervention. +Infinite execution timeouts are **not recommended** for this reason — Deployment Steps may end up seemingly stalling for long periods of time and/or require manual intervention to cancel them. + +## Deployment Plans Webinars + +Catch the recording of the Jun 23rd, 2020 webinar for a full showcase of the Chocolatey Central Management Deployments features: + +https://chocolatey.org/events/chocolatey-deployments + +## Common Errors and Resolutions + +### A Deployment Step Is Stalled With Infinite Execution Timeout + +The only way to resolve this currently is to cancel the Deployment Plan itself, which can be done from the main Deployment Plans list. +On the left-hand side of the [`Active`](#active) Deployment Plans table, click the Actions menu for the corresponding Deployment Plan, and select [`Cancel`](#cancel). +You will be asked to confirm the cancellation. + +All remaining steps in the Deployment Plan will be cancelled, along with any still running or pending tasks. + +### The Updated License File Is Not Being Picked Up in the Website + +You need to restart the web executable currently. We are looking to have it automatically picked up in future releases. Here's a script to handle that: + +```powershell +Get-Service chocolatey-* | Stop-Service +Get-Process -Name "ChocolateySoftware.ChocolateyManagement.Web.Mvc" -ErrorAction SilentlyContinue | Stop-Process +Get-Service chocolatey-* | Start-Service +``` + +### A Computer or Group Is Not Showing as Available for Deployment Plans but I Have Plenty of Available Licenses + +Once you upgrade to Chocolatey Central Management v0.3.0+, you have upgraded the Agent on the machine to v0.11.0+, and it has successfully completed a check in, then that messaging should go away. Note that clients do not get a message back that there was a failure as a security feature - you'll need to consult the Chocolatey Central Management Service logs. You can find that at `$env:ChocolateyInstall\logs\ccm-service.log`, or if you are on a version of Chocolatey Central Management prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +### Using `choco` Commands in a Script Deployment Plan Break if Semicolons Are Used to Separate the Statements + +When constructing a PowerShell script for a Deployment Step, all Chocolatey commands must be placed on separate lines. It is not possible to do something like the following: + +export const tabsOne = [ + { id: 'choco-v2', title: 'Chocolatey CLI v2.x', isActive: true }, + { id: 'choco-v1', title: 'Chocolatey CLI v1.x' } +]; + + + + + ```powershell + choco list -r; exit $LASTEXITCODE + ``` + + Instead, this should be written as: + + ```powershell + choco list -r + exit $LASTEXITCODE + ``` + + + ```powershell + choco list --local-only -r; exit $LASTEXITCODE + ``` + + Instead, this should be written as: + + ```powershell + choco list --local-only -r + exit $LASTEXITCODE + ``` + + + +For more information on when this will be addressed, you can subscribe to the [GitHub issue](https://github.com/chocolatey/chocolatey-licensed-issues/issues/158). + +## Related Topics + +* +* +* +* diff --git a/src/content/docs/en-us/central-management/usage/website/general.mdx b/src/content/docs/en-us/central-management/usage/website/general.mdx new file mode 100644 index 00000000000..cd9232415d3 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/general.mdx @@ -0,0 +1,53 @@ +--- +order: 70 +xref: ccm-general +title: General +description: Top level, general, information about Chocolatey Central Management Website functionality +--- +import Xref from '@components/Xref.astro'; + +## Dark/Light Mode + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +Once signed into the Chocolatey Central Management website, you can select whether you want to use a dark or a light mode across all the web pages. This select is made using the button at the top right hand corner, as shown in the next screenshot. + +![Chocolatey Central Management dark/light mode selection](/images/ccm-playwright/dashboard/dropdown-menu-theme-toggle.png) + +The selection that is made here is persisted, meaning that it will be remembered after you sign out of the Chocolatey Central Management website. + +### Dashboard in Dark Mode + +![Chocolatey Central Management dashboard using dark mode](/images/ccm-playwright/dashboard/dark-mode.png) + +### Dashboard in Light Mode + +![Chocolatey Central Management dashboard using light mode](/images/ccm-playwright/dashboard/light-mode.png) + +## Remembered number of table entries + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +Across the various pages within the Chocolatey Central Management website, there are a number of different tables. Showing, for example, all the that are currently reporting into Chocolatey Central Management service, or all of the that have been created. For each of these tables, it is possible to select the number of entries that you want to see in the table. The selection will be remembered between logged in sessions to the Chocolatey Central Management website (assuming you are using the same browser). + +![Drop down list showing available options for how many entries to show in a table](/images/ccm-playwright/computers/dropdown-number-of-table-entries.png) + +## License Expiration Warning + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.10.0. + +When your Chocolatey license is approaching its expiration date, a new banner will be shown on the screen once you sign into the Chocolatey Central Management website. + +![License expiration warning shown on the Chocolatey Central Management dashboard once signed in](/images/ccm-playwright/dashboard/alert-license-expiring.png) + +For a normal license, this will start showing when there are 90 days remaining on your license. + +For a trial license, this will start showing when there are 7 days remaining on your license. + +It is possible to dismiss this warning using the "x" on the far right of the banner, however, the banner will re-appear again in 2 days' time to remind you. This will repeat until the license is renewed, or until the license expires. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/groups.mdx b/src/content/docs/en-us/central-management/usage/website/groups.mdx new file mode 100644 index 00000000000..a705fd68e8a --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/groups.mdx @@ -0,0 +1,159 @@ +--- +order: 30 +xref: ccm-groups +title: Groups +description: Information on groups within Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + +Groups are the basis on which a given operates. +A Group may contain one or more Computers, and/or other Groups. +Currently, Groups are entirely self-contained, and cannot be directly mapped from Active Directory Groups. + +The **Groups** page can be accessed from the left-hand navigation menu by selecting the **Groups** menu item. +If you do not see this menu entry, verify with your administrator whether yourhas the `View Groups` role assigned. + +![Groups menu entry on the Chocolatey Central Management Dashboard](/images/ccm-playwright/dashboard/left-menu-groups.png) + +## The All Computers (Automatic Group) + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.11.0. + +All Computers present in Chocolatey Central Management are automatically added to a System Managed Group named `All Computers (Automatic Group)`. This Group can not be edited or deleted. It will have a blue lock icon next to the name in the table. Hovering over this lock icon will display a tooltip with more information. + +![The All Computers (Automatic Group) on the Groups page with an arrow pointing to the Group in the table](/images/ccm-playwright/groups/table-row-icon-automatic-group-lock.png) + +## Temporary Groups + +> :choco-info: **NOTE** +> +> This feature is available in Chocolatey Central Management starting with version 0.12.0. + +A Temporary Group is a Group that has been created for one or more specific circumstance, for instance as part of creating an Automatic Deployment Plan. +These Groups are normally not viewable from anywhere, other than the Deployment Plans where they are being used, and will be cleaned up on an interval when they are no longer needed. + +A Temporary Group can also not be Edited, Deleted, or Duplicated manually by a user. As well, no other Group can have such a Group as a Sub-Group. + +## Creating a Group + +On the main Groups page, select the **+ Create New Group** button. + +![Create New Group button on the Groups page](/images/ccm-playwright/groups/button-create-new-group.png) + +Fill in a Name for the Group and (optionally) a Description in the appropriate fields in the _Create New Group_ modal. +Then, select the Computer(s) or existing Group(s) you would like to include in the new Group and click the **>** button in the _Available Groups/Computers_ column to add the selected items, or click the **>>** button to add all available Groups and Computers into the new Group. + +![New Group Modal](/images/ccm-playwright/groups/modal-create-new-group.png) + +Click :floppy_disk: **Save** to close the modal and create the new Group. + +## Editing a Group + +> :choco-info: **NOTE** +> +> If you do not see the **Edit** menu entry or the :gear: **Actions** buttons, consult your administrator to determine if you have the Edit Groups role assigned. + +On the main Groups page, find the Group you want to edit. +You can enter a search term in the text field to filter results by typing in part of their Name or Description and clicking the :mag: button. +Select the :gear: **Actions** button on the left-hand side of the Group, and then select **Edit** to open the _Edit Group_ modal. + +![Edit menu entry in Group actions flyout menu](/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-edit.png) + +From the **Edit Group** modal, you can modify the Group name and description, and modify members by adding or removing Groups and/or Computers. + +## Deleting a Group + +> :choco-info: **NOTE** +> +> If you do not see the **Delete** menu entry or the :gear: **Actions** buttons, consult your administrator to determine if you have the appropriate role assigned to your account. + +On the main Groups page, find the Group you want to edit. +You can enter a search term in the text field to filter results by typing in part of their Name or Description and clicking the :mag: button. +Similar to the [Edit Group](#editing-a-group) action, select the :gear: **Actions** button on the left-hand side of the Group, and instead select **Delete**. +You will be prompted to confirm the deletion. + +## Duplicating a Group + +> :choco-info: **NOTE** +> +> If you do not see the **Duplicate** menu entry or the :gear: **Actions** buttons, consult your administrator to determine if you have the appropriate role assigned to your account. + +On the main Groups page, find the Group you want to duplicate. +You can enter a search term in the text field to filter results by typing in part of their Name or Description and clicking the :mag: button. +Similar to the [Edit Group](#editing-a-group) action, select the :gear: **Actions** button on the left-hand side of the Group, and instead select **Duplicate**. +If the Group being duplicated is a system managed Group, a confirmation message will be shown indicating that the duplicated Group will not be system managed. +A success message will be shown that mentions that the Group was duplicated, and if you have permissions to Edit a Group a dialog to edit this duplicated Group will be shown. + +## Viewing a Group's Details + +On the main Groups page, find the group you want to view. +You can enter a search term in the text field to filter results by typing in part of their Name or Description and clicking the :mag: button. +Select the :gear: **Actions** button on the left-hand side of the group, and select **Details**. + +![Details menu entry in Group actions flyout menu](/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-details.png) + +On the Group Details page, you'll find a searchable list of all Computers and Groups that are in the Group, as well as a more detailed view of the Group information. + +![Group Details screen showing the Computers and Groups that are currently in the Group](/images/ccm-playwright/groups/details/screen.png) + +## Creating a Deployment Plan from a Group + +Creating a Deployment Plan for a Group can be done from two pages: + +1. In the leftmost column of the Groups table you will find an :gear: **Actions** menu which will display a **Create New Deployment Plan** option. + + ![Finding the Create New Deployment Plan menu entry for a specific Group on the Groups page](/images/ccm-playwright/groups/table-row-button-action-dropdown-menu-create-new-deployment-plan.png) + +1. From the Group Details page, click the :gear: **Actions** button and select the **Create New Deployment Plan** option. + + ![Button to create a new Draft Deployment Plan for a Group from the Group Details page](/images/ccm-playwright/groups/details/button-action-dropdown-menu-create-new-deployment-plan.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with the chosen Target Group selected. Upon arriving on the Edit Deployment Plan screen, this Deployment Step will be opened and ready to add a script command. + +![Automatically created Deployment Plan showing the Deployment Step modal script command area](/images/ccm-playwright/deployment-plans/edit/groups-modal-new-deployment-plan.png) + +The Deployment Plan can be saved without adding a script command, however it will be ineligible for deployment. A red warning icon will be shown on the Deployment Step, that when clicking will show a message. + +![Red popover warning on Deployment Step with ineligible deployment message](/images/ccm-playwright/deployment-plans/edit/popover-ineligible-step.png) + +After adding a script command to the Deployment Step, the Deployment Plan can be deployed as outlined in the . + +## Eligibility for Deployments + +The Create / Edit Group modals display Groups or Computers that are ineligible for Deployment Steps in either red or orange, depending on the reason for their ineligibility. +**All** Groups and Computers in a given Group must have their eligibility clear in order for that Group to be used as part of a Deployment Step. +If a Deployment Step is targeting ineligible Groups, the Deployment Plan cannot be started until the eligibility status(es) of the affected Computers has been resolved. + +![Group eligibility legend](/images/ccm-playwright/groups/modal-warning-legend.png) + +## FAQ + +### Why do I see some machines have not opted in for Deployments? + +If you are on the Groups screen, you may notice that some machines show up highlighted with a coloring, and one of those colorings is an orange - the legend below it mentions "Not Opted In For Deployments (Configuration)". + +![Group eligibility legend](/images/ccm-playwright/groups/modal-warning-legend.png) + +As you can see from the text, it is meant to help you figure out the issue: + +> The Computer has not opted in, or a Group contains Computers that have not opted in, for deployments by configuration. Please ensure the Computer has at least Chocolatey Agent v0.10.0+ installed and the feature `useChocolateyCentralManagementDeployments` has been set to enabled on the client Computer. + +This is telling you that you need to ensure you set the client to allow for the use of Deployments. As it is a security consideration, it requires an explicit opt-in on client machines. See for details on how to set it. + +### I have plenty of licenses, why do some machines show not opted in for deployments and also exceeds your current license count? + +Once you upgrade to at least CCM v0.2.0, every machine will show that until they check in the next time. Once they check in, that will go away. So it's basically normal to see that until those machines check in again. + +## Common Errors and Resolutions + +### A Computer or Group is not showing as available for deployments, but I have plenty of available licenses + +Once you upgrade to Central Management v0.3.0+, you have upgraded the Agent on the machine to v0.11.0+, and it has successfully completed a check in, then that messaging should go away. Note that clients do not get a message back that there was a failure as a security feature - you'll need to consult the Central Management Service logs. You can find that at `$env:ChocolateyInstall\logs\ccm-service.log`, or if you are on a version of CCM prior to 0.2.0, the log will be located at `$env:ChocolateyInstall\lib\chocolatey-management-service\tools\service\logs\chocolatey.service.host.log`. + +## Related Topics + +* +* +* diff --git a/src/content/docs/en-us/central-management/usage/website/index.mdx b/src/content/docs/en-us/central-management/usage/website/index.mdx new file mode 100644 index 00000000000..abdf5830be1 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/index.mdx @@ -0,0 +1,8 @@ +--- +order: 10 +xref: ccm-usage-website +title: Website +description: Information about how to work with the different entities/functionality contained within the Chocolatey Central Management Website +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/reports.mdx b/src/content/docs/en-us/central-management/usage/website/reports.mdx new file mode 100644 index 00000000000..0983318498d --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/reports.mdx @@ -0,0 +1,43 @@ +--- +order: 60 +xref: ccm-reports +title: Reports +description: Information on reports within Chocolatey Central Management +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management Reports section currently allows for the following reports to be generated: + +- [Outdated Software](#outdated-software) +- [Deployment Plans](#deployment-plans) + +## Outdated Software + +Outdated Software Reports can be generated at any time, as long as there is at least one known Outdated Software package. +If there is no Outdated Software, a report cannot be generated. + +When generating an Outdated Software Report, a snapshot of the current Outdated Software will be captured for the report. +Generated reports will be displayed in a list, showing the date and time they were created. + +Reports can be exported from this screen via the :gear: **Actions** menu, and selecting the desired export type. + +![Outdated Reports export to Excel](/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-excel.png) + +![Outdated Reports export to PDF](/images/ccm-playwright/reports/outdated-software/table-row-button-action-dropdown-menu-export-to-pdf.png) + +When clicking on the date and time for a report, or selecting the :gear: **Actions** menu and then **Details**, the Outdated Software Details screen will be shown. +The report will display the name and version of any Outdated Software, along with any Computers that each Outdated Software is installed on. + +![Outdated Software Details view](/images/ccm-playwright/reports/outdated-software/details/screen.png) + +The Outdated Software Report currently being viewed can be exported from this screen via the **Export** menu at the top-right. + +![Outdated Software Details view, showing the Export button options](/images/ccm-playwright/reports/outdated-software/details/button-export.png) + +## Deployment Plans + +The Deployment Plans Report displays all completed Deployment Plans. It allows you to search for a subset of Deployment Plans or adjust the sorting order, or filter the displayed reports by their final Status. + +![Deployment Plans report page](/images/ccm-playwright/reports/deployment-plans/screen.png) + +Clicking the name of an individual Deployment Plan will take you to the Deployment Plan Details screen, similar to those shown on the main page. \ No newline at end of file diff --git a/src/content/docs/en-us/central-management/usage/website/software.mdx b/src/content/docs/en-us/central-management/usage/website/software.mdx new file mode 100644 index 00000000000..b04736f61a3 --- /dev/null +++ b/src/content/docs/en-us/central-management/usage/website/software.mdx @@ -0,0 +1,92 @@ +--- +order: 50 +xref: ccm-software +title: Software +description: Information on software within CCM +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management gives you direct visibility into the software packages in use in your organization, making it easy to see which machines are out of date and may need packages updated. +Software packages can be viewed in the context of the organization as a whole, or in the context of an individual computer. + +The main **Software** page can be accessed from the Central Management dashboard via the menu entry in the left-hand sidebar. + +![Software menu entry on the CCM dashboard](/images/ccm-playwright/dashboard/left-menu-software.png) + +## Main Page + +The Software main page lists all installed software in any computers that have checked in to Central Management, including version information and whether the package is outdated (has a newer version available). + +![Software main page](/images/ccm-playwright/software/screen.png) + +## Upgrade Individual Software + +In the leftmost column of the Software table you will find an :gear: **Actions** menu which will display an **Upgrade** option on outdated Software. + +![Finding the Upgrade menu entry for a specific Software entry](/images/ccm-playwright/software/table-row-button-action-dropdown-menu-upgrade.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with a that contains all the Computers the outdated Software is currently installed on. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Uninstall Individual Software + +In the leftmost column of the Software table you will find an :gear: **Actions** menu which will display an **Uninstall** option. + +![Finding the Upgrade menu entry for a specific Software entry](/images/ccm-playwright/software/table-row-button-action-dropdown-menu-uninstall.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with a that contains all the Computers the Software is currently installed on. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Upgrade All Software + +From the Software main page, click the **Create New Deployment Plan** button and select the **Upgrade Outdated Software** option. + +![Button to upgrade all outdated Software from the Software main page](/images/ccm-playwright/software/button-action-dropdown-menu-upgrade-outdated-software.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will contain one Deployment Step per outdated piece of Software. + +![Automatically created Deployment Plan showing a Deployment Step for each piece of Software](/images/ccm-playwright/deployment-plans/edit/software-upgrade-outdated-software.png) + +Each Deployment Step will create a that contains all the Computers the Software is currently installed on. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Software Details + +In the leftmost column of the Software table you will find an :gear: **Actions** menu which will display a **Details** option. +Clicking this option will take you to the **Software Details** page. + +![Finding the Details menu entry for a specific Software entry](/images/ccm-playwright/software/table-row-button-action-dropdown-menu-details.png) + +On the _Software Details_ page, you'll find a searchable list of all computers that currently have the package installed, as well as a more verbose view of the package information. + +![Software Details page](/images/ccm-playwright/software/details/screen.png) + +### Upgrade Individual Software + +From the Software Details page of an outdated Software, click the **Actions** button and select the **Upgrade Software** option. + +![Button to upgrade individual Software on a Computer from the Software Details page](/images/ccm-playwright/software/details/button-action-dropdown-menu-upgrade-software.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with a that contains all the Computers the Software is currently installed on. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +### Uninstall Individual Software + +From the Software Details page, click the **Actions** button and select the **Uninstall Software** option. + +![Button to uninstall individual outdated Software on a Computer from the Software Details page](/images/ccm-playwright/software/details/button-action-dropdown-menu-uninstall-software.png) + +Clicking this option will create a New Deployment Plan. This Deployment Plan will create one Deployment Step with a that contains all the Computers the Software is currently installed on. + +From here, the Deployment Plan can be edited and deployed as outlined in the . + +## Related Topics + +* +* + + diff --git a/src/content/docs/en-us/choco/commands/cache.mdx b/src/content/docs/en-us/choco/commands/cache.mdx new file mode 100644 index 00000000000..6c76f7df247 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/cache.mdx @@ -0,0 +1,190 @@ +--- +order: 5 +xref: choco-command-cache +title: Cache +description: Cache Command (choco cache) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyCacheCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Cache Command (choco cache) + +> :choco-warning: **WARNING** +> +> This command was introduced in Chocolatey CLI v2.1.0 + +Get the statistics of what Chocolatey CLI has cached or clear any cached +items in the current context. + +The behavior of this command will vary depending on whether it is running in an elevated context or not. +Statistics and removing cached items will always happen on the User HTTP Cache. +However, the System HTTP Cache will only be considered if running in an elevated context. + +## Usage + +~~~ + choco cache [list]|remove [options/switches] +~~~ + + +## Examples + +~~~ + choco cache + choco cache list + choco cache remove + choco cache remove --expired +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --expired + Expired - Remove cached items that have expired. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco cache -h`. + + diff --git a/src/content/docs/en-us/choco/commands/config.mdx b/src/content/docs/en-us/choco/commands/config.mdx new file mode 100644 index 00000000000..028f7ddf92c --- /dev/null +++ b/src/content/docs/en-us/choco/commands/config.mdx @@ -0,0 +1,203 @@ +--- +order: 10 +xref: choco-command-config +title: Config +description: Config Command (choco config) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyConfigCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Config Command (choco config) + +Chocolatey will allow you to interact with the configuration file settings. + +## Usage + +~~~ + choco config [list]|get|set|unset [] +~~~ + + +## Examples + +~~~ + choco config + choco config list + choco config get cacheLocation + choco config get --name cacheLocation + choco config set cacheLocation c:\temp\choco + choco config set --name cacheLocation --value c:\temp\choco + choco config unset proxy + choco config unset --name proxy +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, config already set/unset (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## See It In Action + +![Config shown in action](/images/gifs/choco_config.gif) + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --name=VALUE + Name - the name of the config setting. Required with some actions. + Defaults to empty. + + --value=VALUE + Value - the value of the config setting. Required with some actions. + Defaults to empty. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco config -h`. + + diff --git a/src/content/docs/en-us/choco/commands/download.mdx b/src/content/docs/en-us/choco/commands/download.mdx new file mode 100644 index 00000000000..b8abe50d8c2 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/download.mdx @@ -0,0 +1,318 @@ +--- +order: 20 +xref: choco-command-download +title: Download +description: Download Command (choco download) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyDownloadCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Download Command (choco download) + +### Package Copy / Package Downloader + +Chocolatey [Licensed Editions](https://chocolatey.org/compare) only. + +Downloads a package from a source and unpacks it. + +### Package Internalizer + +[Chocolatey for Business](https://chocolatey.org/compare) (C4B) and Managed Service Providers (MSP) only. + +Downloads a package from a source, optionally downloading remote + resources and recompiling the package to use internal resources. This + takes an existing package and makes it available without any internet + requirement. + +See https://docs.chocolatey.org/en-us/features/package-internalizer + + +## Usage + +~~~ + choco download [] [install_script_variable=value] +~~~ + + +~~~ + Install script variables are values that are discovered in the +~~~ + + chocolateyInstall.ps1 (or a script it calls). When you find values + there maybe don't get found and replaced or they use a default + value and you want to provide a value for them to use instead, you + can find them and then provide the value you want to pass instead. + For example, in the Firefox package, it uses a default value of + 'en-US' for `$locale`. If you want to change that, you can add + `locale` and a value, which will replace `$locale` in the script, + e.g. `choco download firefox --internalize locale=en-GB`. + +## Examples + +~~~ + choco download sysinternals +~~~ + + +~~~ + #### [Chocolatey for Business](https://chocolatey.org/compare) / Chocolatey for MSP + choco download notepadplusplus --internalize + choco download notepadplusplus.install --internalize --resources-location \\server\share + choco download notepadplusplus.install --internalize --resources-location http://somewhere/internal --append-useoriginallocation + choco download KB3033929 --internalize -internalize-all-urls --append-useoriginallocation + choco download firefox --internalize locale=es-AR +~~~ + + + +## See It In Action + +Coming soon + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + downloading multiple packages, and you use `--version=1.0.0`, it is + going to look for and try to download version 1.0.0 of every package + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source to find the package(s) to download. Defaults to + default feeds. + + --version=VALUE + Version - A specific version to download. Defaults to unspecified. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the downloaded Chocolatey + package file. If not specified, uses the current directory. + + -i, --ignoredependencies, --ignore-dependencies + IgnoreDependencies - Ignore dependencies when installing package(s). + [Licensed editions](https://chocolatey.org/compare) only. Defaults to false. + + --installed, --installed-packages + Installed Packages - Download all installed Chocolatey packages. + [Licensed editions](https://chocolatey.org/compare) only. Defaults to false. + + --ignore-unfound, --ignore-unfound-packages + Ignore Unfound Packages - When downloading more than one package, + continue when one is unfound. [Licensed editions](https://chocolatey.org/compare) only. Defaults to false. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When used, + this makes queries similar to the way they were done in earlier versions + of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --recompile, --internalize + Recompile / Internalize - Download all external resources and recompile + the package to use the local resources instead. Business editions only. + + --resources-location=VALUE + Resources Location - When internalizing, use this location for resources + instead of embedding the downloaded resources into the package. Can be a + file share or an internal url location. When it is a file share, it will + attempt to download to that location. When it is an internal url, it + will download locally and give further instructions on where it should + be uploaded to match package edits. Business editions only. + + --download-location=VALUE + Download Location - OPTIONAL - When internalizing, download the + resources to this location. Used with Resources Location (and defaults + to Resources Location when not set). Business editions only. + + -a, --all-urls, --internalize-all, --internalize-all-urls + All Urls - OPTIONAL - When internalizing, Chocolatey would normally only + internalize packages with known helpers. Add this switch to make it + download anytime a URL is found. Business editions only. + + --append-useoriginallocation, --append-use-original-location + Append -UseOriginalLocation - When `Install-ChocolateyPackage` is + internalized, append the `-UseOriginalLocation` parameter to the + function. Business editions only. Overrides the feature + 'internalizeAppendUseOriginalLocation' set to by default to 'True'. + + --sdc, --skipdownloadcache, --skip-download-cache + Skip Download Cache - Use the original download url even if a private + CDN cache is available for a package. Overrides the default feature + 'downloadCache' set to 'True'. Business editions only. See https://doc- + s.chocolatey.org/en-us/features/private-cdn + + --dc, --downloadcache, --download-cache, --use-download-cache + Use Download Cache - Use private CDN cache if available for a package. + Overrides the default feature 'downloadCache' set to 'True'. Business + editions only. See https://docs.chocolatey.org/en-us/features/private- + cdn + + --svc, --skipvirus, --skip-virus, --skipviruscheck, --skip-virus-check + Skip Virus Check - Skip the virus check for downloaded files on this ru- + n. Overrides the default feature 'virusCheck' set to 'False'. Licensed + editions only. See https://docs.chocolatey.org/en-us/features/virus- + check + + --virus, --viruscheck, --virus-check + Virus Check - check downloaded files for viruses. Overrides the default + feature 'virusCheck' set to 'False'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --viruspositivesmin, --virus-positives-minimum=VALUE + Virus Check Minimum Scan Result Positives - the minimum number of scan + result positives required to flag a package. Used when virusScannerType + is VirusTotal. Overrides the default configuration value + 'virusCheckMinimumPositives' set to '4'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco download -h`. + + diff --git a/src/content/docs/en-us/choco/commands/export.mdx b/src/content/docs/en-us/choco/commands/export.mdx new file mode 100644 index 00000000000..902e7ebdafa --- /dev/null +++ b/src/content/docs/en-us/choco/commands/export.mdx @@ -0,0 +1,195 @@ +--- +order: 30 +xref: choco-command-export +title: Export +description: Export Command (choco export) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyExportCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Export Command (choco export) + +Export all currently installed packages to a file. + +This is especially helpful when re-building a machine that was created +using Chocolatey. Export all packages to a file, and then re-install +those packages onto new machine using `choco install packages.config`. + +## Usage + +~~~ + choco export [] +~~~ + + +## Examples + +~~~ + choco export + choco export --include-version-numbers + choco export "'c:\temp\packages.config'" + choco export "'c:\temp\packages.config'" --include-version-numbers + choco export -o="'c:\temp\packages.config'" + choco export -o="'c:\temp\packages.config'" --include-version-numbers + choco export --output-file-path="'c:\temp\packages.config'" + choco export --output-file-path="'c:\temp\packages.config'" --include-version-numbers +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -o, --output-file-path=VALUE + Output File Path - the path to where the list of currently installed + packages should be saved. Defaults to packages.config. + + --include-version-numbers, --include-version + Include Version Numbers - controls whether or not version numbers for + each package appear in generated file. Defaults to false. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco export -h`. + + diff --git a/src/content/docs/en-us/choco/commands/feature.mdx b/src/content/docs/en-us/choco/commands/feature.mdx new file mode 100644 index 00000000000..a04010c0652 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/feature.mdx @@ -0,0 +1,192 @@ +--- +order: 40 +xref: choco-command-feature +title: Feature +description: Feature Command (choco feature) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyFeatureCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Feature Command (choco feature) + +Chocolatey will allow you to interact with features. + +## Usage + +~~~ + choco feature [list]|disable|enable [] +~~~ + + +## Examples + +~~~ + choco feature + choco feature list + choco feature get checksumFiles + choco feature get --name=checksumFiles + choco feature disable --name=checksumFiles + choco feature enable --name=checksumFiles +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, feature already set (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + Name - the name of the source. Required with actions other than list. + Defaults to empty. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco feature -h`. + + diff --git a/src/content/docs/en-us/choco/commands/features.mdx b/src/content/docs/en-us/choco/commands/features.mdx new file mode 100644 index 00000000000..6f6fc76fc01 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/features.mdx @@ -0,0 +1,193 @@ +--- +order: 45 +xref: choco-command-features +title: Features +description: Features Command (choco features) +ShowInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyFeaturesCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Feature Command (choco features) + +Chocolatey will allow you to interact with features. + +## Usage + +~~~ + choco feature [list]|disable|enable [] +~~~ + + +## Examples + +~~~ + choco feature + choco feature list + choco feature get checksumFiles + choco feature get --name=checksumFiles + choco feature disable --name=checksumFiles + choco feature enable --name=checksumFiles +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, feature already set (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + Name - the name of the source. Required with actions other than list. + Defaults to empty. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco features -h`. + + diff --git a/src/content/docs/en-us/choco/commands/find.mdx b/src/content/docs/en-us/choco/commands/find.mdx new file mode 100644 index 00000000000..7c60e77259d --- /dev/null +++ b/src/content/docs/en-us/choco/commands/find.mdx @@ -0,0 +1,294 @@ +--- +order: 35 +xref: choco-command-find +title: Find +description: Find Command (choco find) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyFindCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Search Command (choco find) + +Chocolatey will perform a search for a package local or remote. + +## Usage + +~~~ + choco find [] + choco search [] +~~~ + + +## Examples + +~~~ + choco search git + choco search git --source="'https://somewhere/out/there'" + choco search bob -s "'https://somewhere/protected'" -u user -p pass + choco search --page=0 --page-size=25 + choco search 7zip --all-versions --exact +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Enhanced: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: no results (enhanced) + +> :choco-info: **NOTE** +> +> If you have the feature 'useEnhancedExitCodes' turned on, + then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## See It In Action + +![choco find](/images/gifs/choco_search.gif) + + +## Alternative Sources +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - Source location for install. Can use special 'windowsfeatures', + 'ruby', 'cygwin', or 'python' sources. Defaults to sources. + + --idonly, --id-only + Id Only - Only return Package Ids in the list results. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + -i, --includeprograms, --include-programs + IncludePrograms - Filters out apps Chocolatey has listed as packages and + includes those in the list. Defaults to false. + + -a, --all, --allversions, --all-versions + AllVersions - include results from all versions. + + --version=VALUE + Version - Specific version of a package to return. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --page=VALUE + Page - the 'page' of results to return. Defaults to return all results. + + --page-size=VALUE + Page Size - the amount of packages to return in each page of results. + NOTE: this value is per source. Defaults to 25 for each source that is + included in query. + + -e, --exact + Exact - Only return packages with this exact name. + + --by-id-only + ByIdOnly - Only return packages where the id contains the search filter. + + --by-tag-only, --by-tags-only + ByTagOnly - Only return packages where the search filter matches on the + tags. + + --id-starts-with + IdStartsWith - Only return packages where the id starts with the search + filter. + + --order-by-popularity + OrderByPopularity - Sort by package results by popularity. + + --approved-only + ApprovedOnly - Only return approved packages - this option will filter + out results not from the [community repository](https://community.chocolatey.org/packages). + + --download-cache, --download-cache-only + DownloadCacheAvailable - Only return packages that have a download cache + available - this option will filter out results not from the community + repository. + + --not-broken + NotBroken - Only return packages that are not failing testing - this + option only filters out failing results from the [community feed](https://community.chocolatey.org/packages). It will + not filter against other sources. + + --detail, --detailed + Detailed - Alias for verbose. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When + disabled, this makes queries similar to the way they were done in + earlier versions of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco find -h`. + + diff --git a/src/content/docs/en-us/choco/commands/help.mdx b/src/content/docs/en-us/choco/commands/help.mdx new file mode 100644 index 00000000000..9b6ad946509 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/help.mdx @@ -0,0 +1,340 @@ +--- +order: 50 +xref: choco-command-help +title: Help +description: Help Command (choco help) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyHelpCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +This is a listing of all of the different things you can pass to choco. + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -v, --version + Version - Prints out the Chocolatey version. + +## Commands + + * apikey - retrieves, saves or deletes an API key for a particular source + * cache - Manage the local HTTP caches used to store queries (v2.1.0+) + * config - Retrieve and configure config file settings + * download - downloads packages - optionally internalizing all remote resources + * export - exports list of currently installed packages + * feature - view and configure choco features + * features - view and configure choco features (alias for feature) + * find - searches remote packages (alias for search) + * help - displays top level help information for choco + * info - retrieves package information. Shorthand for choco search pkgname --exact --verbose + * install - installs packages from various sources + * list - lists local packages + * new - generates files necessary for a chocolatey package from a template + * optimize - optimizes installation, reducing space usage + * outdated - retrieves packages that are outdated. Similar to upgrade all --noop + * pack - packages nuspec, scripts, and other Chocolatey package resources into a nupkg file + * pin - suppress upgrades for a package + * push - pushes a compiled nupkg to a source + * search - searches remote packages + * setapikey - retrieves, saves or deletes an API key for a particular source (alias for apikey) + * source - view and configure default sources + * sources - view and configure default sources (alias for source) + * support - provides support information + * sync - synchronizes against system installed software - generates missing packages + * synchronize - synchronizes against system installed software - generates missing packages + * template - get information about installed templates + * templates - get information about installed templates (alias for template) + * uninstall - uninstalls a package + * unpackself - [DEPRECATED] will be removed in v3.0.0 - re-installs Chocolatey base files + * upgrade - upgrades packages from various sources + + +Please run chocolatey with `choco command -help` for specific help on + each command. + +## How To Pass Options / Switches + +You can pass options and switches in the following ways: + + * Unless stated otherwise, an option/switch should only be passed one + time. Otherwise you may find weird/non-supported behavior. + * `-`, `/`, or `--` (one character switches should not use `--`) + * **Option Bundling / Bundled Options**: One character switches can be + bundled. e.g. `-d` (debug), `-f` (force), `-v` (verbose), and `-y` + (confirm yes) can be bundled as `-dfvy`. + * NOTE: If `debug` or `verbose` are bundled with local options + (not the global ones above), some logging may not show up until after + the local options are parsed. + * **Use Equals**: You can also include or not include an equals sign + `=` between options and values. + * **Quote Values**: When you need to quote an entire argument, such as + when using spaces, please use a combination of double quotes and + apostrophes (`"'value'"`). In cmd.exe you can just use double quotes + (`"value"`) but in powershell.exe you should use backticks + (`` `"value`" ``) or apostrophes (`'value'`). Using the combination + allows for both shells to work without issue, except for when the next + section applies. + * **Pass quotes in arguments**: When you need to pass quoted values to + to something like a native installer, you are in for a world of fun. In + cmd.exe you must pass it like this: `-ia "/yo=""Spaces spaces"""`. In + PowerShell.exe, you must pass it like this: `-ia '/yo=""Spaces spaces""'`. + No other combination will work. In PowerShell.exe if you are on version + v3+, you can try `--%` before `-ia` to just pass the args through as is, + which means it should not require any special workarounds. + * **Periods in PowerShell**: If you need to pass a period as part of a + value or a path, PowerShell doesn't always handle it well. Please + quote those values using "Quote Values" section above. + * Options and switches apply to all items passed, so if you are + installing multiple packages, and you use `--version=1.0.0`, choco + is going to look for and try to install version 1.0.0 of every + package passed. So please split out multiple package calls when + wanting to pass specific options. + +## Scripting / Integration - Best Practices / Style Guide + +When writing scripts, such as PowerShell scripts passing options and +switches, there are some best practices to follow to ensure that you +don't run into issues later. This also applies to integrations that +are calling Chocolatey and parsing output. Chocolatey **uses** +PowerShell, but it is an exe, so it cannot return PowerShell objects. + +Following these practices ensures both readability of your scripts AND +compatibility across different versions and editions of Chocolatey. +Following this guide will ensure your experience is not frustrating +based on choco not receiving things you think you are passing to it. + + * For consistency, always use `choco`, not `choco.exe`. + * Always have the command as the first argument to `choco`. e.g. + , where is the command. + * If there is a subcommand, ensure that is the second argument. e.g. + `choco source list`, where `source` is the command and is the + subcommand. + * Typically the subject comes next. If installing packages, the + subject would be the package names, e.g. `choco install pkg1 pkg2`. + * Never use 'nupkg' or point directly to a nupkg file UNLESS using + 'choco push'. Use the source folder instead, e.g. `choco install + --source="'c:\folder\with\package'"` instead of + `choco install DoNotDoThis.1.0.nupkg` or `choco install DoNotDoThis + --source="'c:\folder\with\package\DoNotDoThis.1.0.nupkg'"`. + * Switches and parameters are called simply options. Options come + after the subject. e.g. `choco install pkg1 --debug --verbose`. + * Never use the force option (`--force`/`-f`) in scripts (or really + otherwise as a default mode of use). Force is an override on + Chocolatey behavior. If you are wondering why Chocolatey isn't doing + something like the documentation says it should, it's likely because + you are using force. Stop. + * Always use full option name. If the short option is `-n`, and the + full option is `--name`, use `--name`. The only acceptable short + option for use in scripts is `-y`. Find option names in help docs + online or through `choco -?` /`choco [Command Name] -?`. + * For scripts that are running automated, always use `-y`. Do note + that even with `-y` passed, some things / state issues detected will + temporarily stop for input - the key here is temporarily. They will + continue without requiring any action after the temporary timeout + (typically 30 seconds). + * Full option names are prepended with two dashes, e.g. `--` or + `--debug --verbose --ignore-proxy`. + * When setting a value to an option, always put an equals (`=`) + between the name and the setting, e.g. `--source="'local'"`. + * When setting a value to an option, always surround the value + properly with double quotes bookending apostrophes, e.g. + `--source="'internal_server'"`. + * If you are building PowerShell scripts, you can most likely just + simply use apostrophes surrounding option values, e.g. + `--source='internal_server'`. + * Prefer upgrade to install in scripts. You can't to a newer + version of something, but you can which will do both + upgrade or install (unless switched off explicitly). + * If you are sharing the script with others, pass `--source` to be + explicit about where the package is coming from. Use full link and + not source name ('https://community.chocolatey.org/api/v2' versus + 'chocolatey'). + * If parsing output, you might want to use `--limit-output`/`-r` to + get output in a more machine parseable format. NOTE: Not all + commands handle return of information in an easily digestible + output. + * Use exit codes to determine status. Chocolatey exits with 0 when + everything worked appropriately and other exits codes like 1 when + things error. There are package specific exit codes that are + recommended to be used and reboot indicating exit codes as well. To + check exit code when using PowerShell, immediately call + `$exitCode = $LASTEXITCODE` to get the value choco exited with. + +Here's an example following bad practices (line breaks added for + readability): + + `choco install pkg1 -y -params '/Option:Value /Option2:value with + spaces' --c4b-option 'Yaass' --option-that-is-new 'dude upgrade'` + +Now here is that example written with best practices (again line + breaks added for readability - there are not line continuations + for choco): + + `choco upgrade pkg1 -y --source="'https://community.chocolatey.org/api/v2'" + --package-parameters="'/Option:Value /Option2:value with spaces'" + --c4b-option="'Yaass'" --option-that-is-new="'dude upgrade'"` + +Note the differences between the two: + * Which is more self-documenting? + * Which will allow for the newest version of something installed or + upgraded to (which allows for more environmental consistency on + packages and versions)? + * Which may throw an error on a badly passed option? + * Which will throw errors on unknown option values? See explanation + below. + +Chocolatey ignores options it doesn't understand, but it can only + ignore option values if they are tied to the option with an + equals sign ('='). Note those last two options in the examples above? + If you roll off of a commercial edition or someone with older version + attempts to run the badly crafted script `--c4b-option 'Yaass' + --option-that-is-new 'dude upgrade'`, they are likely to see errors on + 'Yaass' and 'dude upgrade' because they are not explicitly tied to the + option they are written after. Now compare that to the other script. + Choco will ignore `--c4b-option="'Yaass'"` and + `--option-that-is-new="'dude upgrade'"` as a whole when it doesn't + register the options. This means that your script doesn't error. + +Following these scripting best practices will ensure your scripts work + everywhere they are used and with newer versions of Chocolatey. + + +## Default Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco help -h`. + + diff --git a/src/content/docs/en-us/choco/commands/index.mdx b/src/content/docs/en-us/choco/commands/index.mdx new file mode 100644 index 00000000000..5502449bfa2 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/index.mdx @@ -0,0 +1,346 @@ +--- +order: 40 +xref: choco-commands +title: Commands +description: Full list of all available Chocolatey commands +--- +import Xref from '@components/Xref.astro'; + +# Command Reference + +{/* This file is automatically generated based on output from the files at https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +This is a listing of all of the different things you can pass to choco. + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -v, --version + Version - Prints out the Chocolatey version. + +## Commands + + * - retrieves, saves or deletes an API key for a particular source + * - Manage the local HTTP caches used to store queries (v2.1.0+) + * - Retrieve and configure config file settings + * - downloads packages - optionally internalizing all remote resources + * - exports list of currently installed packages + * - view and configure choco features + * - view and configure choco features (alias for feature) + * - searches remote packages (alias for search) + * - displays top level help information for choco + * - retrieves package information. Shorthand for choco search pkgname --exact --verbose + * - installs packages from various sources + * - lists local packages + * - generates files necessary for a chocolatey package from a template + * - optimizes installation, reducing space usage + * - retrieves packages that are outdated. Similar to upgrade all --noop + * - packages nuspec, scripts, and other Chocolatey package resources into a nupkg file + * - suppress upgrades for a package + * - pushes a compiled nupkg to a source + * - searches remote packages + * - retrieves, saves or deletes an API key for a particular source (alias for apikey) + * - view and configure default sources + * - view and configure default sources (alias for source) + * - provides support information + * - synchronizes against system installed software - generates missing packages + * - synchronizes against system installed software - generates missing packages + * - get information about installed templates + * - get information about installed templates (alias for template) + * - uninstalls a package + * - [DEPRECATED] will be removed in v3.0.0 - re-installs Chocolatey base files + * - upgrades packages from various sources + + +Please run chocolatey with `choco command -help` for specific help on + each command. + +## How To Pass Options / Switches + +You can pass options and switches in the following ways: + + * Unless stated otherwise, an option/switch should only be passed one + time. Otherwise you may find weird/non-supported behavior. + * `-`, `/`, or `--` (one character switches should not use `--`) + * **Option Bundling / Bundled Options**: One character switches can be + bundled. e.g. `-d` (debug), `-f` (force), `-v` (verbose), and `-y` + (confirm yes) can be bundled as `-dfvy`. + * NOTE: If `debug` or `verbose` are bundled with local options + (not the global ones above), some logging may not show up until after + the local options are parsed. + * **Use Equals**: You can also include or not include an equals sign + `=` between options and values. + * **Quote Values**: When you need to quote an entire argument, such as + when using spaces, please use a combination of double quotes and + apostrophes (`"'value'"`). In cmd.exe you can just use double quotes + (`"value"`) but in powershell.exe you should use backticks + (`` `"value`" ``) or apostrophes (`'value'`). Using the combination + allows for both shells to work without issue, except for when the next + section applies. + * **Pass quotes in arguments**: When you need to pass quoted values to + to something like a native installer, you are in for a world of fun. In + cmd.exe you must pass it like this: `-ia "/yo=""Spaces spaces"""`. In + PowerShell.exe, you must pass it like this: `-ia '/yo=""Spaces spaces""'`. + No other combination will work. In PowerShell.exe if you are on version + v3+, you can try `--%` before `-ia` to just pass the args through as is, + which means it should not require any special workarounds. + * **Periods in PowerShell**: If you need to pass a period as part of a + value or a path, PowerShell doesn't always handle it well. Please + quote those values using "Quote Values" section above. + * Options and switches apply to all items passed, so if you are + installing multiple packages, and you use `--version=1.0.0`, choco + is going to look for and try to install version 1.0.0 of every + package passed. So please split out multiple package calls when + wanting to pass specific options. + +## Scripting / Integration - Best Practices / Style Guide + +When writing scripts, such as PowerShell scripts passing options and +switches, there are some best practices to follow to ensure that you +don't run into issues later. This also applies to integrations that +are calling Chocolatey and parsing output. Chocolatey **uses** +PowerShell, but it is an exe, so it cannot return PowerShell objects. + +Following these practices ensures both readability of your scripts AND +compatibility across different versions and editions of Chocolatey. +Following this guide will ensure your experience is not frustrating +based on choco not receiving things you think you are passing to it. + + * For consistency, always use `choco`, not `choco.exe`. + * Always have the command as the first argument to `choco`. e.g. + , where is the command. + * If there is a subcommand, ensure that is the second argument. e.g. + `choco source list`, where `source` is the command and is the + subcommand. + * Typically the subject comes next. If installing packages, the + subject would be the package names, e.g. `choco install pkg1 pkg2`. + * Never use 'nupkg' or point directly to a nupkg file UNLESS using + 'choco push'. Use the source folder instead, e.g. `choco install + --source="'c:\folder\with\package'"` instead of + `choco install DoNotDoThis.1.0.nupkg` or `choco install DoNotDoThis + --source="'c:\folder\with\package\DoNotDoThis.1.0.nupkg'"`. + * Switches and parameters are called simply options. Options come + after the subject. e.g. `choco install pkg1 --debug --verbose`. + * Never use the force option (`--force`/`-f`) in scripts (or really + otherwise as a default mode of use). Force is an override on + Chocolatey behavior. If you are wondering why Chocolatey isn't doing + something like the documentation says it should, it's likely because + you are using force. Stop. + * Always use full option name. If the short option is `-n`, and the + full option is `--name`, use `--name`. The only acceptable short + option for use in scripts is `-y`. Find option names in help docs + online or through `choco -?` /`choco [Command Name] -?`. + * For scripts that are running automated, always use `-y`. Do note + that even with `-y` passed, some things / state issues detected will + temporarily stop for input - the key here is temporarily. They will + continue without requiring any action after the temporary timeout + (typically 30 seconds). + * Full option names are prepended with two dashes, e.g. `--` or + `--debug --verbose --ignore-proxy`. + * When setting a value to an option, always put an equals (`=`) + between the name and the setting, e.g. `--source="'local'"`. + * When setting a value to an option, always surround the value + properly with double quotes bookending apostrophes, e.g. + `--source="'internal_server'"`. + * If you are building PowerShell scripts, you can most likely just + simply use apostrophes surrounding option values, e.g. + `--source='internal_server'`. + * Prefer upgrade to install in scripts. You can't to a newer + version of something, but you can which will do both + upgrade or install (unless switched off explicitly). + * If you are sharing the script with others, pass `--source` to be + explicit about where the package is coming from. Use full link and + not source name ('https://community.chocolatey.org/api/v2' versus + 'chocolatey'). + * If parsing output, you might want to use `--limit-output`/`-r` to + get output in a more machine parseable format. NOTE: Not all + commands handle return of information in an easily digestible + output. + * Use exit codes to determine status. Chocolatey exits with 0 when + everything worked appropriately and other exits codes like 1 when + things error. There are package specific exit codes that are + recommended to be used and reboot indicating exit codes as well. To + check exit code when using PowerShell, immediately call + `$exitCode = $LASTEXITCODE` to get the value choco exited with. + +Here's an example following bad practices (line breaks added for + readability): + + `choco install pkg1 -y -params '/Option:Value /Option2:value with + spaces' --c4b-option 'Yaass' --option-that-is-new 'dude upgrade'` + +Now here is that example written with best practices (again line + breaks added for readability - there are not line continuations + for choco): + + `choco upgrade pkg1 -y --source="'https://community.chocolatey.org/api/v2'" + --package-parameters="'/Option:Value /Option2:value with spaces'" + --c4b-option="'Yaass'" --option-that-is-new="'dude upgrade'"` + +Note the differences between the two: + * Which is more self-documenting? + * Which will allow for the newest version of something installed or + upgraded to (which allows for more environmental consistency on + packages and versions)? + * Which may throw an error on a badly passed option? + * Which will throw errors on unknown option values? See explanation + below. + +Chocolatey ignores options it doesn't understand, but it can only + ignore option values if they are tied to the option with an + equals sign ('='). Note those last two options in the examples above? + If you roll off of a commercial edition or someone with older version + attempts to run the badly crafted script `--c4b-option 'Yaass' + --option-that-is-new 'dude upgrade'`, they are likely to see errors on + 'Yaass' and 'dude upgrade' because they are not explicitly tied to the + option they are written after. Now compare that to the other script. + Choco will ignore `--c4b-option="'Yaass'"` and + `--option-that-is-new="'dude upgrade'"` as a whole when it doesn't + register the options. This means that your script doesn't error. + +Following these scripting best practices will ensure your scripts work + everywhere they are used and with newer versions of Chocolatey. + + +## See Help Menu In Action + +![choco help in action](/images/gifs/choco_help.gif) + +## Default Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + +~~~ + + + +> :choco-info: **NOTE** +> +> +> +> This documentation has been automatically generated from `choco -h`. + diff --git a/src/content/docs/en-us/choco/commands/info.mdx b/src/content/docs/en-us/choco/commands/info.mdx new file mode 100644 index 00000000000..d82fa7117a9 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/info.mdx @@ -0,0 +1,239 @@ +--- +order: 60 +xref: choco-command-info +title: Info +description: Info Command (choco info) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyInfoCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Info Command (choco info) + +Chocolatey will perform a search for a package local or remote and provide + detailed information about that package. This is a synonym for + `choco search --exact --detailed`. + + +## Usage + +~~~ + choco info [] +~~~ + + +## Examples + +~~~ + choco info chocolatey + choco info googlechrome + choco info powershell +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Enhanced: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: no results (enhanced) + +> :choco-info: **NOTE** +> +> If you have the feature 'useEnhancedExitCodes' turned on, + then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - Source location for install. Can use special 'windowsfeatures', + 'ruby', 'cygwin', or 'python' sources. Defaults to configured sources. + + -l, --lo, --localonly, --local-only + LocalOnly - Only search against local machine items. + + --version=VALUE + Version - Specific version of a package to return. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When used, + this makes queries similar to the way they were done in earlier versions + of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco info -h`. + + diff --git a/src/content/docs/en-us/choco/commands/install.mdx b/src/content/docs/en-us/choco/commands/install.mdx new file mode 100644 index 00000000000..5abb1db60cc --- /dev/null +++ b/src/content/docs/en-us/choco/commands/install.mdx @@ -0,0 +1,559 @@ +--- +order: 70 +xref: choco-command-install +title: Install +description: Install Command (choco install) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyInstallCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Install Command (choco install) + +Installs a package or a list of packages (sometimes specified as a + packages.config). + +## Usage + +~~~ + choco install [ ] [] +~~~ + + +> :choco-info: **NOTE** +> +> `all` is a special package keyword that will allow you to install + all packages from a custom feed. Will not work with Chocolatey default + feed. THIS IS NOT YET REIMPLEMENTED. + +> :choco-info: **NOTE** +> +> Any package name ending with .config is considered a + 'packages.config' file. Please see https://ch0.co/packages_config + +> :choco-info: **NOTE** +> +> [Chocolatey Pro](https://chocolatey.org/compare) / Business builds on top of a great open source + experience with quite a few features that enhance the your use of the + community package repository (when using Pro), and really enhance the + Chocolatey experience all around. If you are an organization looking + for a better ROI, look no further than Business - automatic package + creation from installer files, automatic recompile support, runtime + malware protection, private CDN download cache, synchronize with + Programs and Features, etc - https://chocolatey.org/compare. + + +## Examples + +~~~ + choco install sysinternals + choco install notepadplusplus googlechrome atom 7zip + choco install notepadplusplus --force --force-dependencies + choco install notepadplusplus googlechrome atom 7zip -dvfy + choco install git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'" + choco install git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'" --install-arguments="'/DIR=C:\git'" + # Params are package parameters, passed to the package + # Install args are installer arguments, appended to the silentArgs + # in the package for the installer itself + choco install nodejs.install --version 0.10.35 + choco install git -s "'https://somewhere/out/there'" + choco install git -s "'https://somewhere/protected'" -u user -p pass +~~~ + + +(DEPRECATED) Choco can also install directly from a nuspec/nupkg file. This aids in + testing packages: + +~~~ + choco install + choco install +~~~ + + +> :choco-info: **NOTE** +> +> `all` is a special package keyword that will allow you to install + all packages available on a source. This keyword is not available for + public repositories like the Chocolatey [Community Repository](https://community.chocolatey.org/packages), and is + intended to be used with internal package sources only. + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Package Exit Codes: + - 1641: success, reboot initiated + - 3010: success, reboot required + - other (not listed): likely an error has occurred + +In addition to normal exit codes, packages are allowed to exit + with their own codes when the feature 'usePackageExitCodes' is + turned on. Uninstall command has additional valid exit codes. + +Reboot Exit Codes: + - 350: pending reboot detected, no action has occurred + - 1604: install suspended, incomplete + +In addition to the above exit codes, you may also see reboot exit codes + when the feature 'exitOnRebootDetected' is turned on. It typically requires + the feature 'usePackageExitCodes' to also be turned on to work properly. + +## See It In Action + +Chocolatey FOSS install showing tab completion and `refreshenv` (a way + to update environment variables without restarting the shell). + +![FOSS install in action](/images/gifs/choco_install.gif) + +[Chocolatey Professional](https://chocolatey.org/compare) showing private download cache and virus scan + protection. + +![Pro install in action](/images/gifs/chocopro_install_stopped.gif) + +## Packages.config + +Alternative to PackageName. This is a list of packages in an xml manifest for Chocolatey to install. This is like the packages.config that NuGet uses except it also adds other options and switches. This can also be the path to the packages.config file if it is not in the current working directory. + +> :choco-info: **NOTE** +> +> The filename is only required to end in .config, the name is not required to be packages.config. + +~~~xml + + + + + + + +~~~ + + +## Alternative Sources + + +### Ruby +This specifies the source is Ruby Gems and that we are installing a + gem. If you do not have ruby installed prior to running this command, + the command will install that first. + e.g. `choco install compass -source ruby` + +### Cygwin +This specifies the source is Cygwin and that we are installing a cygwin + package, such as bash. If you do not have Cygwin installed, it will + install that first and then the product requested. + e.g. `choco install bash --source cygwin` + +### Python +This specifies the source is Python and that we are installing a python + package, such as Sphinx. If you do not have easy_install and Python + installed, it will install those first and then the product requested. + e.g. `choco install sphinx --source python` + +### Windows Features +This specifies that the source is a Windows Feature and we should + install via the Deployment Image Servicing and Management tool (DISM) + on the local machine. + e.g. `choco install IIS-WebServerRole --source windowsfeatures` + + +## Resources + + * How-To: A complete example of how you can use the PackageParameters argument + when creating a Chocolatey Package can be seen at + https://docs.chocolatey.org/en-us/guides/create/parse-packageparameters-argument + * One may want to override the default installation directory of a + piece of software. See + https://docs.chocolatey.org/en-us/getting-started#overriding-default-install-directory-or-other-advanced-install-concepts. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source to find the package(s) to install. Special sources + include: ruby, cygwin, windowsfeatures, and python. To specify more than + one source, pass it with a semi-colon separating the values (e.g. + "'source1;source2'"). Defaults to default feeds. + + --version=VALUE + Version - A specific version to install. Defaults to unspecified. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + --x86, --forcex86 + ForceX86 - Force x86 (32bit) installation on 64 bit systems. Defaults to + false. + + --ia, --installargs, --install-args, --installarguments, --install-arguments=VALUE + InstallArguments - Install Arguments to pass to the native installer in + the package. Defaults to unspecified. + + -o, --override, --overrideargs, --overridearguments, --override-arguments + OverrideArguments - Should install arguments be used exclusively without + appending to current package passed arguments? Defaults to false. + + --notsilent, --not-silent + NotSilent - Do not install this silently. Defaults to false. + + --params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE + PackageParameters - Parameters to pass to the package. Defaults to + unspecified. + + --argsglobal, --args-global, --installargsglobal, --install-args-global, --applyargstodependencies, --apply-args-to-dependencies, --apply-install-arguments-to-dependencies + Apply Install Arguments To Dependencies - Should install arguments be + applied to dependent packages? Defaults to false. + + --paramsglobal, --params-global, --packageparametersglobal, --package-parameters-global, --applyparamstodependencies, --apply-params-to-dependencies, --apply-package-parameters-to-dependencies + Apply Package Parameters To Dependencies - Should package parameters be + applied to dependent packages? Defaults to false. + + --allowdowngrade, --allow-downgrade + AllowDowngrade - Should an attempt at downgrading be allowed? Defaults + to false. + + -i, --ignoredependencies, --ignore-dependencies + IgnoreDependencies - Ignore dependencies when installing package(s). + Defaults to false. + + -x, --forcedependencies, --force-dependencies + ForceDependencies - Force dependencies to be reinstalled when force + installing package(s). Must be used in conjunction with --force. + Defaults to false. + + -n, --skippowershell, --skip-powershell, --skipscripts, --skip-scripts, --skip-automation-scripts + Skip PowerShell - Do not run chocolateyInstall.ps1. Defaults to false. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --ignorechecksum, --ignore-checksum, --ignorechecksums, --ignore-checksums + IgnoreChecksums - Ignore checksums provided by the package. Overrides + the default feature 'checksumFiles' set to 'True'. + + --allowemptychecksum, --allowemptychecksums, --allow-empty-checksums + Allow Empty Checksums - Allow packages to have empty/missing checksums + for downloaded resources from non-secure locations (HTTP, FTP). Use this + switch is not recommended if using sources that download resources from + the internet. Overrides the default feature 'allowEmptyChecksums' set to + 'False'. + + --allowemptychecksumsecure, --allowemptychecksumssecure, --allow-empty-checksums-secure + Allow Empty Checksums Secure - Allow packages to have empty checksums + for downloaded resources from secure locations (HTTPS). Overrides the + default feature 'allowEmptyChecksumsSecure' set to 'True'. + + --requirechecksum, --requirechecksums, --require-checksums + Require Checksums - Requires packages to have checksums for downloaded + resources (both non-secure and secure). Overrides the default feature + 'allowEmptyChecksums' set to 'False' and 'allowEmptyChecksumsSecure' set + to 'True'. + + --checksum, --downloadchecksum, --download-checksum=VALUE + Download Checksum - a user provided checksum for downloaded resources + for the package. Overrides the package checksum (if it has one). + Defaults to empty. + + --checksum64, --checksumx64, --downloadchecksumx64, --download-checksum-x64=VALUE + Download Checksum 64bit - a user provided checksum for 64bit downloaded + resources for the package. Overrides the package 64-bit checksum (if it + has one). Defaults to same as Download Checksum. + + --checksumtype, --checksum-type, --downloadchecksumtype, --download-checksum-type=VALUE + Download Checksum Type - a user provided checksum type. Overrides the + package checksum type (if it has one). Used in conjunction with Download + Checksum. Available values are 'md5', 'sha1', 'sha256' or 'sha512'. + Defaults to 'md5'. + + --checksumtype64, --checksumtypex64, --checksum-type-x64, --downloadchecksumtypex64, --download-checksum-type-x64=VALUE + Download Checksum Type 64bit - a user provided checksum for 64bit + downloaded resources for the package. Overrides the package 64-bit + checksum (if it has one). Used in conjunction with Download Checksum + 64bit. Available values are 'md5', 'sha1', 'sha256' or 'sha512'. + Defaults to same as Download Checksum Type. + + --ignorepackagecodes, --ignorepackageexitcodes, --ignore-package-codes, --ignore-package-exit-codes + IgnorePackageExitCodes - Exit with a 0 for success and 1 for non-succes- + s, no matter what package scripts provide for exit codes. Overrides the + default feature 'usePackageExitCodes' set to 'True'. + + --usepackagecodes, --usepackageexitcodes, --use-package-codes, --use-package-exit-codes + UsePackageExitCodes - Package scripts can provide exit codes. Use those + for choco's exit code when non-zero (this value can come from a + dependency package). Chocolatey defines valid exit codes as 0, 1605, + 1614, 1641, 3010. Overrides the default feature 'usePackageExitCodes' + set to 'True'. + + --stoponfirstfailure, --stop-on-first-failure, --stop-on-first-package-failure + Stop On First Package Failure - stop running install, upgrade or + uninstall on first package failure instead of continuing with others. + Overrides the default feature 'stopOnFirstPackageFailure' set to 'False'. + + --exitwhenrebootdetected, --exit-when-reboot-detected + Exit When Reboot Detected - Stop running install, upgrade, or uninstall + when a reboot request is detected. Requires 'usePackageExitCodes' + feature to be turned on. Will exit with either 350 or 1604. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --ignoredetectedreboot, --ignore-detected-reboot + Ignore Detected Reboot - Ignore any detected reboots if found. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When used, + this makes queries similar to the way they were done in earlier versions + of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --pin, --pinpackage, --pin-package + Pin Package - Add a pin to the package after install. Available in 1.2.0+ + + --skiphooks, --skip-hooks + Skip hooks - Do not run hook scripts. Available in 1.2.0+ + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --sdc, --skipdownloadcache, --skip-download-cache + Skip Download Cache - Use the original download even if a private CDN + cache is available for a package. Overrides the default feature + 'downloadCache' set to 'True'. [Licensed editions](https://chocolatey.org/compare) only. See https://doc- + s.chocolatey.org/en-us/features/private-cdn + + --dc, --downloadcache, --download-cache, --use-download-cache + Use Download Cache - Use private CDN cache if available for a package. + Overrides the default feature 'downloadCache' set to 'True'. Licensed + editions only. See https://docs.chocolatey.org/en-us/features/private- + cdn + + --svc, --skipvirus, --skip-virus, --skipviruscheck, --skip-virus-check + Skip Virus Check - Skip the virus check for downloaded files on this ru- + n. Overrides the default feature 'virusCheck' set to 'False'. Licensed + editions only. See https://docs.chocolatey.org/en-us/features/virus- + check + + --virus, --viruscheck, --virus-check + Virus Check - check downloaded files for viruses. Overrides the default + feature 'virusCheck' set to 'False'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --viruspositivesmin, --virus-positives-minimum=VALUE + Virus Check Minimum Scan Result Positives - the minimum number of scan + result positives required to flag a package. Used when virusScannerType + is VirusTotal. Overrides the default configuration value + 'virusCheckMinimumPositives' set to '4'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --install-arguments-sensitive=VALUE + InstallArgumentsSensitive - Install Arguments to pass to the native + installer in the package that are sensitive and you do not want logged. + Defaults to unspecified. [Licensed editions](https://chocolatey.org/compare) only. + + --package-parameters-sensitive=VALUE + PackageParametersSensitive - Package Parameters to pass the package that + are sensitive and you do not want logged. Defaults to unspecified. + [Licensed editions](https://chocolatey.org/compare) only. + + --dir, --directory, --installdir, --installdirectory, --install-dir, --install-directory=VALUE + Install Directory Override - Override the default installation director- + y. Chocolatey will automatically determine the type of installer and + pass the appropriate arguments to override the install directory. The + package must use Chocolatey install helpers and be installing an + installer for software. [Licensed editions](https://chocolatey.org/compare) only. See https://doc- + s.chocolatey.org/en-us/features/install-directory-override + + --bps, --maxdownloadrate, --max-download-rate, --maxdownloadbitspersecond, --max-download-bits-per-second, --maximumdownloadbitspersecond, --maximum-download-bits-per-second=VALUE + Maximum Download Rate Bits Per Second - The maximum download rate in + bits per second. '0' or empty means no maximum. A number means that will + be the maximum download rate in bps. Defaults to config setting of '0'. + Available in [licensed editions](https://chocolatey.org/compare) only. See https://docs.chocolatey.org/en- + us/features/package-throttle + + --reduce, --reduce-package-size, --deflate, --deflate-package-size + Reducer Installed Package Size (Package Reducer) - Reduce size of the + nupkg file to very small and remove extracted archives and installers. + Overrides the default feature 'reduceInstalledPackageSpaceUsage' set to + 'True'. [Licensed editions](https://chocolatey.org/compare) only. See https://docs.chocolatey.org/en- + us/features/package-reducer + + --no-reduce, --no-reduce-package-size, --no-deflate, --no-deflate-package-size + Do Not Reduce Installed Package Size - Leave the nupkg and files alone + in the package. Overrides the default feature + 'reduceInstalledPackageSpaceUsage' set to 'True'. [Licensed editions](https://chocolatey.org/compare) onl- + y. See https://docs.chocolatey.org/en-us/features/package-reducer + + --reduce-nupkg-only, --deflate-nupkg-only + Reduce Only Nupkg File Size - reduce only the size of nupkg file when + using Package Reducer. Overrides the default feature + 'reduceOnlyNupkgSize' set to 'False'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/package-reducer + + --reason, --pin-reason, --note=VALUE + Pin Reason - Text information about why you are setting a pin. Available + in business editions 5.0.0+. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco install -h`. + + diff --git a/src/content/docs/en-us/choco/commands/list.mdx b/src/content/docs/en-us/choco/commands/list.mdx new file mode 100644 index 00000000000..7f2cad4c7d4 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/list.mdx @@ -0,0 +1,237 @@ +--- +order: 80 +xref: choco-command-list +title: List +description: List Command (choco list) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# List Command (choco list) + +## Usage + +~~~ + choco list [] +~~~ + + +## Examples + +~~~ + choco list -i + choco list --include-programs +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Enhanced: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: no results (enhanced) + +> :choco-info: **NOTE** +> +> If you have the feature 'useEnhancedExitCodes' turned on, + then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - Name of alternative source to use, for example + 'windowsfeatures', 'ruby', 'cygwin', or 'python'. + + --idonly, --id-only + Id Only - Only return Package Ids in the list results. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + -i, --includeprograms, --include-programs + IncludePrograms - Includes software from Programs and Features not being + managed by Chocolatey CLI. + + --version=VALUE + Version - Specific version of a package to return. + + --page=VALUE + Page - the 'page' of results to return. Defaults to return all results. + + --page-size=VALUE + Page Size - the amount of package results to return per page. Defaults + to 25. + + -e, --exact + Exact - Only return packages with this exact name. + + --by-id-only + ByIdOnly - Only return packages where the id contains the search filter. + + --by-tag-only, --by-tags-only + ByTagOnly - Only return packages where the search filter matches on the + tags. + + --id-starts-with + IdStartsWith - Only return packages where the id starts with the search + filter. + + --detail, --detailed + Detailed - Alias for verbose. + + --audit, --showaudit, --show-audit, --show-audit-info + Show Audit Information - Display auditing information for a package. + Available in business editions. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco list -h`. + + diff --git a/src/content/docs/en-us/choco/commands/optimize.mdx b/src/content/docs/en-us/choco/commands/optimize.mdx new file mode 100644 index 00000000000..a642f92a5ec --- /dev/null +++ b/src/content/docs/en-us/choco/commands/optimize.mdx @@ -0,0 +1,198 @@ +--- +order: 90 +xref: choco-command-optimize +title: Optimize +description: Optimize Command (choco optimize) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyOptimizeCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Optimize Command (choco optimize) + +### Package Optimizer + +Chocolatey [Licensed editions](https://chocolatey.org/compare) only. + +Similar to Package Reducer, but reduces for existing packages. +With Package Optimizer/Reducer: + +* nupkg file is reduced to 5KB or less, no matter the size. +* zips / installers are automatically removed from the package directory if they are found. +* zips / installers are removed from TEMP cache if found. + +The following file extensions are removed automatically: + +* 7z / zip / rar / gz / tar / sfx +* iso +* msi / msu / msp +* exe files if they are detected to be an installer + + + +## Usage + +~~~ + choco optimize [] +~~~ + + +## Examples + +~~~ + choco optimize + choco optimize --reduce-nupkg-only +~~~ + + + +## See It In Action + +Coming soon + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + downloading multiple packages, and you use `--version=1.0.0`, it is + going to look for and try to download version 1.0.0 of every package + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --reduce-nupkg-only, --deflate-nupkg-only + Reduce Only Nupkg File Size - reduce only the size of nupkg file when + using Package Optimizer. [Licensed editions](https://chocolatey.org/compare) only. + + --id=VALUE + Id - The package to optimize + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco optimize -h`. + + diff --git a/src/content/docs/en-us/choco/commands/outdated.mdx b/src/content/docs/en-us/choco/commands/outdated.mdx new file mode 100644 index 00000000000..0b3096bfad9 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/outdated.mdx @@ -0,0 +1,250 @@ +--- +order: 100 +xref: choco-command-outdated +title: Outdated +description: Outdated Command (choco outdated) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyOutdatedCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Outdated Command (choco outdated) + +Returns a list of outdated packages. + + +## Usage + +~~~ + choco outdated [] +~~~ + + +## Examples + +~~~ + choco outdated + choco outdated -s https://somewhere/out/there + choco outdated -s "'https://somewhere/protected'" -u user -p pass +~~~ + + +If you use `--source=https://somewhere/out/there`, it is + going to look for outdated packages only based on that source, so + you may want to add `--ignore-unfound` to your options. + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Enhanced: + - 0: no outdated packages + - -1 or 1: an error has occurred + - 2: outdated packages have been found (enhanced) + +> :choco-info: **NOTE** +> +> If you have the feature 'useEnhancedExitCodes' turned on, + then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## See It In Action + +![choco outdated](/images/gifs/choco_outdated.gif) + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source to find the package(s) to install. Special sources + include: ruby, cygwin, windowsfeatures, and python. To specify more than + one source, pass it with a semi-colon separating the values (e.g. + "'source1;source2'"). Defaults to default feeds. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + --ignore-pinned + Ignore Pinned - Ignore pinned packages. Defaults to false. + + --ignore-unfound + Ignore Unfound Packages - Ignore packages that are not found on the + sources used (or the defaults). Overrides the default feature + 'ignoreUnfoundPackagesOnUpgradeOutdated' set to 'False'. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When + disabled, this makes queries similar to the way they were done in + earlier versions of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco outdated -h`. + + diff --git a/src/content/docs/en-us/choco/commands/pin.mdx b/src/content/docs/en-us/choco/commands/pin.mdx new file mode 100644 index 00000000000..3a0ce9b5bea --- /dev/null +++ b/src/content/docs/en-us/choco/commands/pin.mdx @@ -0,0 +1,210 @@ +--- +order: 110 +xref: choco-command-pin +title: Pin +description: Pin Command (choco pin) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Pin Command (choco pin) + +Pin a package to suppress upgrades. + +This is especially helpful when running for all + packages, as it will automatically skip those packages. Another + alternative is `choco upgrade --except="pkg1,pk2"`. + +## Usage + +~~~ + choco pin [list]|add|remove [] +~~~ + + +## Examples + +~~~ + choco pin + choco pin list + choco pin add -n git + choco pin add --name="'git'" --version="'1.2.3'" + choco pin add --name="'git'" --version="'1.2.3'" --reason="'reasons available in business editions only'" + choco pin remove --name="'git'" +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + Name - the name of the package. Required with some actions. Defaults to + empty. + + --version=VALUE + Version - Used when multiple versions of a package are installed. + Defaults to empty. + + --reason, --pin-reason, --note=VALUE + Pin Reason - Text information about why you are setting a pin. Available + in business editions. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco pin -h`. + + diff --git a/src/content/docs/en-us/choco/commands/search.mdx b/src/content/docs/en-us/choco/commands/search.mdx new file mode 100644 index 00000000000..aba4de7beaa --- /dev/null +++ b/src/content/docs/en-us/choco/commands/search.mdx @@ -0,0 +1,294 @@ +--- +order: 120 +xref: choco-command-search +title: Search +description: Search Command (choco search) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySearchCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Search Command (choco search) + +Chocolatey will perform a search for a package local or remote. + +## Usage + +~~~ + choco find [] + choco search [] +~~~ + + +## Examples + +~~~ + choco search git + choco search git --source="'https://somewhere/out/there'" + choco search bob -s "'https://somewhere/protected'" -u user -p pass + choco search --page=0 --page-size=25 + choco search 7zip --all-versions --exact +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Enhanced: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: no results (enhanced) + +> :choco-info: **NOTE** +> +> If you have the feature 'useEnhancedExitCodes' turned on, + then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## See It In Action + +![choco search](/images/gifs/choco_search.gif) + + +## Alternative Sources +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - Source location for install. Can use special 'windowsfeatures', + 'ruby', 'cygwin', or 'python' sources. Defaults to sources. + + --idonly, --id-only + Id Only - Only return Package Ids in the list results. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + -i, --includeprograms, --include-programs + IncludePrograms - Filters out apps Chocolatey has listed as packages and + includes those in the list. Defaults to false. + + -a, --all, --allversions, --all-versions + AllVersions - include results from all versions. + + --version=VALUE + Version - Specific version of a package to return. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --page=VALUE + Page - the 'page' of results to return. Defaults to return all results. + + --page-size=VALUE + Page Size - the amount of packages to return in each page of results. + NOTE: this value is per source. Defaults to 25 for each source that is + included in query. + + -e, --exact + Exact - Only return packages with this exact name. + + --by-id-only + ByIdOnly - Only return packages where the id contains the search filter. + + --by-tag-only, --by-tags-only + ByTagOnly - Only return packages where the search filter matches on the + tags. + + --id-starts-with + IdStartsWith - Only return packages where the id starts with the search + filter. + + --order-by-popularity + OrderByPopularity - Sort by package results by popularity. + + --approved-only + ApprovedOnly - Only return approved packages - this option will filter + out results not from the [community repository](https://community.chocolatey.org/packages). + + --download-cache, --download-cache-only + DownloadCacheAvailable - Only return packages that have a download cache + available - this option will filter out results not from the community + repository. + + --not-broken + NotBroken - Only return packages that are not failing testing - this + option only filters out failing results from the [community feed](https://community.chocolatey.org/packages). It will + not filter against other sources. + + --detail, --detailed + Detailed - Alias for verbose. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When + disabled, this makes queries similar to the way they were done in + earlier versions of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco search -h`. + + diff --git a/src/content/docs/en-us/choco/commands/setapikey.mdx b/src/content/docs/en-us/choco/commands/setapikey.mdx new file mode 100644 index 00000000000..53caa6d3957 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/setapikey.mdx @@ -0,0 +1,230 @@ +--- +order: 130 +xref: choco-command-setapikey +title: SetApiKey +description: SetApiKey Command (choco setapikey) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySetApiKeyCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# ApiKey Command (choco setapikey) + +This lists API keys that are set or sets an api key for a particular + source so it doesn't need to be specified every time. + +Anything that doesn't contain source and key will list API keys. + +## Usage + +~~~ + choco apikey [] + choco setapikey [] +~~~ + + +## Examples + +~~~ + choco apikey + choco apikey -s https://somewhere/out/there + choco apikey list + choco apikey list -s https://somewhere/out/there + choco apikey add -s="https://somewhere/out/there/" -k="value" + choco apikey add -s "https://push.chocolatey.org/" -k="123-123123-123" + choco apikey add -s "http://internal_nexus" -k="user:password" + choco apikey remove -s https://somewhere/out/there +~~~ + + +For source location, this can be a folder/file share or an +http location. When it comes to urls, they can be different from the packages +url (where packages are searched and installed from). As an example, for +Chocolatey's community package package repository, the package url is +https://community.chocolatey.org/api/v2/, but the push url is https://push.chocolatey.org +(and the deprecated https://chocolatey.org/ as a push url). Check the +documentation for your choice of repository to learn what the push url is. + +For the key, this can be an apikey that is provided by your source repository. +With some sources, like Nexus, this can be a NuGet API key or it could be a +user name and password specified as 'user:password' for the API key. Please see +your repository's documentation (for Nexus, please see +https://ch0.co/nexus2apikey). + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Connecting to Chocolatey.org (Community Package Repository) + +In order to save your API key for https://push.chocolatey.org/, + log in (or register, confirm and then log in) to + https://push.chocolatey.org/, go to https://push.chocolatey.org/account, + copy the API Key, and then use it in the following command: + +~~~ + choco apikey add -k -s https://push.chocolatey.org/ +~~~ + + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, apikey already set (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source [REQUIRED] - The source location for the key + + -k, --key, --apikey, --api-key=VALUE + ApiKey - The API key for the source. This is the authentication that + identifies you and allows you to push to a source. With some sources + this is either a key or it could be a user name and password specified + as 'user:password'. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco setapikey -h`. + + diff --git a/src/content/docs/en-us/choco/commands/source.mdx b/src/content/docs/en-us/choco/commands/source.mdx new file mode 100644 index 00000000000..05aeefddce5 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/source.mdx @@ -0,0 +1,242 @@ +--- +order: 140 +xref: choco-command-source +title: Source +description: Source Command (choco source) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySourceCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Source Command (choco source) + +Chocolatey will allow you to interact with sources. + +## Usage + +~~~ + choco source [list]|add|remove|disable|enable [] + choco sources [list]|add|remove|disable|enable [] +~~~ + + +## Examples + +~~~ + choco source + choco source list + choco source add -n=bob -s="https://somewhere/out/there/api/v2/" + choco source add -n=bob -s "'https://somewhere/out/there/api/v2/'" -cert=\Users\bob\bob.pfx + choco source add -n=bob -s "'https://somewhere/out/there/api/v2/'" -u=bob -p=12345 + choco source disable -n=bob + choco source enable -n=bob + choco source remove -n=bob +~~~ + + +When it comes to the source location, this can be a folder/file share or an http +location. If it is a url, it will be a location you can go to in a browser and +it returns OData with something that says Packages in the browser, similar to +what you see when you go to https://community.chocolatey.org/api/v2/. + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + Name - the name of the source. Required with actions other than list. + Defaults to empty. + + -s, --source=VALUE + Source - The source. This can be a folder/file share or an http locatio- + n. If it is a url, it will be a location you can go to in a browser and + it returns OData with something that says Packages in the browser, + similar to what you see when you go to https://community.chocolate- + y.org/api/v2/. Required with add action. Defaults to empty. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Encrypted in chocolate- + y.config file. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --priority=VALUE + Priority - The priority order of this source as compared to other + sources, lower is better. Defaults to 0 (no priority). All priorities + above 0 will be evaluated first, then zero-based values will be + evaluated in config file order. + + --bypassproxy, --bypass-proxy + Bypass Proxy - Should this source explicitly bypass any explicitly or + system configured proxies? Defaults to false. + + --allowselfservice, --allow-self-service + Allow Self-Service - Should this source be allowed to be used with self- + service? Requires business edition (v1.10.0+) with feature + 'useBackgroundServiceWithSelfServiceSourcesOnly' turned on. Defaults to + false. + + --adminonly, --admin-only + Visible to Administrators Only - Should this source be visible to non- + administrators? Requires business edition (v1.12.2+). Defaults to false. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco source -h`. + + diff --git a/src/content/docs/en-us/choco/commands/sources.mdx b/src/content/docs/en-us/choco/commands/sources.mdx new file mode 100644 index 00000000000..aa7da309440 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/sources.mdx @@ -0,0 +1,242 @@ +--- +order: 150 +xref: choco-command-sources +title: Sources +description: Sources Command (choco sources) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySourcesCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Source Command (choco sources) + +Chocolatey will allow you to interact with sources. + +## Usage + +~~~ + choco source [list]|add|remove|disable|enable [] + choco sources [list]|add|remove|disable|enable [] +~~~ + + +## Examples + +~~~ + choco source + choco source list + choco source add -n=bob -s="https://somewhere/out/there/api/v2/" + choco source add -n=bob -s "'https://somewhere/out/there/api/v2/'" -cert=\Users\bob\bob.pfx + choco source add -n=bob -s "'https://somewhere/out/there/api/v2/'" -u=bob -p=12345 + choco source disable -n=bob + choco source enable -n=bob + choco source remove -n=bob +~~~ + + +When it comes to the source location, this can be a folder/file share or an http +location. If it is a url, it will be a location you can go to in a browser and +it returns OData with something that says Packages in the browser, similar to +what you see when you go to https://community.chocolatey.org/api/v2/. + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + Name - the name of the source. Required with actions other than list. + Defaults to empty. + + -s, --source=VALUE + Source - The source. This can be a folder/file share or an http locatio- + n. If it is a url, it will be a location you can go to in a browser and + it returns OData with something that says Packages in the browser, + similar to what you see when you go to https://community.chocolate- + y.org/api/v2/. Required with add action. Defaults to empty. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Encrypted in chocolate- + y.config file. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --priority=VALUE + Priority - The priority order of this source as compared to other + sources, lower is better. Defaults to 0 (no priority). All priorities + above 0 will be evaluated first, then zero-based values will be + evaluated in config file order. + + --bypassproxy, --bypass-proxy + Bypass Proxy - Should this source explicitly bypass any explicitly or + system configured proxies? Defaults to false. + + --allowselfservice, --allow-self-service + Allow Self-Service - Should this source be allowed to be used with self- + service? Requires business edition (v1.10.0+) with feature + 'useBackgroundServiceWithSelfServiceSourcesOnly' turned on. Defaults to + false. + + --adminonly, --admin-only + Visible to Administrators Only - Should this source be visible to non- + administrators? Requires business edition (v1.12.2+). Defaults to false. + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco sources -h`. + + diff --git a/src/content/docs/en-us/choco/commands/support.mdx b/src/content/docs/en-us/choco/commands/support.mdx new file mode 100644 index 00000000000..971252cea40 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/support.mdx @@ -0,0 +1,133 @@ +--- +order: 160 +xref: choco-command-support +title: Support +description: Support Command (choco support) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySupportCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Support Command (choco support) + +As a licensed customer, you can reach out to + our email for support. If you have phone support, you + may reach out during the hours that are listed in your support + contract. See https://chocolatey.org/support for details. + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco support -h`. + + diff --git a/src/content/docs/en-us/choco/commands/sync.mdx b/src/content/docs/en-us/choco/commands/sync.mdx new file mode 100644 index 00000000000..9448c2b98e3 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/sync.mdx @@ -0,0 +1,194 @@ +--- +order: 170 +xref: choco-command-sync +title: Sync +description: Sync Command (choco sync) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySyncCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Synchronize Command (choco sync) + +Business editions of Chocolatey only. + +Synchronizes against the system installed software that are not + installed as packages on Chocolatey. Searches through the system to + see software that has been installed and generates packages from that + software, baselines the packages against Chocolatey and makes the + packages available to upload to source. + +See https://docs.chocolatey.org/en-us/features/package-synchronization/ + + +## Usage + +~~~ + choco sync [] +~~~ + + +## Examples + +~~~ + choco sync + choco sync --id=putty + choco sync --id=putty --package-id=putty +~~~ + + +## See It In Action + +Coming soon + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + downloading multiple packages, and you use `--version=1.0.0`, it is + going to look for and try to download version 1.0.0 of every package + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --id=VALUE + Id - The Display Name from Programs and Features + + --packageid, --package-id=VALUE + PackageId - When used with Id, this will be the custom name for the + package. Business editions only. + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the generated Chocolatey + package file(s). If not specified, uses a subdirectory of the current + directory. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco sync -h`. + + diff --git a/src/content/docs/en-us/choco/commands/synchronize.mdx b/src/content/docs/en-us/choco/commands/synchronize.mdx new file mode 100644 index 00000000000..fe049fd122e --- /dev/null +++ b/src/content/docs/en-us/choco/commands/synchronize.mdx @@ -0,0 +1,194 @@ +--- +order: 180 +xref: choco-command-synchronize +title: Synchronize +description: Synchronize Command (choco synchronize) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateySynchronizeCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Synchronize Command (choco synchronize) + +Business editions of Chocolatey only. + +Synchronizes against the system installed software that are not + installed as packages on Chocolatey. Searches through the system to + see software that has been installed and generates packages from that + software, baselines the packages against Chocolatey and makes the + packages available to upload to source. + +See https://docs.chocolatey.org/en-us/features/package-synchronization/ + + +## Usage + +~~~ + choco sync [] +~~~ + + +## Examples + +~~~ + choco sync + choco sync --id=putty + choco sync --id=putty --package-id=putty +~~~ + + +## See It In Action + +Coming soon + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + downloading multiple packages, and you use `--version=1.0.0`, it is + going to look for and try to download version 1.0.0 of every package + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --id=VALUE + Id - The Display Name from Programs and Features + + --packageid, --package-id=VALUE + PackageId - When used with Id, this will be the custom name for the + package. Business editions only. + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the generated Chocolatey + package file(s). If not specified, uses a subdirectory of the current + directory. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco synchronize -h`. + + diff --git a/src/content/docs/en-us/choco/commands/uninstall.mdx b/src/content/docs/en-us/choco/commands/uninstall.mdx new file mode 100644 index 00000000000..98a9627012e --- /dev/null +++ b/src/content/docs/en-us/choco/commands/uninstall.mdx @@ -0,0 +1,349 @@ +--- +order: 190 +xref: choco-command-uninstall +title: Uninstall +description: Uninstall Command (choco uninstall) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Uninstall Command (choco uninstall) + +Uninstalls a package or a list of packages. + +Chocolatey automatically tracks registry changes for "Programs and + Features" of the underlying software's native installers when + installing packages. The "Automatic Uninstaller" (auto uninstaller) + service is a feature that can use that information to automatically + determine how to uninstall these natively installed applications. This + means that a package may not need an explicit chocolateyUninstall.ps1 + to reverse the installation done in the install script. + +Chocolatey tracks packages, which are the files in + `$env:ChocolateyInstall\lib\packagename`. These packages may or may not + contain the software (applications/tools) that each package represents. + The software may actually be installed in Program Files (most native + installers will install the software there) or elsewhere on the + machine. + +With auto uninstaller turned off, a chocolateyUninstall.ps1 is required + to perform uninstall from the system. In the absence of + chocolateyUninstall.ps1, choco uninstall only removes the package from + Chocolatey but does not remove the software from your system (unless + in the package directory). + +> :choco-info: **NOTE** +> +> A package with a failing uninstall can be removed with the +`-n --skipautouninstaller` flags. This will remove the package from +chocolatey without attempting to uninstall the program. + +> :choco-info: **NOTE** +> +> [Chocolatey Pro](https://chocolatey.org/compare) / Business automatically synchronizes with + Programs and Features, ensuring manually removed apps are + automatically removed from Chocolatey's repository. + +> :choco-info: **NOTE** +> +> Synchronizer and AutoUninstaller enhancements in licensed + versions of Chocolatey ensure that Autouninstaller is up to 95% + effective at removing software without an uninstall script. This is + because synchronizer ensures the registry snapshot stays up to date + and licensed enhancements have the ability to inspect more locations + to determine how to automatically uninstall software. + +## Usage + +~~~ + choco uninstall [pkg2 pkgN] [options/switches] +~~~ + + +> :choco-info: **NOTE** +> +> `all` is a special package keyword that will allow you to + uninstall all packages. + + +## See It In Action + +![choco uninstall](/images/gifs/choco_uninstall.gif) + + +## Examples + +~~~ + choco uninstall git + choco uninstall notepadplusplus googlechrome atom 7zip + choco uninstall notepadplusplus googlechrome atom 7zip -dv + choco uninstall ruby --version 1.8.7.37402 + choco uninstall nodejs.install --all-versions +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +Package Exit Codes: + - 1605: software is not installed + - 1614: product is uninstalled + - 1641: success, reboot initiated + - 3010: success, reboot required + - other (not listed): likely an error has occurred + +In addition to normal exit codes, packages are allowed to exit + with their own codes when the feature 'usePackageExitCodes' is + turned on. + +Reboot Exit Codes: + - 350: pending reboot detected, no action has occurred + - 1604: install suspended, incomplete + +In addition to the above exit codes, you may also see reboot exit codes + when the feature 'exitOnRebootDetected' is turned on. It typically requires + the feature 'usePackageExitCodes' to also be turned on to work properly. + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source to find the package(s) to install. Special sources + include: ruby, cygwin, windowsfeatures, and python. Defaults to default + feeds. + + --version=VALUE + Version - A specific version to uninstall. Defaults to unspecified. + + -a, --allversions, --all-versions + AllVersions - Uninstall all versions? Defaults to false. + + --ua, --uninstallargs, --uninstallarguments, --uninstall-arguments=VALUE + UninstallArguments - Uninstall Arguments to pass to the native installer + in the package. Defaults to unspecified. + + -o, --override, --overrideargs, --overridearguments, --override-arguments + OverrideArguments - Should uninstall arguments be used exclusively + without appending to current package passed arguments? Defaults to false. + + --notsilent, --not-silent + NotSilent - Do not uninstall this silently. Defaults to false. + + --params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE + PackageParameters - Parameters to pass to the package. Defaults to + unspecified. + + --argsglobal, --args-global, --installargsglobal, --install-args-global, --applyargstodependencies, --apply-args-to-dependencies, --apply-install-arguments-to-dependencies + Apply Install Arguments To Dependencies - Should install arguments be + applied to dependent packages? Defaults to false. + + --paramsglobal, --params-global, --packageparametersglobal, --package-parameters-global, --applyparamstodependencies, --apply-params-to-dependencies, --apply-package-parameters-to-dependencies + Apply Package Parameters To Dependencies - Should package parameters be + applied to dependent packages? Defaults to false. + + -x, --forcedependencies, --force-dependencies, --removedependencies, --remove-dependencies + RemoveDependencies - Uninstall dependencies when uninstalling package(s- + ). Defaults to false. + + -n, --skippowershell, --skip-powershell, --skipscripts, --skip-scripts, --skip-automation-scripts + Skip PowerShell - Do not run chocolateyUninstall.ps1. Defaults to false. + + --ignorepackagecodes, --ignorepackageexitcodes, --ignore-package-codes, --ignore-package-exit-codes + IgnorePackageExitCodes - Exit with a 0 for success and 1 for non-succes- + s, no matter what package scripts provide for exit codes. Overrides the + default feature 'usePackageExitCodes' set to 'True'. + + --usepackagecodes, --usepackageexitcodes, --use-package-codes, --use-package-exit-codes + UsePackageExitCodes - Package scripts can provide exit codes. Use those + for choco's exit code when non-zero (this value can come from a + dependency package). Chocolatey defines valid exit codes as 0, 1605, + 1614, 1641, 3010. Overrides the default feature 'usePackageExitCodes' + set to 'True'. + + --autouninstaller, --use-autouninstaller + UseAutoUninstaller - Use auto uninstaller service when uninstalling. + Overrides the default feature 'autoUninstaller' set to 'True'. + + --skipautouninstaller, --skip-autouninstaller + SkipAutoUninstaller - Skip auto uninstaller service when uninstalling. + Overrides the default feature 'autoUninstaller' set to 'True'. + + --failonautouninstaller, --fail-on-autouninstaller + FailOnAutoUninstaller - Fail the package uninstall if the auto + uninstaller reports and error. Overrides the default feature + 'failOnAutoUninstaller' set to 'False'. + + --ignoreautouninstallerfailure, --ignore-autouninstaller-failure + Ignore Auto Uninstaller Failure - Do not fail the package if auto + uninstaller reports an error. Overrides the default feature + 'failOnAutoUninstaller' set to 'False'. + + --stoponfirstfailure, --stop-on-first-failure, --stop-on-first-package-failure + Stop On First Package Failure - stop running install, upgrade or + uninstall on first package failure instead of continuing with others. + Overrides the default feature 'stopOnFirstPackageFailure' set to 'False'. + + --exitwhenrebootdetected, --exit-when-reboot-detected + Exit When Reboot Detected - Stop running install, upgrade, or uninstall + when a reboot request is detected. Requires 'usePackageExitCodes' + feature to be turned on. Will exit with either 350 or 1604. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --ignoredetectedreboot, --ignore-detected-reboot + Ignore Detected Reboot - Ignore any detected reboots if found. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --skiphooks, --skip-hooks + Skip hooks - Do not run hook scripts. Available in 1.2.0+ + + --fromprograms, --from-programs, --fromprogramsandfeatures, --from-programs-and-features + From Programs and Features - Uninstalls a program from programs and + features. Name used for id must be a match or a wildcard (*) to Display + Name in Programs and Features. Available in [licensed editions](https://chocolatey.org/compare) only. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco uninstall -h`. + + diff --git a/src/content/docs/en-us/choco/commands/unpackself.mdx b/src/content/docs/en-us/choco/commands/unpackself.mdx new file mode 100644 index 00000000000..717c4fbda31 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/unpackself.mdx @@ -0,0 +1,154 @@ +--- +order: 200 +xref: choco-command-unpackself +title: UnpackSelf +description: UnpackSelf Command (choco unpackself) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyUnpackSelfCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# [DEPRECATED] UnpackSelf Command (choco unpackself) + +> :choco-info: **NOTE** +> +> Unpackself has been deprecated and will be removed in version 3.0.0. + +This will unpack files needed by choco. It will overwrite existing + files only if --force is specified. + +> :choco-info: **NOTE** +> +> This command should only be used when installing Chocolatey, not + during normal operation. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco unpackself -h`. + + diff --git a/src/content/docs/en-us/choco/commands/upgrade.mdx b/src/content/docs/en-us/choco/commands/upgrade.mdx new file mode 100644 index 00000000000..f794c55c7d2 --- /dev/null +++ b/src/content/docs/en-us/choco/commands/upgrade.mdx @@ -0,0 +1,531 @@ +--- +order: 220 +xref: choco-command-upgrade +title: Upgrade +description: Upgrade Command (choco upgrade) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Upgrade Command (choco upgrade) + +Upgrades a package or a list of packages. If you do not have a package + installed, upgrade will install it. + +## Usage + +~~~ + choco upgrade [ ] [] +~~~ + + +> :choco-info: **NOTE** +> +> `all` is a special package keyword that will allow you to upgrade + all currently installed packages. + +Skip upgrading certain packages with or with the option + `--except`. + +> :choco-info: **NOTE** +> +> [Chocolatey Pro](https://chocolatey.org/compare) / Business automatically synchronizes with + Programs and Features, ensuring automatically updating apps' versions + (like Chrome) are up to date in Chocolatey's repository. + +## Examples + +~~~ + choco upgrade chocolatey + choco upgrade notepadplusplus googlechrome atom 7zip + choco upgrade notepadplusplus googlechrome atom 7zip -dvfy + choco upgrade git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'" + choco upgrade git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'" --install-args="'/DIR=C:\git'" + # Params are package parameters, passed to the package + # Install args are installer arguments, appended to the silentArgs + # in the package for the installer itself + choco upgrade nodejs.install --version 0.10.35 + choco upgrade git -s "'https://somewhere/out/there'" + choco upgrade git -s "'https://somewhere/protected'" -u user -p pass + choco upgrade all + choco upgrade all --except="'skype,conemu'" +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, no packages outdated (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +Package Exit Codes: + - 1641: success, reboot initiated + - 3010: success, reboot required + - other (not listed): likely an error has occurred + +In addition to normal exit codes, packages are allowed to exit + with their own codes when the feature 'usePackageExitCodes' is + turned on. Uninstall command has additional valid exit codes. + +Reboot Exit Codes: + - 350: pending reboot detected, no action has occurred + - 1604: install suspended, incomplete + +In addition to the above exit codes, you may also see reboot exit codes + when the feature 'exitOnRebootDetected' is turned on. It typically requires + the feature 'usePackageExitCodes' to also be turned on to work properly. + +## See It In Action + +![choco upgrade](/images/gifs/choco_upgrade.gif) + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes (included below for completeness). + +~~~ + + + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source to find the package(s) to install. Special sources + include: ruby, cygwin, windowsfeatures, and python. To specify more than + one source, pass it with a semi-colon separating the values (e.g. + "'source1;source2'"). Defaults to default feeds. + + --version=VALUE + Version - A specific version to install. Defaults to unspecified. + + --pre, --prerelease + Prerelease - Include Prereleases? Defaults to false. + + --x86, --forcex86 + ForceX86 - Force x86 (32bit) installation on 64 bit systems. Defaults to + false. + + --ia, --installargs, --install-args, --installarguments, --install-arguments=VALUE + InstallArguments - Install Arguments to pass to the native installer in + the package. Defaults to unspecified. + + -o, --override, --overrideargs, --overridearguments, --override-arguments + OverrideArguments - Should install arguments be used exclusively without + appending to current package passed arguments? Defaults to false. + + --notsilent, --not-silent + NotSilent - Do not install this silently. Defaults to false. + + --params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE + PackageParameters - Parameters to pass to the package. Defaults to + unspecified. + + --argsglobal, --args-global, --installargsglobal, --install-args-global, --applyargstodependencies, --apply-args-to-dependencies, --apply-install-arguments-to-dependencies + Apply Install Arguments To Dependencies - Should install arguments be + applied to dependent packages? Defaults to false. + + --paramsglobal, --params-global, --packageparametersglobal, --package-parameters-global, --applyparamstodependencies, --apply-params-to-dependencies, --apply-package-parameters-to-dependencies + Apply Package Parameters To Dependencies - Should package parameters be + applied to dependent packages? Defaults to false. + + --allowdowngrade, --allow-downgrade + AllowDowngrade - Should an attempt at downgrading be allowed? Defaults + to false. + + -i, --ignoredependencies, --ignore-dependencies + IgnoreDependencies - Ignore dependencies when upgrading package(s). + Defaults to false. + + -n, --skippowershell, --skip-powershell, --skipscripts, --skip-scripts, --skip-automation-scripts + Skip PowerShell - Do not run chocolateyInstall.ps1. Defaults to false. + + --failonunfound, --fail-on-unfound + Fail On Unfound Packages - If a package is not found in sources + specified, fail instead of warn. + + --ignore-unfound + Ignore Unfound Packages - Ignore packages that are not found on the + sources used (or the defaults). Overrides the default feature + 'ignoreUnfoundPackagesOnUpgradeOutdated' set to 'False'. + + --failonnotinstalled, --fail-on-not-installed + Fail On Non-installed Packages - If a package is not already installed, + fail instead of installing. + + -u, --user=VALUE + User - used with authenticated feeds. Defaults to empty. + + -p, --password=VALUE + Password - the user's password to the source. Defaults to empty. + + --cert=VALUE + Client certificate - PFX pathname for an x509 authenticated feeds. + Defaults to empty. + + --cp, --certpassword=VALUE + Certificate Password - the client certificate's password to the source. + Defaults to empty. + + --ignorechecksum, --ignore-checksum, --ignorechecksums, --ignore-checksums + IgnoreChecksums - Ignore checksums provided by the package. Overrides + the default feature 'checksumFiles' set to 'True'. + + --allowemptychecksum, --allowemptychecksums, --allow-empty-checksums + Allow Empty Checksums - Allow packages to have empty/missing checksums + for downloaded resources from non-secure locations (HTTP, FTP). Use this + switch is not recommended if using sources that download resources from + the internet. Overrides the default feature 'allowEmptyChecksums' set to + 'False'. + + --allowemptychecksumsecure, --allowemptychecksumssecure, --allow-empty-checksums-secure + Allow Empty Checksums Secure - Allow packages to have empty checksums + for downloaded resources from secure locations (HTTPS). Overrides the + default feature 'allowEmptyChecksumsSecure' set to 'True'. + + --requirechecksum, --requirechecksums, --require-checksums + Require Checksums - Requires packages to have checksums for downloaded + resources (both non-secure and secure). Overrides the default feature + 'allowEmptyChecksums' set to 'False' and 'allowEmptyChecksumsSecure' set + to 'True'. + + --checksum, --downloadchecksum, --download-checksum=VALUE + Download Checksum - a user provided checksum for downloaded resources + for the package. Overrides the package checksum (if it has one). + Defaults to empty. + + --checksum64, --checksumx64, --downloadchecksumx64, --download-checksum-x64=VALUE + Download Checksum 64bit - a user provided checksum for 64bit downloaded + resources for the package. Overrides the package 64-bit checksum (if it + has one). Defaults to same as Download Checksum. + + --checksumtype, --checksum-type, --downloadchecksumtype, --download-checksum-type=VALUE + Download Checksum Type - a user provided checksum type. Overrides the + package checksum type (if it has one). Used in conjunction with Download + Checksum. Available values are 'md5', 'sha1', 'sha256' or 'sha512'. + Defaults to 'md5'. + + --checksumtype64, --checksumtypex64, --checksum-type-x64, --downloadchecksumtypex64, --download-checksum-type-x64=VALUE + Download Checksum Type 64bit - a user provided checksum for 64bit + downloaded resources for the package. Overrides the package 64-bit + checksum (if it has one). Used in conjunction with Download Checksum + 64bit. Available values are 'md5', 'sha1', 'sha256' or 'sha512'. + Defaults to same as Download Checksum Type. + + --ignorepackagecodes, --ignorepackageexitcodes, --ignore-package-codes, --ignore-package-exit-codes + IgnorePackageExitCodes - Exit with a 0 for success and 1 for non-succes- + s, no matter what package scripts provide for exit codes. Overrides the + default feature 'usePackageExitCodes' set to 'True'. + + --usepackagecodes, --usepackageexitcodes, --use-package-codes, --use-package-exit-codes + UsePackageExitCodes - Package scripts can provide exit codes. Use those + for choco's exit code when non-zero (this value can come from a + dependency package). Chocolatey defines valid exit codes as 0, 1605, + 1614, 1641, 3010. Overrides the default feature 'usePackageExitCodes' + set to 'True'. + + --except=VALUE + Except - a comma-separated list of package names that should not be + upgraded when upgrading 'all'. Overrides the configuration setting + 'upgradeAllExceptions' set to ''. + + --stoponfirstfailure, --stop-on-first-failure, --stop-on-first-package-failure + Stop On First Package Failure - stop running install, upgrade or + uninstall on first package failure instead of continuing with others. + Overrides the default feature 'stopOnFirstPackageFailure' set to 'False'. + + --skip-if-not-installed, --only-upgrade-installed, --skip-when-not-installed + Skip Packages Not Installed - if a package is not installed, do not + install it during the upgrade process. Overrides the default feature + 'skipPackageUpgradesWhenNotInstalled' set to 'False'. + + --install-if-not-installed + Install Missing Packages When Not Installed - if a package is not + installed, install it as part of running upgrade (typically default + behavior). Overrides the default feature + 'skipPackageUpgradesWhenNotInstalled' set to 'False'. + + --exclude-pre, --exclude-prerelease, --exclude-prereleases + Exclude Prerelease - Should prerelease be ignored for upgrades? Will be + ignored if you pass `--pre`. + + --userememberedargs, --userememberedarguments, --userememberedoptions, --use-remembered-args, --use-remembered-arguments, --use-remembered-options + Use Remembered Options for Upgrade - use the arguments and options used + during install for upgrade. Does not override arguments being passed at + runtime. Overrides the default feature + 'useRememberedArgumentsForUpgrades' set to 'False'. + + --ignorerememberedargs, --ignorerememberedarguments, --ignorerememberedoptions, --ignore-remembered-args, --ignore-remembered-arguments, --ignore-remembered-options + Ignore Remembered Options for Upgrade - ignore the arguments and options + used during install for upgrade. Overrides the default feature + 'useRememberedArgumentsForUpgrades' set to 'False'. + + --exitwhenrebootdetected, --exit-when-reboot-detected + Exit When Reboot Detected - Stop running install, upgrade, or uninstall + when a reboot request is detected. Requires 'usePackageExitCodes' + feature to be turned on. Will exit with either 350 or 1604. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --ignoredetectedreboot, --ignore-detected-reboot + Ignore Detected Reboot - Ignore any detected reboots if found. Overrides + the default feature 'exitOnRebootDetected' set to 'False'. + + --disable-repository-optimizations, --disable-package-repository-optimizations + Disable Package Repository Optimizations - Do not use optimizations for + reducing bandwidth with repository queries during package + install/upgrade/outdated operations. Should not generally be used, + unless a repository needs to support older methods of query. When + disabled, this makes queries similar to the way they were done in + earlier versions of Chocolatey. Overrides the default feature + 'usePackageRepositoryOptimizations' set to 'True'. + + --pin, --pinpackage, --pin-package + Pin Package - Add a pin to the package after upgrade. Available in 1.2.0+ + + --skiphooks, --skip-hooks + Skip hooks - Do not run hook scripts. Available in 1.2.0+ + + --ignore-pinned + Ignore Pinned - Ignores any pins and upgrades the package(s) anyway. + Available in 2.3.0+ + + --include-configured-sources + Include Configured Sources - When using the '--source' option, this + appends the sources that have been saved into the chocolatey.config file + by 'source' command. Available in 2.3.0+ + + --sdc, --skipdownloadcache, --skip-download-cache + Skip Download Cache - Use the original download even if a private CDN + cache is available for a package. Overrides the default feature + 'downloadCache' set to 'True'. [Licensed editions](https://chocolatey.org/compare) only. See https://doc- + s.chocolatey.org/en-us/features/private-cdn + + --dc, --downloadcache, --download-cache, --use-download-cache + Use Download Cache - Use private CDN cache if available for a package. + Overrides the default feature 'downloadCache' set to 'True'. Licensed + editions only. See https://docs.chocolatey.org/en-us/features/private- + cdn + + --svc, --skipvirus, --skip-virus, --skipviruscheck, --skip-virus-check + Skip Virus Check - Skip the virus check for downloaded files on this ru- + n. Overrides the default feature 'virusCheck' set to 'False'. Licensed + editions only. See https://docs.chocolatey.org/en-us/features/virus- + check + + --virus, --viruscheck, --virus-check + Virus Check - check downloaded files for viruses. Overrides the default + feature 'virusCheck' set to 'False'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --viruspositivesmin, --virus-positives-minimum=VALUE + Virus Check Minimum Scan Result Positives - the minimum number of scan + result positives required to flag a package. Used when virusScannerType + is VirusTotal. Overrides the default configuration value + 'virusCheckMinimumPositives' set to '4'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/virus-check + + --install-arguments-sensitive=VALUE + InstallArgumentsSensitive - Install Arguments to pass to the native + installer in the package that are sensitive and you do not want logged. + Defaults to unspecified. [Licensed editions](https://chocolatey.org/compare) only. + + --package-parameters-sensitive=VALUE + PackageParametersSensitive - Package Parameters to pass the package that + are sensitive and you do not want logged. Defaults to unspecified. + [Licensed editions](https://chocolatey.org/compare) only. + + --dir, --directory, --installdir, --installdirectory, --install-dir, --install-directory=VALUE + Install Directory Override - Override the default installation director- + y. Chocolatey will automatically determine the type of installer and + pass the appropriate arguments to override the install directory. The + package must use Chocolatey install helpers and be installing an + installer for software. [Licensed editions](https://chocolatey.org/compare) only. See https://doc- + s.chocolatey.org/en-us/features/install-directory-override + + --bps, --maxdownloadrate, --max-download-rate, --maxdownloadbitspersecond, --max-download-bits-per-second, --maximumdownloadbitspersecond, --maximum-download-bits-per-second=VALUE + Maximum Download Rate Bits Per Second - The maximum download rate in + bits per second. '0' or empty means no maximum. A number means that will + be the maximum download rate in bps. Defaults to config setting of '0'. + Available in [licensed editions](https://chocolatey.org/compare) only. See https://docs.chocolatey.org/en- + us/features/package-throttle + + --reduce, --reduce-package-size, --deflate, --deflate-package-size + Reducer Installed Package Size (Package Reducer) - Reduce size of the + nupkg file to very small and remove extracted archives and installers. + Overrides the default feature 'reduceInstalledPackageSpaceUsage' set to + 'True'. [Licensed editions](https://chocolatey.org/compare) only. See https://docs.chocolatey.org/en- + us/features/package-reducer + + --no-reduce, --no-reduce-package-size, --no-deflate, --no-deflate-package-size + Do Not Reduce Installed Package Size - Leave the nupkg and files alone + in the package. Overrides the default feature + 'reduceInstalledPackageSpaceUsage' set to 'True'. [Licensed editions](https://chocolatey.org/compare) onl- + y. See https://docs.chocolatey.org/en-us/features/package-reducer + + --reduce-nupkg-only, --deflate-nupkg-only + Reduce Only Nupkg File Size - reduce only the size of nupkg file when + using Package Reducer. Overrides the default feature + 'reduceOnlyNupkgSize' set to 'False'. [Licensed editions](https://chocolatey.org/compare) only. See + https://docs.chocolatey.org/en-us/features/package-reducer + + --exclude-chocolatey-packages-during-upgrade-all + Exclude Chocolatey Packages During Upgrade All - When running the 'choco + upgrade all' command, do not upgrade any of the official Chocolatey + packages. Overrides the default feature + 'excludeChocolateyPackagesDuringUpgradeAll' set to 'False'. Licensed + editions only. + + --include-chocolatey-packages-during-upgrade-all + Include Chocolatey Package During Upgrade All - When running the 'choco + upgrade all' command, include all the official Chocolatey packages. + Overrides the default feature + 'excludeChocolateyPackagesDuringUpgradeAll' set to 'False'. Licensed + editions only. + + --reason, --pin-reason, --note=VALUE + Pin Reason - Text information about why you are setting a pin. Available + in business editions 5.0.0+. + + --use-self-service, --force-self-service + Force the command to be handled through the self-service when not + configured to allow this command. This option requires the features for + self-service and self-service command override to be enabled. Business + editions only (licensed version 5.0.0+). + +~~~ + + + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco upgrade -h`. + + diff --git a/src/content/docs/en-us/choco/features/http-caching.mdx b/src/content/docs/en-us/choco/features/http-caching.mdx new file mode 100644 index 00000000000..846fdebcf57 --- /dev/null +++ b/src/content/docs/en-us/choco/features/http-caching.mdx @@ -0,0 +1,51 @@ +--- +order: 10 +xref: choco-http-caching +title: HTTP Caching in Chocolatey CLI +description: Information about the HTTP caching functionality in Chocolatey CLI +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> HTTP Caching was introduced in Chocolatey CLI v2.0.0 and is unavailable to earlier versions. + +> :choco-warning: **WARNING** +> +> HTTP caching is still considered experimental and is subject to change in future versions of Chocolatey CLI. + +Chocolatey CLI introduces HTTP Caching to minimize the time taken for subsequent checks for the same packages when they need to be looked up multiple times as part of an install, upgrade, search, or checking for outdated packages. + +At the time of writing, only some things reaching out to Chocolatey/NuGet feeds are cached. In general, the only HTTP requests that Chocolatey CLI will cache are responses from the feeds for specific package versions or if we request all package versions. +This caching behavior occurs for both v2 and v3 API feeds. + +## Locations for HTTP Cache + +There are two locations where Chocolatey CLI will store HTTP caches. +This location will depend entirely on the context in which you are launching Chocolatey CLI. + +Suppose you launch Chocolatey CLI in an elevated context (As an administrator). In that case, the HTTP cache will be read and stored from `C:\ProgramData\ChocolateyHttpCache`. + +When you launch Chocolatey CLI in a non-elevated context, the HTTP cache will be read and stored underneath your user profile. This location will look similar to `C:\Users\\.chocolatey\http-cache` (**replace `` with your logged in username**). + +These two locations are entirely separate, and launching in an elevated context will not read the cache stored for non-elevated executions. Non-elevated executions will not read the cache from elevated executions. + +## HTTP Cache Expiration + +> :choco-warning: **WARNING** +> +> The time before HTTP cache expiration is likely to be changed in the future. + +Any created HTTP cache will be valid for 30 minutes. After this time has passed, any new requests made for the cached items will reach out to the appropriate feeds again and replace the expired cache with the new response. + +It is important to note that Chocolatey CLI will not remove any caches, but rather a request to the cached call replaces it. + +### What To Do if Experiencing Problems With Caching / Force Up To Date Requests + +It is necessary to make manual changes if you are experiencing problems with the caching solution or want to force Chocolatey CLI to get the latest up-to-date information. + +Suppose you are experiencing problems with the caching solution or want to force Chocolatey CLI to get the latest information. In that case, you will need to delete the cached data manually. Refer to [Locations for HTTP Cache](#locations-for-http-cache) to find the appropriate cache location for your use case. Removing all files in these locations will clear the cached data and prompt Chocolatey CLI to reach out to the relevant feeds when it next needs that data. + +> :choco-info: **NOTE** +> +> In a future version, we expect to add alternative methods to skip, ignore or clear the cache directories through Chocolatey CLI. diff --git a/src/content/docs/en-us/choco/features/index.mdx b/src/content/docs/en-us/choco/features/index.mdx new file mode 100644 index 00000000000..48ac22cca57 --- /dev/null +++ b/src/content/docs/en-us/choco/features/index.mdx @@ -0,0 +1,8 @@ +--- +order: 90 +xref: choco-features +title: Features +description: This is the main entry point for available features in Chocolatey CLI +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/choco/features/version-number-normalization.mdx b/src/content/docs/en-us/choco/features/version-number-normalization.mdx new file mode 100644 index 00000000000..bd1194a5f2f --- /dev/null +++ b/src/content/docs/en-us/choco/features/version-number-normalization.mdx @@ -0,0 +1,21 @@ +--- +order: 20 +xref: version-normalization +title: Version Number Normalization +description: Information about the version number normalization introduced in Chocolatey CLI 2.0.0. +--- +import Xref from '@components/Xref.astro'; + +The release of Chocolatey CLI 2.0.0 brought with it new semantic version number requirements. To comply with these new requirements, Chocolatey CLI will normalize version numbers to at least three parts, and remove leading zeroes. + +* Version numbers that have fewer than three parts will have missing parts added, as `0` (for example, `1.2` will be normalized to `1.2.0`). +* Version numbers that have four parts, will have the fourth part removed if it is `0` (for example, `1.0.0.0` will be normalized to `1.0.0`, but `1.0.0.1` will not). +* Version numbers that have leading zeroes in any part will have those leading zeroes removed (for example, `1.001.2` will be normalized to `1.1.2`). + +This normalization is applied to the generated package when using `choco pack` under Chocolatey CLI 2.x onwards, and will also affect any displayed versions of packages from remote sources. + +This is a change from how Chocolatey CLI 1.x worked with version numbers. + +## Special Consideration For Package Maintainers + +Many Chocolatey package scripts use the `$env:ChocolateyPackageVersion` environment variable. As version number normalization affects the package version number, the expected behaviour of the package may be affected. Our recommendation is to use a version number explicitly, rather than relying on the contents of `$env:ChocolateyPackageVersion`. See the for more information. diff --git a/src/content/docs/en-us/choco/index.mdx b/src/content/docs/en-us/choco/index.mdx new file mode 100644 index 00000000000..69a509d8091 --- /dev/null +++ b/src/content/docs/en-us/choco/index.mdx @@ -0,0 +1,8 @@ +--- +order: 90 +xref: choco +title: Chocolatey CLI (choco) +description: This is the main entry point for using Chocolatey, use choco.exe to install/upgrade packages +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/choco/new-in-v2.mdx b/src/content/docs/en-us/choco/new-in-v2.mdx new file mode 100644 index 00000000000..a6dfb0287a0 --- /dev/null +++ b/src/content/docs/en-us/choco/new-in-v2.mdx @@ -0,0 +1,119 @@ +--- +order: 15 +xref: choco-new-in-v2 +title: What's new in Chocolatey CLI v2.0.0 +description: A summary of the notable differences when upgrading from Chocolatey CLI v1.x to v2.0.0 +--- +import Xref from '@components/Xref.astro'; + +# What's New in Chocolatey CLI v2.0.0 + +> **Note** +> +> This is a high-level overview of what's new in Chocolatey CLI 2.0.0. If you are ready to upgrade, please read the . + +## NuGet v3 Feed Support + +You can now use NuGet v3 package feeds with Chocolatey CLI! +This allows users to work with package repositories that provide NuGet v3 feeds. +We will be adding NuGet v3 support to the Chocolatey Community Repository in the future. + +Listed below are some examples of repository managers that support NuGet v3 feeds, that you can start using with Chocolatey CLI v2.0.0 and later: + +- [GitHub Packages](https://github.com/features/packages) +- [ProGet](https://inedo.com/proget) +- [Sonatype Nexus](https://www.sonatype.com/products/sonatype-nexus-repository) +- [JFrog Artifactory](https://jfrog.com/artifactory/) + +## SemVer 2.0.0 Support + +Starting in v2.0.0, Chocolatey CLI supports SemVer 2.0.0, although it requires that all version number segments fit into the range `0-2147483647`. +This allows some additional prerelease package version variants like `1.0.1-alpha.23` (note the period in the prerelease tag following the hyphen, which was previously considered not valid for a version number) to be built with Chocolatey CLI. +For more information on SemVer 2.0.0, please see [the SemVer website](https://semver.org/spec/v2.0.0.html). + +> **Note** +> +> Most older version styles, like 4-part version numbers (`1.0.0.2`), are still supported. +> Chocolatey CLI v2.0.0 and later adopt NuGet's current versioning system. +> Any version numbers supported by NuGet are also supported by Chocolatey CLI. + +## Minimum Operating System Support Changes + +See our page for a full run-down. + +> **Note** +> +> To use the Chocolatey Community Repository with Windows Server 2008 R2 and 2012, you need to ensure the relevant patches are installed and registry entries configured to enable TLS v1.2 by default. + +## .NET Framework Uplift + +Chocolatey CLI v2.0.0 now requires .NET Framework 4.8. +When possible, the installation process will attempt to install .NET Framework 4.8 if it's not already present on the system. +However, installing .NET Framework 4.8 will require a reboot to be completed before Chocolatey CLI can be installed. + +For the smoothest upgrade experience, we recommend you install .NET Framework 4.8 and reboot before installing or upgrading to Chocolatey CLI v2.0.0. + +## API Key Subcommands + +The `choco apikey` syntax has changed. +The `--remove` option has been removed, and `add` / `remove` / `list` subcommands have been added. +For example: + +```powershell +choco apikey add --source "'https://source.url/api/v2/'" --key "'API_KEY_HERE'" +choco apikey list +choco apikey remove --source "'https://source.url/api/v2/'" +``` + +For backwards compatibility, omitting the subcommand retains its original behaviour: + +- `choco apikey` with no arguments defaults to `list`, listing stored API keys. +- `choco apikey --source "'https://source.url/api/v2/'" --key "'API_KEY_HERE'"` with both arguments defaults to `add`, adding a new API key. + +## Builtin Shims Removed + +For a long time Chocolatey CLI provided shortcuts for commands like `choco pack` (`cpack`) and `choco install` (`cinst`). +This has led to some conflicts with other software and we [deprecated these shortcuts, also called _shims_](https://github.com/chocolatey/choco/issues/2641). +We have now [removed them entirely](https://github.com/chocolatey/choco/issues/2642). + +If you miss that functionality, it is still possible to add these commands back as either batch files on the PATH, or PowerShell functions added to your profile. + +## The List Command Only Shows Local Packages + +Previously, Chocolatey CLI had three identical commands: `list`, `search`, and `find`. +In v2.0.0, `list` has become the command used for listing locally-installed packages, while `search` and `find` work with remote repositories. +For backwards compatibility, the `-lo` and `--local-only` flags are deprecated when using limited output `--limited-output`, with plans to remove them in Chocolatey CLI v3.0.0. +Usage without the `--limited-output` argument will return an error when `-lo` or `--local-only` is used. + +## Limits On Large Queries + +Chocolatey CLI will now impose a limit on the number of packages returned by the `list`, `find`, and `search` commands. +For local sources the limit is **10,000** packages, with remote sources being limited to **1,000**. +The default page size in both cases is **25**. +On reaching these limits, Chocolatey CLI will warn you to refine your query to get the results you need. + +## Added Options, Configurations, and Features + +- `--online` option added for commands' `--help`. + This will now take you to an online version of the command help. + For example, `choco install --help --online` will open the [Install command docs page](https://docs.chocolatey.org/en-us/choco/commands/install) in your default browser. +- `choco feature` now supports the `get` subcommand, which will show a single feature state. +- The `defaultPushSource` configuration option was added, which sets a default URL to push to when using `choco push`. + +## Removed Options and Features + +- Removed the deprecated side-by-side install functionality (aka `--allow-multiple`). +- Removed the deprecated default push location of `push.chocolatey.org`. + Use the new `defaultPushSource` configuration instead (see above). +- Removed deprecated configuration options for `cacheLocation` and `commandExecutionTimeoutSettings`. +- Only Chocolatey CLI configuration is shown for `choco config list`. + Use `choco feature list` to view features, and `choco apikey list` to view API key entries. +- [WebPi has been removed by Microsoft](https://github.com/chocolatey/choco/issues/2958) and the `--source webpi` alternative package source has been removed. +- Removed installing directly from a `nupkg` or `nuspec` file. + Use `choco install packagename -s ./local/path/to/folder` instead, and ensure packages are packed with `choco pack` before attempting to install them. +- Package version numbers will no longer retain leading zeroes in any parts of the version number when using `choco pack`. + For example, `09.00.001` will be normalized to `9.0.1`. + +## Ready To Upgrade? + +If you are ready to upgrade, please read our . diff --git a/src/content/docs/en-us/choco/release-notes.mdx b/src/content/docs/en-us/choco/release-notes.mdx new file mode 100644 index 00000000000..db00ab854c2 --- /dev/null +++ b/src/content/docs/en-us/choco/release-notes.mdx @@ -0,0 +1,2479 @@ +--- +order: 10 +xref: choco-release-notes +title: Release Notes +description: Release Notes for Chocolatey CLI +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-cli-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-cli-twitter.png +--- +import Xref from '@components/Xref.astro'; +import ChocolateyComponentDependenciesLink from '@components/docs/ChocolateyComponentDependenciesLink.mdx'; +import MaintenanceAndSupportLink from '@components/docs/MaintenanceAndSupportLink.mdx'; + +# Chocolatey Release Notes - Open Source + +This covers changes for the "chocolatey" and "chocolatey.lib" packages, which are available as FOSS. + +> :choco-info: **NOTE** +> +> For commercial editions, please also refer to . + + + + + + +## 2.2.2 (August 8, 2023) \{#august-8-2023} + +> :choco-warning: **WARNING** +> +> There is a bug in Chocolatey CLI v2.2.0 that prevents upgrading if you have a package dependency that only has pre-release versions (or if the package is no longer available on the sources that you have available). If you receive the error `Object reference not set to an instance of an object` please uninstall the package that only has pre-release versions available (or which no longer exists on the sources you have available), upgrade Chocolatey CLI, and re-install the package that was uninstalled. +> +> This [bug has been fixed](https://github.com/chocolatey/choco/issues/3292) in this release of Chocolatey CLI. + +> :choco-warning: **WARNING** +> +> Refer to our [Upgrade Guide](https://docs.chocolatey.org/en-us/guides/upgrading-to-chocolatey-v2-v6) for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fix + +- Fix - Unable to upgrade a package if a dependency only contains pre-release package versions, or if package no longer exists on available sources - see [#3292](https://github.com/chocolatey/choco/issues/3292). + + +## 2.2.1 (August 3, 2023) \{#august-3-2023} + +> :choco-warning: **WARNING** +> +> Chocolatey CLI 2.2.1 was removed from public availability due to a bug identified just prior to the release. + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fixes + +- Fix - Can't find `choco.exe` after upgrading Chocolatey CLI using the MSI - see [#3286](https://github.com/chocolatey/choco/issues/3286). +- Fix - Unable to do non-elevated operations when `cachelocation` is set to a restricted directory - see [#3291](https://github.com/chocolatey/choco/issues/3291). + +### Dependency Change + +- Update bundled 7zip executables to v23.01 - see [#3285](https://github.com/chocolatey/choco/issues/3285). + + +## 2.2.0 (July 26, 2023) \{#july-26-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fixes + +- Fix - Upgrading from Chocolatey CLI v2.0.0 to v2.1.0 take a long time to complete when certain other packages are installed - see [#3237](https://github.com/chocolatey/choco/issues/3237). +- Fix - Chocolatey CLI v2.0.0 prompts for credentials when authenticating to a source that is using Windows Authentication - see [#3242](https://github.com/chocolatey/choco/issues/3242). +- Fix - Chocolatey CLI is unable to save HTTP Cache files when running as a non-admin user and the `cachelocation` is set to point at the Chocolatey CLI ProgramData folder - see [#3264](https://github.com/chocolatey/choco/issues/3264). + +### Improvements + +- Remove warning message about "smarter than the average bear" - see [#3186](https://github.com/chocolatey/choco/issues/3186). +- Improve overall execution time when performing the `choco upgrade all` command - see [#3231](https://github.com/chocolatey/choco/issues/3231). +- Expand logging around the exception that is thrown when Chocolatey CLI is unable to communicate with a source - see [#3258](https://github.com/chocolatey/choco/issues/3258). +- Ensure that only Administrators are able to modify files that are stored within the ChocolateyHttpCache folder - see [#3281](https://github.com/chocolatey/choco/issues/3281). + +### Documentation + +- Apply scripting best practices to output which is shown from some Chocolatey CLI validations - see [#3238](https://github.com/chocolatey/choco/pull/3238). +- Improve error message that is shown when defaultPushSource configuration value hasn't been set and no explicit source has been provided - see [#3280](https://github.com/chocolatey/choco/pull/3280). + + +## 2.1.0 (June 29, 2023) \{#june-29-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fixes + +- Fix - Warning about threshold not shown for multiple sources - see [#3190](https://github.com/chocolatey/choco/issues/3190). +- Fix - System proxy settings (automatically detect settings) are no longer used in v2.0.0 - see [#3181](https://github.com/chocolatey/choco/issues/3181). +- Fix - Incorrect implementation of the `RuleIdEqualityComparer.Equals` method - see [#3182](https://github.com/chocolatey/choco/issues/3182). +- Fix - `choco pin remove -n packagename` removes pin for a different package - see [#3196](https://github.com/chocolatey/choco/issues/3196). +- Fix - Package version normalization is not being applied everywhere - see [#3174](https://github.com/chocolatey/choco/issues/3174). +- Fix - Chocolatey CLI tries to load the licensed environment settings when the licensed extension assembly is not supposed to be loaded - see [#3224](https://github.com/chocolatey/choco/issues/3224). +- Fix - Initial chocolatey.config configuration file is initialized with empty descriptions - see [#3201](https://github.com/chocolatey/choco/issues/3201). +- Fix - Chocolatey CLI does not use the `cachelocation` which is configured within the chocolatey.config file - see [#3225](https://github.com/chocolatey/choco/issues/3225). +- Fix - Checking for presence of Chocolatey license file in tab expansion PowerShell script generates `$error` - see [#3218](https://github.com/chocolatey/choco/issues/3218). + +### Improvements + +- Create PowerShell helper function to read config values - see [#2854](https://github.com/chocolatey/choco/issues/2854). +- Add command to allow purging of cached HTTP queries - see [#3194](https://github.com/chocolatey/choco/issues/3194). +- Provide option for Chocolatey CLI commands to skip cached query results - see [#3193](https://github.com/chocolatey/choco/issues/3193). +- Degraded performance after upgrading to version Chocolatey CLI v2.0.0 - see [#3183](https://github.com/chocolatey/choco/issues/3183). +- `choco search` command does not use previously cached results - see [#3125](https://github.com/chocolatey/choco/issues/3125). + +### Documentation + +- Update contributing documentation to be clearer for newcomers - see [#3108](https://github.com/chocolatey/choco/issues/3108). + + +## 2.1.0-alpha-20230614 (June 14, 2023) \{#alpha-20230614-june-14-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the alpha version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> The issue that was introduced in the previous alpha release regarding the open ended search query has been addressed in this alpha release. + +> :choco-info: **NOTE** +> +> Before installing this prerelease version, we would recommend that you read through the [Upgrade Instructions](https://docs.chocolatey.org/en-us/guides/upgrading-to-chocolatey-v2-v6) for moving to the major version of Chocolatey CLI. + +### Bug Fixes + +- Fix - Warning about threshold not shown for multiple sources - see [#3190](https://github.com/chocolatey/choco/issues/3190). +- Fix - System proxy settings (automatically detect settings) are no longer used in v2.0.0 - see [#3181](https://github.com/chocolatey/choco/issues/3181). +- Fix - Incorrect implementation of the `RuleIdEqualityComparer.Equals` method - see [#3182](https://github.com/chocolatey/choco/issues/3182). + +### Documentation + +- Update contributing documentation to be clearer for newcomers - see [#3108](https://github.com/chocolatey/choco/issues/3108). + + +## 2.1.0-alpha-20230608 (June 8, 2023) \{#alpha-20230608-june-8-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the alpha version of the Chocolatey Licensed Extension. + +### Known Issues + +There is a known issue when attempting to do an open ended search query where the Chocolatey Licensed feed is in place. For example, if you run the command `choco search --source chocolatey.licensed` you will get the following error message returned: + +> The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. + +A fix has been found for this problem, and will be released in a future alpha release. + +### Bug Fixes + +- Fix - `choco pin remove -n packagename` removes pin for a different package - see [#3196](https://github.com/chocolatey/choco/issues/3196). +- Fix - Package version normalization is not being applied everywhere - see [#3174](https://github.com/chocolatey/choco/issues/3174). + +### Improvements + +- Degraded performance after upgrading to version Chocolatey CLI v2.0.0 - see [#3183](https://github.com/chocolatey/choco/issues/3183). +- `choco search` command does not use previously cached results - see [#3125](https://github.com/chocolatey/choco/issues/3125). + + +## 2.0.0 (May 31, 2023) \{#may-31-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.0.0. + +### Breaking Changes + +- Change behavior of `choco list` to be local only - see [#158](https://github.com/chocolatey/choco/issues/158). +- Prevent usage of leading 0 in package version numbers - see [#1174](https://github.com/chocolatey/choco/issues/1174). +- `choco config list --limit-output` does not limit output as expected - see [#2013](https://github.com/chocolatey/choco/issues/2013). +- Remove `Get-BinRoot` Chocolatey helper function - see [#2623](https://github.com/chocolatey/choco/issues/2623). +- Remove the default push location when uploading/pushing packages - see [#2629](https://github.com/chocolatey/choco/issues/2629). +- Remove deprecated configurations from Config - see [#2630](https://github.com/chocolatey/choco/issues/2630). +- Remove deprecated Chocolatey shims (chocolatey, cinst, clist, cpush, cuninst, cup) - see [#2642](https://github.com/chocolatey/choco/issues/2642). +- Upgrade to target version 4.8 of the .NET Framework - see [#2738](https://github.com/chocolatey/choco/issues/2738). +- Fix spelling mistake in the `extract_binary_file_from_assembly` function - see [#2776](https://github.com/chocolatey/choco/issues/2776). +- Remove side-by-side installs - see [#2788](https://github.com/chocolatey/choco/issues/2788). +- Migrate from Rx-* packages to System.Reactive.* packages - see [#2896](https://github.com/chocolatey/choco/issues/2896). +- Switch to use only the recommended TLS versions without fallback to earlier insecure options - see [#2902](https://github.com/chocolatey/choco/issues/2902). +- Rename or migrate away from custom HashCode class - see [#2909](https://github.com/chocolatey/choco/issues/2909). +- Remove WebPI alternative source - see [#2980](https://github.com/chocolatey/choco/issues/2980). +- Remove the `--remove` option in `apikey` command and replace with `remove` subcommand - see [#2984](https://github.com/chocolatey/choco/issues/2984). +- `choco config list` should only include information about config - see [#2986](https://github.com/chocolatey/choco/issues/2986). +- Disallow passing in a path to a NUPKG file directly when installing/upgrading packages - see [#3008](https://github.com/chocolatey/choco/issues/3008). +- Introduce upper limit when querying for packages and warn when threshold is close to being hit - see [#3014](https://github.com/chocolatey/choco/issues/3014). + +### Bug Fixes + +- Fix - NuGet does not deal with blocking version conflicts from existing installed packages - see [#116](https://github.com/chocolatey/choco/issues/116). +- Fix - NuGet doesn't handle conflicts of versions in an install request when HighestVersion dependency - see [#507](https://github.com/chocolatey/choco/issues/507). +- Fix - Push command does not honor proxy settings - see [#1271](https://github.com/chocolatey/choco/issues/1271). +- Fix - Filenames that contain apostrophes aren't handled correctly when calculating checksums - see [#1590](https://github.com/chocolatey/choco/issues/1590). +- Fix - Chocolatey CLI does not override NuGet proxy with its own - see [#1720](https://github.com/chocolatey/choco/issues/1720). +- Fix - `choco pack` command fails with error on Linux when using file greater than 2 GB - see [#2278](https://github.com/chocolatey/choco/issues/2278). +- Fix - `choco info` command with no package id defined returns 0 packages found rather than provide a warning - see [#2899](https://github.com/chocolatey/choco/issues/2899). + +### Documentation + +- Fix broken URLs in repository README file - see [#2888](https://github.com/chocolatey/choco/pull/2888). +- Update Minimum Windows Server OS to Server 2008 R2 - see [#2903](https://github.com/chocolatey/choco/issues/2903). +- Update package files to reflect current Chocolatey Community Repository moderation requirements - see [#2920](https://github.com/chocolatey/choco/issues/2920). +- Fix typos and spelling errors - see [#2990](https://github.com/chocolatey/choco/pull/2990). + +### Improvements + +- Ability to specify a default source when doing `choco push` - see [#62](https://github.com/chocolatey/choco/issues/62). +- Upgrade to target version 3.1.0 of Chocolatey.NuGet.Client assemblies - see [#508](https://github.com/chocolatey/choco/issues/508). +- Support Semantic Versioning 2.0.0 (semver) - see [#1610](https://github.com/chocolatey/choco/issues/1610). +- `choco info` command doesn't show package URL - see [#1728](https://github.com/chocolatey/choco/issues/1728). +- Ensure that the client version used when querying a repository is the version of the underlying NuGet.Client library - see [#1935](https://github.com/chocolatey/choco/issues/1935). +- Alphabetically sort the output from the `feature` `config` `source` and `apikey` list command - see [#2814](https://github.com/chocolatey/choco/issues/2814). +- Add ability to get status of an individual feature (`choco feature get`) - see [#2815](https://github.com/chocolatey/choco/issues/2815). +- Provide ability to navigate directly to online version of help documentation for a command - see [#2867](https://github.com/chocolatey/choco/issues/2867). +- PowerShell tab completion should only show commands/options for currently installed license - see [#2887](https://github.com/chocolatey/choco/issues/2887). +- Adjust visibility / remove non-interface public methods on CygwinService - see [#3028](https://github.com/chocolatey/choco/issues/3028). +- MSI Build should be present in this repository - see [#3061](https://github.com/chocolatey/choco/issues/3061). +- Chocolatey products should no longer warn about possible errors when upgrading from versions before 1.0.0 - see [#3097](https://github.com/chocolatey/choco/issues/3097). +- Sort list of installed/upgraded packages - see [#3112](https://github.com/chocolatey/choco/issues/3112). + + +## 1.4.0 (May 10, 2023) \{#may-10-2023} + +### Bug Fix + +- Fix - When no hook scripts are installed you cannot install/upgrade a package on a system using PowerShell 2 - see [#3088](https://github.com/chocolatey/choco/issues/3088). + +### Improvement + +- Ensure the most recent version of Chocolatey-NuGet.Core package is being used - see [#3150](https://github.com/chocolatey/choco/issues/3150). + + +## 2.0.0-beta-20230426 (April 26, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the beta version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Change + +- Switch to use only the recommended TLS versions without fallback to earlier insecure options - see [#2902](https://github.com/chocolatey/choco/issues/2902). + +### Bug Fixes + +- Fix - `choco info` command with no package id defined returns 0 packages found rather than provide a warning - see [#2899](https://github.com/chocolatey/choco/issues/2899). +- Fix - Chocolatey CLI does not override NuGet proxy with its own - see [#1720](https://github.com/chocolatey/choco/issues/1720). +- Fix - Ensure that correct `count` query is used when querying oData feeds. + +### Improvements + +- PowerShell tab completion should only show commands/options for currently installed license - see [#2887](https://github.com/chocolatey/choco/issues/2887). +- Alphabetically sort the output from the `feature` `config` `source` and `apikey` list command - see [#2814](https://github.com/chocolatey/choco/issues/2814). +- Add explicit handling for `choco list -li` to provide backwards compatibility - related to [#158](https://github.com/chocolatey/choco/issues/158). +- Add ability to get status of an individual feature (`choco feature get`) - see [#2815](https://github.com/chocolatey/choco/issues/2815). +- Ensure that the client version used when querying a repository is the version of the underlying NuGet.Client library - see [#1935](https://github.com/chocolatey/choco/issues/1935). + + +## 2.0.0-beta-20230412 (April 12, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the beta version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Bug Fixes + +- Fix - Chocolatey CLI does not override NuGet proxy with its own - see [#1720](https://github.com/chocolatey/choco/issues/1720). +- Fix - When no hook scripts are installed you cannot install/upgrade a package on a system using PowerShell 2 - see [#3088](https://github.com/chocolatey/choco/issues/3088). +- Fix - Prevent install/upgrade failure when using multiple sources and one or more of them cannot be reached. + +### Improvements + +- Chocolatey products should no longer warn about possible errors when upgrading from versions before 1.0.0 - see [#3097](https://github.com/chocolatey/choco/issues/3097). +- All the different ways that a proxy can be configured (environment variables, chocolatey.config file, command arguments) have been tested and verified to work as expected. + + +## 2.0.0-beta-20230321 (March 21, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the beta version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Changes + +In addition to the breaking changes listed in the previous [alpha release](#alpha-20230221-february-21-2023) below, the following changes have been made: + +- `choco config list` should only include information about config - see [#2986](https://github.com/chocolatey/choco/issues/2986). +- Remove the `--remove` option in `choco apikey` command and replace with `remove` subcommand - see [#2984](https://github.com/chocolatey/choco/issues/2984). +- Remove WebPI alternative source - see [#2980](https://github.com/chocolatey/choco/issues/2980). +- Rename or migrate away from custom HashCode class - see [#2909](https://github.com/chocolatey/choco/issues/2909). +- Migrate from Rx-* packages to System.Reactive.* packages - see [#2896](https://github.com/chocolatey/choco/issues/2896). +- Remove side-by-side installs - see [#2788](https://github.com/chocolatey/choco/issues/2788). +- Fix spelling mistake in the extract_binary_file_from_assembly function - see [#2776](https://github.com/chocolatey/choco/issues/2776). +- Remove deprecated Chocolatey shims (`chocolatey`, `cinst`, `clist`, `cpush`, `cuninst`, `cup`) - see [#2642](https://github.com/chocolatey/choco/issues/2642). +- Remove deprecated configurations from Config - see [#2630](https://github.com/chocolatey/choco/issues/2630). +- Remove the default push location when uploading/pushing packages - see [#2629](https://github.com/chocolatey/choco/issues/2629). +- Remove `Get-BinRoot` Chocolatey helper function - see [#2623](https://github.com/chocolatey/choco/issues/2623). +- `choco config list --limit-output` does not limit output as expected - see [#2013](https://github.com/chocolatey/choco/issues/2013). +- Change default behavior of `choco list` to be local only - see [#158](https://github.com/chocolatey/choco/issues/158). + +### Improvements + +- Ability to specify a default source when doing `choco push` - see [#62](https://github.com/chocolatey/choco/issues/62). +- Remove re-instated Chocolatey commands which were added in v1.0.1 - see [#2678](https://github.com/chocolatey/choco/issues/2678). + + +## 1.3.1 (March 14, 2023) \{#march-14-2023} + +### Bug Fix + +- Fix - `chocolateyBeforeModify.ps1` does not get called for dependent packages - see [#1092](https://github.com/chocolatey/choco/issues/1092). + +## 2.0.0-alpha-20230307 (March 7, 2023) \{#alpha-20230307-march-7-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the alpha version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Bug Fixes + +- Fix - Fix `choco search` command that was providing invalid results when using the `--version` option. +- Fix - Fix dependency resolution problems during execution of `choco upgrade` and `choco install`. + +### Improvements + +- Add back support for the `--disable-repository-optimizations` option which was missing in previous alpha releases. +- Improvements made to warnings that are emitted when a dependency fails to be resolved during a `choco upgrade` or `choco install`. + + +## 2.0.0-alpha-20230221 (February 21, 2023) \{#alpha-20230221-february-21-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI **only** works with the alpha version of the Chocolatey Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Changes + +In addition to the breaking changes listed in the previous [alpha release](#alpha-20230124-january-24-2023) below, the following changes have been made: + +- Introduce upper limit when querying for packages and warn when threshold is close to being hit - see [3014](https://github.com/chocolatey/choco/issues/3014). +- Disallow passing in a path to a NUPKG file directly when installing/upgrading packages - see [3008](https://github.com/chocolatey/choco/issues/3008). + +### Improvement + +- Add back validation messages after upgrade to NuGet v3+ - see [3000](https://github.com/chocolatey/choco/issues/3000). + +### Documentation + +- Fix typos and spelling errors - see [2990](https://github.com/chocolatey/choco/pull/2990). + + +## [1.3.0](https://github.com/chocolatey/choco/milestone/59?closed=1) (February 15, 2023) \{#february-15-2023} + +### Deprecated Features + +- Deprecate WebPI alternative source - see [#2958](https://github.com/chocolatey/choco/issues/2958). +- Deprecate usage of direct path to nupkg or nuspec in `choco install` command - see [#2981](https://github.com/chocolatey/choco/issues/2981). +- Deprecate the `--remove` option in the apikey command - see [#2983](https://github.com/chocolatey/choco/issues/2983). +- Deprecate `choco config list` including output from features/sources/apikeys etc - see [#2985](https://github.com/chocolatey/choco/issues/2985). +- Deprecate unnecessary public methods on CygwinService - see [#3026](https://github.com/chocolatey/choco/issues/3026). + +### Bug Fixes + +- Fix - File not found error when using `--source=cygwin` to install packages - see [#2953](https://github.com/chocolatey/choco/issues/2953). + +## 2.0.0-alpha-20230124 (January 24, 2023) \{#alpha-20230124-january-21-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey CLI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey CLI does **NOT** work with the Chocolatey Licensed Extension. It will actually prevent the loading of the Chocolatey Licensed Extension if it is installed. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey CLI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Changes + +- Upgrade to target version 4.8 of the .NET Framework - see [#2738](https://github.com/chocolatey/choco/issues/2738). +- Prevent usage of leading 0 in package version numbers - see [#1174](https://github.com/chocolatey/choco/issues/1174). + +### Bugs + +- Fix - `choco pack` command fails with error on Linux when using a file greater than 2 GB - see [#2278](https://github.com/chocolatey/choco/issues/2278). +- Fix - Filenames that contain apostrophes aren't handled correctly when calculating checksums - see [#1590](https://github.com/chocolatey/choco/issues/1590). + +### Improvements + +- Upgrade to target version 6.4.0 of NuGet.Client assemblies - see [#508](https://github.com/chocolatey/choco/issues/508). +- Support Semantic Versioning 2.0.0 (semver) - see [#1610](https://github.com/chocolatey/choco/issues/1610). + +### Documentation + +- Fix broken URLs in repository README file - see [#2888](https://github.com/chocolatey/choco/pull/2888). +- Update package files to reflect current CCR moderation requirements - see [#2920](https://github.com/chocolatey/choco/issues/2920). + + +## [1.2.1](https://github.com/chocolatey/choco/milestone/58?closed=1) (December 6, 2022) \{#december-6-2022} + +### Bug Fixes + +- Fix - Running `choco new --file` returns "Cannot Combine Path" Error when Chocolatey Licensed Extension is installed and other assemblies are present in the extensions folder - see [#2865](https://github.com/chocolatey/choco/isFix - sues/2865) +- Fix - Selecting `[A] Yes to all` at package script prompt does not work correctly - see [#2872](https://github.com/chocolatey/choco/issues/2872) +- Fix - Attempting to upgrade multiple packages at once causes an error to be thrown about configuration backups - see [#2884](https://github.com/chocolatey/choco/issues/2884) + +## [1.2.0](https://github.com/chocolatey/choco/milestone/54?closed=1) (October 19, 2022) \{#october-19-2022} + +> :choco-info: **NOTE** +> +> As part of this release, we have added the functionality to allow officially signed extensions, other than Chocolatey Licensed Extension, to be loaded dynamically. See [#2693](https://github.com/chocolatey/choco/issues/2693). + +### Feature + +- Allow post/pre hooks to run on upgrade/install/uninstall - see [#1185](https://github.com/chocolatey/choco/issues/1185) + +### Deprecated Features + +- Deprecate side-by-side installs - see [#2787](https://github.com/chocolatey/choco/issues/2787) + +### Bug Fixes + +- Fix - Upgrade all reuses overridden package parameters when useRememberedArgumentsForUpgrades feature is turned on - see [#1443](https://github.com/chocolatey/choco/issues/1443) +- Fix - Wrong item set for overriding credentials when using remembered arguments during upgrade - see [#2752](https://github.com/chocolatey/choco/issues/2752) +- Fix - Python alternative source doesn't create arguments correctly due to spelling mistake - see [#2777](https://github.com/chocolatey/choco/issues/2777) +- Fix - Directory permissions not set when installed from PowerShell 7.2.5 - see [#2789](https://github.com/chocolatey/choco/issues/2789) + +### Improvements + +- [Security] Unable to extract files from nupkg when different file name encoding is used - see [#2816](https://github.com/chocolatey/choco/issues/2816) +- Add cmdlet for acquiring paths set in environment variables that should not be used directly - see [#2860](https://github.com/chocolatey/choco/issues/2860) +- Add support for the --pin option on the install and upgrade commands - see [#798](https://github.com/chocolatey/choco/issues/798) +- Packages.config should include all options (including ignorechecksums) - see [#886](https://github.com/chocolatey/choco/issues/886) +- Add option to skip file logging for Zip file extraction in the Get-ChocolateyUnZip and Install-ChocolateyZipPackage cmdlets - see [#1332](https://github.com/chocolatey/choco/issues/1332) +- List parameters in templates - see [#2500](https://github.com/chocolatey/choco/issues/2500) +- ChocolateyTabExpansion.ps1 can cause slow auto-complete in PowerShell - see [#2556](https://github.com/chocolatey/choco/issues/2556) +- Change source type on source runners to be a generic string - see [#2791](https://github.com/chocolatey/choco/issues/2791) +- Remove trailing semicolon in templates and tests - see [#2807](https://github.com/chocolatey/choco/issues/2807) + +### Documentation + +- Minor spelling errors in chocolatey/choco - see [#2465](https://github.com/chocolatey/choco/issues/2465) +- Update brand names - see [#2747](https://github.com/chocolatey/choco/pull/2747) + +## [1.1.0](https://github.com/chocolatey/choco/milestone/53?closed=1) (March 30, 2022) \{#march-30-2022} + +### Bug Fixes + +- Fix - Python alternate source does not handle `all` keyword correctly - see [#2540](https://github.com/chocolatey/choco/issues/2540) +- Fix - Incorrect error message is displayed when chocolatey.config becomes corrupt - see [#2525](https://github.com/chocolatey/choco/issues/2525) +- Fix - When running the `choco outdated` command the wrong exit code is shown when there is a pinned package and the `--ignore-pinned` option is being used - see [#1896](https://github.com/chocolatey/choco/issues/1896) +- Fix - Windows PowerShell incorrectly identifies a PowerShell file that is UTF8 encoded with a BOM as being signed if it is a single newline - see [#2663](https://github.com/chocolatey/choco/issues/2663) +- Fix - Unable to install Chocolatey using PowerShell Core - see [#2083](https://github.com/chocolatey/choco/issues/2083) + +### Improvements + +- Support installation checks for incompatible Licensed Extension when running `choco upgrade chocolatey` - see [#2659](https://github.com/chocolatey/choco/issues/2659) +- Support runtime checks for incompatible Chocolatey CLI and Chocolatey Licensed Extension versions - see [#2660](https://github.com/chocolatey/choco/issues/2660) + - When triggered, these checks will output a warning and the beginning of the command execution, and at the end of it. To acknowledge these warnings you can + either pass the `--skip-compatibility-checks` option when executing a command, or you can enable the `DisableCompatibilityChecks` feature using the following + command `choco feature enable --name="'disableCompatibilityChecks'"` +- Include the latest version of 7zip (v21.07) within Chocolatey installation - see [#2650](https://github.com/chocolatey/choco/issues/2650) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [1.0.1](https://github.com/chocolatey/choco/milestone/55?closed=1) (March 24, 2022) \{#march-24-2022} + +### Bug Fix + +- Fix - When Chocolatey CLI v1.0.0 attempts to load Chocolatey Licensed Extension versions less than v4.0.0, it halts execution with an unclear and unhelpful error message - see [#2656](https://github.com/chocolatey/choco/issues/2656) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [1.0.0](https://github.com/chocolatey/choco/milestone/50?closed=1) (March 21, 2022) \{#march-21-2022} + +> :choco-warning: **WARNING** +> +> If you are using a commercial version of Chocolatey (i.e. you have the chocolatey.extension package installed), you will need to **_first_** upgrade to version v4.0.0 of the . + +### Breaking Changes + +- Remove deprecated Chocolatey commands and shims - see [#2468](https://github.com/chocolatey/choco/issues/2468) +- Remove deprecated Chocolatey helper functions - see [#2469](https://github.com/chocolatey/choco/issues/2469) +- Remove the cpack command alias - see [#89](https://github.com/chocolatey/choco/issues/89) +- Remove the fallback to using old URL for Chocolatey Community Repository when pushing packages - see [#2628](https://github.com/chocolatey/choco/issues/2628) +- Remove deprecated -t argument for the push command - see [#2627](https://github.com/chocolatey/choco/issues/2627) +- Ensure that Chocolatey correctly handles removed features when running the choco feature command - see [#2538](https://github.com/chocolatey/choco/issues/2538) + +### Improvements + +- Update to use version v1.0.0 of shimgen - see [#2602](https://github.com/chocolatey/choco/issues/2602) +- Installation of Chocolatey should add a more descriptive comment when adding Chocolatey tab-completion module to profile - see [#2443](https://github.com/chocolatey/choco/issues/2443) + +### Documentation + +- Update deprecation notice for push command to mention that the default source will be removed in v2.0.0 - see [#2634](https://github.com/chocolatey/choco/issues/2634) +- Mark Chocolatey shims (chocolatey, cinst, clist, cpush, cuninst, cup) as deprecated - see [#2641](https://github.com/chocolatey/choco/issues/2641) +- Mark Get-BinRoot Chocolatey helper function as deprecated - see [#2470](https://github.com/chocolatey/choco/issues/2470) +- Add deprecation notices for all things that are set to change in v2.0.0 - see [#2462](https://github.com/chocolatey/choco/issues/2462) +- Provide better clarity regarding the license terms for using Chocolatey and shimgen - see [#2549](https://github.com/chocolatey/choco/issues/2549), [#2615](https://github.com/chocolatey/choco/issues/2615), and [2614](https://github.com/chocolatey/choco/issues/2614) +- Document the fact that the Source switch doesn't do anything when running the command choco list --lo - see [#2545](https://github.com/chocolatey/choco/issues/2545) +- Update warning that is shown regarding using a trial license of Chocolatey - see [#2407](https://github.com/chocolatey/choco/issues/2407) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.12.1](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.12.1) (January 25, 2022) \{#january-25-2022} + +### Bug Fixes + +- Fix - Installation of Chocolatey fails when running under "AllSigned" execution policy - see [#2539](https://github.com/chocolatey/choco/issues/2539) +- Fix - Output from "choco template -h" references wrong subcommand in usage statement - see [#2546](https://github.com/chocolatey/choco/issues/2546) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.12.0](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.12.0) (January 18, 2022) \{#january-18-2022} + +> :choco-warning: **WARNING** +> +> If you use Chocolatey Licensed Extension you will need to install v3.1.0 of Chocolatey Licensed Extension to use all the new functionality that has been added to Chocolatey CLI v0.12.0. + +### Breaking Change + +- Remove ScriptsCheckLastExitCode feature - see [#2522](https://github.com/chocolatey/choco/issues/2522) + +### Features + +- Add command (choco template) to retrieve information about currently installed package templates - see [#449](https://github.com/chocolatey/choco/issues/449) +- Add configuration option for default template name to be used in conjunction with the choco new command - see [#2377](https://github.com/chocolatey/choco/issues/2377) + +### Bug Fixes + +- Fix - Building a package on Linux fails if the description has encoded xml special character(s) - see [#2382](https://github.com/chocolatey/choco/issues/2382) +- Fix - Building a package on Linux fails if nuspec does not have files element - see [#2379](https://github.com/chocolatey/choco/issues/2379) +- Fix - choco pack command fails on non-Windows when the nupkg already exists - see [#2076](https://github.com/chocolatey/choco/issues/2076) +- Fix - Install location is invalid on Linux if the ChocolateyInstall environment variable is not set - see [#2370](https://github.com/chocolatey/choco/issues/2370) +- Fix - During upgrade, removal of old choco.exe does not use absolute path on Linux - see [#2369](https://github.com/chocolatey/choco/issues/2369) +- Fix - Attempting to use ProtectedData.Protect with LocalMachine scope fails when run on non-Windows system as a non-root user - see [#2437](https://github.com/chocolatey/choco/issues/2437) +- Fix - Chocolatey packaging script (chocolateyBeforeModify.ps1) incorrectly running on non-Windows platforms - see [#2510](https://github.com/chocolatey/choco/issues/2510) +- Fix - choco install command ignores install arguments when specifying direct path to nupkg - see [#2089](https://github.com/chocolatey/choco/issues/2089) +- Fix - Deleting NuGet temp folders fails when running on Linux - see [#2383](https://github.com/chocolatey/choco/issues/2383) + +### Improvements + +- Warn about unsupported packages when executing Chocolatey on non-Windows platforms - see [#2481](https://github.com/chocolatey/choco/issues/2481) +- Display install location for purely portable packages - see [#2241](https://github.com/chocolatey/choco/issues/2241) +- Provide more clarity on errors when attempting to push packages to Chocolatey Community Repository - see [#2007](https://github.com/chocolatey/choco/issues/2007) +- Support empty directories within Chocolatey template folder - [#1003](https://github.com/chocolatey/choco/issues/1003) +- Snapshotting of files and config transform has been enabled on non-Windows systems - see [#2450](https://github.com/chocolatey/choco/issues/2450) +- Prevent usage of alternate Chocolatey installation/upgrade sources on non-Windows systems - see [#2424](https://github.com/chocolatey/choco/issues/2424) +- Improve response message regarding moderation times when using choco push command - see [#2298](https://github.com/chocolatey/choco/issues/2298) + +### Documentation + +- Fix outdated bit.ly links in command documentation - see [#2401](https://github.com/chocolatey/choco/issues/2401) +- Update default template regarding building Chocolatey package on non-Windows systems - see [#2384](https://github.com/chocolatey/choco/issues/2384) +- Fix version number used in default template - see [#2381](https://github.com/chocolatey/choco/pull/2381) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.11.3](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.11.3) (October 27, 2021) \{#october-27-2021} + +### Bug Fixes + +- Fix - Chocolatey fails to load all PowerShell helper cmdlets when attempting to loads modules - see [#2412](https://github.com/chocolatey/choco/issues/2412) +- Fix - Chocolateys PowerShell Installer Module uses non PowerShell 2 compatible syntax - see [#2398](https://github.com/chocolatey/choco/issues/2398) +- Fix - Running Chocolatey CLI with an expired Chocolatey License can result in non-commercial commands failing to run - see [#2289](https://github.com/chocolatey/choco/issues/2289) +- Fix - Installing from packages.config doesn't support installing from other sources (e.g. windowsfeatures, python, etc) - see [#877](https://github.com/chocolatey/choco/issues/877) +- Fix - Quoted InstallLocation in .registry file results in errors when attempting to automatically uninstall application - see [#2336](https://github.com/chocolatey/choco/issues/2336) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.11.2](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.11.2) (September 23, 2021) \{#september-23-2021} + +### Bug Fix + +- Fix - Setting of Authorization header in Get-WebFile cmdlet does not work - see [#2374](https://github.com/chocolatey/choco/issues/2374) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.11.1](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.11.1) (September 2nd, 2021) \{#september-2nd-2021} + +### Bug Fix + +- Fix - Chocolatey Licensed Extension is not loaded into PowerShell process when using v0.11.0 - see [#2340](https://github.com/chocolatey/choco/issues/2340) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.11.0](https://github.com/chocolatey/choco/issues?q=is%3Aclosed+milestone%3A0.11.0) (September 2nd, 2021) \{#september-2nd-2021} + +> :choco-warning: **WARNING** +> +> If you use Chocolatey Licensed Extension you will need to install v2.2.0 of Chocolatey Licensed Extension to use all the new functionality that has been added to Chocolatey CLI v0.11.0. + +### Breaking Changes + +- Disable importing / loading of DLL in the extension folder - see [#2333](https://github.com/chocolatey/choco/issues/2333) +- choco list -e -a returns pre-releases even when --pre is not passed - see [#2304](https://github.com/chocolatey/choco/issues/2304) + +### Bug Fixes + +- Fix - Prevent creation of empty nuget.config in user appdata folder - see [#2233](https://github.com/chocolatey/choco/issues/2233) +- Fix - Upgrade all with remembered arguments changes packages to pre-release - see [#2111](https://github.com/chocolatey/choco/issues/2111) +- Fix - Software applications are being reported as not being managed by Chocolatey when their associated package is installed - see [#2092](https://github.com/chocolatey/choco/issues/2092) +- Fix - Unable to remove API Key with choco apikey command - see [#1889](https://github.com/chocolatey/choco/issues/1889) +- Fix - Not all package versions are returned when running running choco list --all-versions --exact - see [#1843](https://github.com/chocolatey/choco/issues/1843) +- Fix - Upgrade all reuses overridden package parameters when useRememberedArgumentsForUpgrades feature is turned on - see [#1443](https://github.com/chocolatey/choco/issues/1443) +- Fix - choco pack fails when running on Mono when current directory is not the same one that contains the .nuspec being packed - see [#2263](https://github.com/chocolatey/choco/issues/2263) +- Fix - Running choco pack on Mono on Linux will not include any files in .nupkg if there is no files element in the .nuspec - see [#2258](https://github.com/chocolatey/choco/issues/2258) +- Fix - Nuspec files with forward slash creates nested layer of directories when packed on Windows - see [#2166](https://github.com/chocolatey/choco/issues/2166) +- Fix - Prevent loading of Chocolatey GUI Licensed Extension assembly - see [#2078](https://github.com/chocolatey/choco/issues/2078) +- Fix - Working directory always being replaced with configured cache location when using Start-ChocolateyProcessAsAdmin - see [#2051](https://github.com/chocolatey/choco/issues/2051) +- Fix - Temp location can change unexpectedly when using System credentials - see [#2044](https://github.com/chocolatey/choco/issues/2044) +- Fix - Incorrect output regarding package files when package can't be found to be downloaded - see [#1962](https://github.com/chocolatey/choco/issues/1962) + +### Improvements + +- [Security] XML External Entity attack in log4net (CVE-2018-1285) - see [#2266](https://github.com/chocolatey/choco/issues/2266) +- Provide ability to export all currently installed packages to a packages.config file - see [#357](https://github.com/chocolatey/choco/issues/357) +- Provide ability to execute PowerShell script right before installation starts when using Install-ChocolateyPackage - see [#1060](https://github.com/chocolatey/choco/issues/1060) +- Add ChocolateyExitOnRebootDetected feature setting to environment variables for usage within package scripts - see [#1983](https://github.com/chocolatey/choco/issues/1983) +- Only search top level package folders when running the remove pending packages task - see [#1866](https://github.com/chocolatey/choco/issues/1866) +- Change default repository in the chocolatey.config to community.chocolatey.org - see [#2231](https://github.com/chocolatey/choco/issues/2231) +- Support UnzipLocation as an alias to Destination parameter in the Get-ChocolateyUnzip function - see [#2203](https://github.com/chocolatey/choco/issues/2203) +- API - Allow Lets.GetChocolatey to not initialize logging - see [#2124](https://github.com/chocolatey/choco/issues/2124) +- Provide ability to install msp patch files using Install-ChocolateyInstallPackage function - see [#2112](https://github.com/chocolatey/choco/issues/2112) +- Add ability to use authorization headers in the Get-WebFile function - see [#1998](https://github.com/chocolatey/choco/issues/1998) +- Ensure nuspec files generated from the choco new command use UTF-8 without a byte order mark - see [#1364](https://github.com/chocolatey/choco/issues/1364) +- Provide top level help command explaining what commands can be executed - see [#944](https://github.com/chocolatey/choco/issues/944) +- Ensure correct path separator in nuspec files is used on different operating systems - see [#502](https://github.com/chocolatey/choco/issues/502) +- Remove unused variable in uninstall template generated from choco new command - see [#2114](https://github.com/chocolatey/choco/issues/2114) + +### Documentation + +- Clarify the SpecificFolder parameter for helper functions - see [#2190](https://github.com/chocolatey/choco/issues/2190) +- Update deprecation notice to use outdated command when using version command - see [#2048](https://github.com/chocolatey/choco/issues/2048) +- Include information about --version option in choco help documentation - see [#2049](https://github.com/chocolatey/choco/issues/2049) +- Fix examples for Install-ChocolateyPackage function - see [#1899](https://github.com/chocolatey/choco/issues/1899) +- Terminology improvements in choco.exe help output - see [#1861](https://github.com/chocolatey/choco/issues/1861) +- Wrong error message shown when using Get-ChocolateyWebFile and forcex86 - see [#1859](https://github.com/chocolatey/choco/issues/1859) + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.10.15](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.15+is%3Aclosed) (June 3, 2019) \{#june-3-2019} + +### Bug Fix + +- Fix - list/search/info - searching with --exact or info results in Object reference not set to an instance of an object - see [#1837](https://github.com/chocolatey/choco/issues/1837) + +## [0.10.14](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.14+is%3Aclosed) (May 30, 2019) \{#may-30-2019} + +### Bug Fixes + +- Fix - feature - Turn off Enhanced Exit Codes by Default - see [#1784](https://github.com/chocolatey/choco/issues/1784) +- Fix - Reboot - Pending File Rename Operations check returns true, even after reboot - see [#1768](https://github.com/chocolatey/choco/issues/1768) +- Fix - ".registry.bad" files are created for actually valid registry snapshots - see [#1581](https://github.com/chocolatey/choco/issues/1581) +- Fix - repositories - Azure DevOps NuGet v2 endpoints don't provide metadata in Packages() queries - fails on "Authors is required." - see [#1771](https://github.com/chocolatey/choco/issues/1771) +- Fix - install/upgrade - Chocolatey still fails on failing source repositories - see [#1774](https://github.com/chocolatey/choco/issues/1774) +- Fix - Chocolatey remembers --forceX86 value with subsequent packages - see [#1772](https://github.com/chocolatey/choco/issues/1772) +- Fix - Get-ChocolateyUnzip / Start-ChocolateyProcessAsAdmin - can fail running a process when working directory is a UNC path - see [#1781](https://github.com/chocolatey/choco/issues/1781) +- Fix - Get-UninstallRegistryKey errors when registry keys have bracket characters(`[]`) - see [#1788](https://github.com/chocolatey/choco/issues/1788) +- Fix - push - Fix exception message "There was an internal server error, which might mean the package already exists on a Simple OData Server" / OutOfMemoryException - see [#1786](https://github.com/chocolatey/choco/issues/1786) + +### Improvements + +- info/search/list - apply query optimizations when searching by package id - see [#1831](https://github.com/chocolatey/choco/issues/1831) +- feature - usePackageRepositoryOptimizations to control install/upgrade for repositories that don't handle the newer optimizations well - optimizations break LaGet / NuGet Simple Server (PHP) / PHPNuget / Gemfury - see [#1770](https://github.com/chocolatey/choco/issues/1770) +- install/upgrade/uninstall - allow confirming for remaining installs (aka Yes to All) - see [#53](https://github.com/chocolatey/choco/issues/53) +- Config: Setting to exempt packages from upgrade all - see [#1433](https://github.com/chocolatey/choco/issues/1433) +- Support ARM64 Win32 32bit emulation - see [#1800](https://github.com/chocolatey/choco/issues/1800) +- outdated - Add --pre to outdated command - see [#1804](https://github.com/chocolatey/choco/issues/1804) +- Update tab completion options - see [#1834](https://github.com/chocolatey/choco/issues/1834) + +## [0.10.13](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.13+is%3Aclosed) - (March 15, 2019) + +### Bug Fix + +- Fix - Licensed - Licensed code failing when using licensed PowerShell functions - see [#1767](https://github.com/chocolatey/choco/issues/1767) + +## [0.10.12](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.12+is%3Aclosed) - (March 14, 2019) + +We are pretty excited to finally share a new Chocolatey release! And this release won't disappoint. Loads of bug fixes, enhanced exit codes for search, list, info and outdated when results are returned versus nothing being returned, and some really nice improvements. + +Perhaps the biggest addition this release is the ability to halt installation if a reboot is detected ([#1038](https://github.com/chocolatey/choco/issues/1038)). Once you turn this feature on, if you are installing some packages and somewhere in the middle of that there is a need for a reboot, Chocolatey will stop and exit with either exit code 350 (pending reboot prior to anything) or 1604 (install incomplete), indicating a reboot is needed to continue. It won't reboot for you, as it is just a package manager - but it will stop execution so nothing that may error on install is attemtped. You'll need to opt into this feature, so see [#1038](https://github.com/chocolatey/choco/issues/1038) for details. + +If you've long hated the default console colors, we've spent quite a bit of time detecting the background console color and adjusting the colorization output of Chocolatey for this release ([#1131](https://github.com/chocolatey/choco/issues/1131)). You might give that a whirl and see if you can turn back on console colors for good. + +We've added the ability to validate the configuration and system state at a global level ([#1746](https://github.com/chocolatey/choco/issues/1746)). It's early, but expect that we'll do a lot more to really provide good experiences in this area. + +A bug that is worth noting as fixed is having choco exit when a source fails instead of ignoring it ([#612](https://github.com/chocolatey/choco/issues/612)). This is now fixed! + +The last thing worth noting in the summary is Enhanced Exit Codes, or providing more intentional exit codes that mean something instead of just 0 or 1 ([#1758](https://github.com/chocolatey/choco/issues/1758)). In this release, outdated and search commands will have additional exit codes that mean something. This is noted in the next section, so please read over and see how to shut off this behavior if you see it breaking any integration you might be using (including your own scripts). + +### Breaking Changes + +- outdated - Exit 2 when there are packages out of date - see [#1602](https://github.com/chocolatey/choco/issues/1602) +- search/list/info - Exit 2 when no results are returned - see [#1724](https://github.com/chocolatey/choco/issues/1724) + +We've listed these as breaking changes as it may affect tools that are integrating with Chocolatey and interpreting the output of the exit code. In these cases, it would likely temporarily break those tools until they've had a chance to release new versions of their tools. If you run into this, you simply need to turn off the feature "useEnhancedExitCodes". That is as simple as `choco feature disable --name="'useEnhancedExitCodes'"` ([#1758](https://github.com/chocolatey/choco/issues/1758)). + +### Features + +- Exit when reboot is detected - w/350 for pending & w/1604 on dependency package requiring reboot - see [#1038](https://github.com/chocolatey/choco/issues/1038) + +### Bug Fixes + +- [Security] Fix - upgrade - remove automation scripts prior to upgrade even if changed - see [#1689](https://github.com/chocolatey/choco/issues/1689) +- [Security] Fix - scripts - Digitally sign the init.ps1 PowerShell file as well - see [#1665](https://github.com/chocolatey/choco/issues/1665) +- Fix - When a source fails, choco exits instead of moving to next source - see [#612](https://github.com/chocolatey/choco/issues/612) +- Fix - Upgrade all reuses overridden package parameters when useRememberedArgumentsForUpgrades feature is turned on - see [#1443](https://github.com/chocolatey/choco/issues/1443) +- Fix - Passing `--execution-timeout=0` doesn't override the default execution timeout in the configuration - see [#1747](https://github.com/chocolatey/choco/issues/1747) +- Fix - ChocolateyLastPathUpdate environment variable stores date as locale-specific - see [#1604](https://github.com/chocolatey/choco/issues/1604) +- [POSH Host] Fix - install/upgrade/uninstall - PowerShell host should exit with 1 instead of -1 if there is a package error - see [#1734](https://github.com/chocolatey/choco/issues/1734) +- Fix - Logging - warnings for ".registry.bad." files are emitted with "-r" switch - see [#1580](https://github.com/chocolatey/choco/issues/1580) +- Fix - Logging - ".registry.bad" files are created for actually valid registry snapshots - see [#1581](https://github.com/chocolatey/choco/issues/1746) +- Fix - list/search - Listing local packages fails if no sources are enabled - see [#661](https://github.com/chocolatey/choco/issues/661) +- Fix - uninstall - Object reference exception when there are no sources - see [#1584](https://github.com/chocolatey/choco/issues/1584) +- Fix - Logging - self-service errors attempting to write to the config when using Chocolatey GUI - see [#1649](https://github.com/chocolatey/choco/issues/1649) +- Fix - source list - running with -r fails to escape pipe (|) char - see [#1614](https://github.com/chocolatey/choco/issues/1614) +- Fix - source add - Adding a source allows an empty url - see [#1582](https://github.com/chocolatey/choco/issues/1582) +- Fix - Get-ChocolateyWebFile - Ensure PSVersionTable is used for PowerShell Version - see [#1623](https://github.com/chocolatey/choco/issues/1623) +- Fix - Install-ChocolateyShortcut - Don't create a folder if environment variable is used - see [#1687](https://github.com/chocolatey/choco/issues/1687) +- Fix - `choco --version` includes warnings, breaks version parsing - see [#1562](https://github.com/chocolatey/choco/issues/1562) +- Fix - Uninstall-ChocolateyZipPackage failing with Path error - see [#1550](https://github.com/chocolatey/choco/issues/1550) +- Fix - Uninstall-ChocolateyZipPackage fails from null passed to Test-Path - see [#1546](https://github.com/chocolatey/choco/issues/1546) +- Fix - Get-ChocolateyUnzip - Ensure 7z cmd window is hidden - see [#1642](https://github.com/chocolatey/choco/issues/1642) +- [API] Fix - Resolve assemblies globally without locking - see [#1735](https://github.com/chocolatey/choco/issues/1735) + +### Improvements + +- [Security] tools - Update 7z to 18.06 - see [#1704](https://github.com/chocolatey/choco/issues/1704) +- [Security] Refreshenv script leaves temporary file behind - see [#1549](https://github.com/chocolatey/choco/issues/1549) +- Control enhanced exit codes with a feature switch - see [#1758](https://github.com/chocolatey/choco/issues/1758) +- Logging - better default colors - see [#1131](https://github.com/chocolatey/choco/issues/1131) +- Validate config / system state across everything - see [#1746](https://github.com/chocolatey/choco/issues/1746) +- upgrade - switch for not installing if not installed - see [#1646](https://github.com/chocolatey/choco/issues/1646) +- outdated - improve performance of `choco outdated` - see [#1397](https://github.com/chocolatey/choco/issues/1397) +- search/list - Add alias "find" for search - see [#1744](https://github.com/chocolatey/choco/issues/1744) +- apikey - Enable removal of API key via CLI - see [#1301](https://github.com/chocolatey/choco/issues/1301) +- Logging - Choco --log-file option should create log files relative to current directory - see [#1603](https://github.com/chocolatey/choco/issues/1603) +- Logging - Don't suggest installing separate "checksum" tool - see [#981](https://github.com/chocolatey/choco/issues/981) +- template - Add notes to uninstaller file string on how to correctly parse the value from the registry - see [#1644](https://github.com/chocolatey/choco/issues/1644) +- Pro/Business - license - If license is found in top-level folder or named wrong, choco should warn - see [#1503](https://github.com/chocolatey/choco/issues/1503) +- [API] Allow verifying DI Container in release build - see [#1738](https://github.com/chocolatey/choco/issues/1738) +- [API] ability to get consistent hash of ConfigFileSettings class - see [#1612](https://github.com/chocolatey/choco/issues/1612) + +## [0.10.11](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.11+is%3Aclosed) (May 4, 2018) \{#may-4-2018} + +### Bug Fixes + +- Fix - AutoUninstaller - Captures registry snapshot escaping quotes - unable to find path for uninstall - see [#1540](https://github.com/chocolatey/choco/issues/1540) +- Fix - Installation/Setup - Use of Write-Host in Install-ChocolateyPath.ps1 prevents non-interactive installation of Chocolatey itself - see [#1560](https://github.com/chocolatey/choco/issues/1560) +- Fix - Logging - GUID in software name: "Chocolatey had an error formatting string" - see [#1543](https://github.com/chocolatey/choco/issues/1543) + +### Improvements + +- [Security] RAR Extraction with older 7zip uses uninitialized memory (CVE-2018-10115) - see [#1557](https://github.com/chocolatey/choco/issues/1557) +- Tab Completion - Modify profile if file exists but is empty - see [#991](https://github.com/chocolatey/choco/issues/991) + +## [0.10.10](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.10+is%3Aclosed) (April 12, 2018) \{#april-12-2018} + +### Bug Fixes + +- Fix - Installing Chocolatey 0.10.9 results in an exit code of 1 - see [#1529](https://github.com/chocolatey/choco/issues/1529) +- Fix - Proxy bypass list with "*" will return regex quantifier parsing errors - see [#1532](https://github.com/chocolatey/choco/issues/1532) +- Fix - NuGet cache folders - choco should always attempt to remove and should find in the cacheLocation when set - see [#1527](https://github.com/chocolatey/choco/issues/1527) + +### Improvement + +- Logging - Exclusive File Lock on Non-Essential Logs - see [#1531](https://github.com/chocolatey/choco/issues/1531) + +## [0.10.9](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.9+is%3Aclosed) (March 25, 2018) \{#march-25-2018} + +The vendored 7Zip had a couple of security findings that necessitated a release. There is also a lot of goodness going into this release as well. We've fixed XDT transforms not to keep extra data around (requiring manual fixes). We've resolved some issues surrounding compatibility with Get-PackageParameters in the chocolatey-core.extension package and what's now built into Chocolatey. That should now work appropriately, and the built-in method should be preferred, so if you are using `--package-parameters-sensitive`, those will be added as well when you do have the chocolatey-core.extension package also installed. + +We've also brought in the long desired logging with no colorization. You can set that as a switch or globally with a feature flipper. With outdated/upgrade, you can now ignore unfound packages along with already skipping pinned packages. That will help you reduce your output to only the things it finds upgrades for that can be upgraded. + +### Bug Fixes + +- [Security] Fix - Pro/Business - Logging - Get-PackageParameters should not log sensitive params - see [#1460](https://github.com/chocolatey/choco/issues/1460) +- Fix - XDT transform causes xml file to have extra data in it (unusable until manually fixed) - see [#1482](https://github.com/chocolatey/choco/issues/1482) +- Fix - Escape package registry information to reduce unreadable files - see [#1505](https://github.com/chocolatey/choco/issues/1505) +- Fix - Uninstall-ChocolateyZipPackage is unable to find zip contents file - see [#1415](https://github.com/chocolatey/choco/issues/1415) +- Fix - Get-PackageParameters - Resolve differences between chocolatey.core-extension and built-in method - see [#1490](https://github.com/chocolatey/choco/issues/1490) +- Fix - Get-PackageParameters - force built-in method to be preferred over chocolatey-core.extension method - see [#1476](https://github.com/chocolatey/choco/issues/1476) +- Fix - Get-PackageParameters should handle urls - see [#1459](https://github.com/chocolatey/choco/issues/1459) +- Fix - Setting output directory with proper quoting can result in "The given path's format is not supported." - see [#1517](https://github.com/chocolatey/choco/issues/1517) +- Fix - Logging - PowerShell script contents logging should not error if they have contents mistaken for log formatting - see [#1489](https://github.com/chocolatey/choco/issues/1489) +- Fix - Incorrect documentation for Install-ChocolateyInstallPackage - see [#1416](https://github.com/chocolatey/choco/issues/1416) +- [API] Fix - Logging - Loggers should always be checked for initialization - see [#1447](https://github.com/chocolatey/choco/issues/1447) +- Fix - Pro/Business - Expired licenses should not cause Chocolatey errors - see [#1500](https://github.com/chocolatey/choco/issues/1500) + +### Improvements + +- [Security] RAR extraction with older 7zip can cause memory corruption (CVE-2018-5996) / ZIP Shrink vulnerability (CVE-2017-17969) - see [#1478](https://github.com/chocolatey/choco/issues/1478) +- Provide friendly error messages on well-known exit codes - see [#1526](https://github.com/chocolatey/choco/issues/1526) +- Capture password securely during validation when only the user name has been provided - see [#1524](https://github.com/chocolatey/choco/issues/1524) +- Outdated/Upgrade - Option/feature to ignore unfound packages - see [#1398](https://github.com/chocolatey/choco/issues/1398) +- Installation/Setup: run choco once to initialize the config file - see [#1401](https://github.com/chocolatey/choco/issues/1401) +- Logging - Log access denied for config file to log file only - see [#1445](https://github.com/chocolatey/choco/issues/1445) +- Ability to pick x64/x86 runtime binaries for shimming by architecture without needing PowerShell scripts - see [#1365](https://github.com/chocolatey/choco/issues/1365) +- Logging - Add '--no-color' as a global option and 'logWithoutColor' feature - see [#100](https://github.com/chocolatey/choco/issues/100) +- Reset colors after abnormal exit - see [#474](https://github.com/chocolatey/choco/issues/474) +- [API] Logging - Set logging levels debug/verbose/trace - see [#1448](https://github.com/chocolatey/choco/issues/1448) +- [API] Logging - Sync already logged items when setting custom logging - see [#1446](https://github.com/chocolatey/choco/issues/1446) +- [API] Fix - Ensure one instantiation of GetChocolatey at a time - see [#1400](https://github.com/chocolatey/choco/issues/1400) +- Pro/Business - Uninstall - Keep stored package information by default - see [#1399](https://github.com/chocolatey/choco/issues/1399) +- Pro/Business - Logging - See licensing logging output - see [#1488](https://github.com/chocolatey/choco/issues/1488) + +## [0.10.8](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.8+is%3Aclosed) (August 30, 2017) \{#august-30-2017} + +With this release, Package Parameters are fully supported from both the user side and the packaging side. Check out and check out the on how to use package parameters in your packaging. Note if you are pushing packages to the community repository, you must continue to take a dependency on the `chocolatey-core.extension` as a polyfill for older versions until at least six months after a new feature is released. + +What you can do with logging has greatly increased your ability to have more power over how it works and deeper output to determine errors (we've expanded `--trace` [#1379](https://github.com/chocolatey/choco/issues/1379)). This release also gives packagers and users more power when working with the AutoUninstaller - opt-out ([#1257](https://github.com/chocolatey/choco/issues/1257)) and passing arguments to the uninstaller ([#1133](https://github.com/chocolatey/choco/issues/1133)). + +Another noteworthy addition is the ability to pass custom properties to Choco like you would do with `nuget pack`, allowing better integration with packages you manage in Visual Studio ([#1313](https://github.com/chocolatey/choco/issues/1313)). + +### Feature + +- Function - Get-PackageParameters - see [#1393](https://github.com/chocolatey/choco/issues/1393) + +### Bug Fixes + +- Fix - "Value cannot be null" running choco outdated - see [#1383](https://github.com/chocolatey/choco/issues/1383) +- Fix - Package parameters are ignored on when install directly points to nupkg/nuspec - see [#1155](https://github.com/chocolatey/choco/issues/1155) +- Fix - Logging - log4net Logger location (the code location logging) is incorrect - see [#1377](https://github.com/chocolatey/choco/issues/1377) +- [API] Fix - GetConfiguration() sets the configuration for other calls - see [#1347](https://github.com/chocolatey/choco/issues/1347) +- [API] Fix - Pro/Business - Self-Service information not returned for sources - see [#1394](https://github.com/chocolatey/choco/issues/1394) +- [API] Fix - Config output is being set to Regular Output - see [#1396](https://github.com/chocolatey/choco/issues/1396) + +### Improvements + +- [Security][POSH Host] Implement Read-Host -AsSecureString- see [#1335](https://github.com/chocolatey/choco/issues/1335) +- AutoUninstaller - Opt-out from packages - see [#1257](https://github.com/chocolatey/choco/issues/1257) +- AutoUninstaller - Use Uninstall Arguments and Override Arguments if provided - see [#1133](https://github.com/chocolatey/choco/issues/1133) +- pack - Pass arbitrary properties like nuget pack - see [#1313](https://github.com/chocolatey/choco/issues/1313) +- list - Sub-command should not require admin access (and not prompt) - see [#1353](https://github.com/chocolatey/choco/issues/1353) +- new - Package Templates - Do not treat binaries in template as text files - see [#1385](https://github.com/chocolatey/choco/issues/1385) +- new - Package Templates - Add more helpful items, like a todo list to the default template - see [#1386](https://github.com/chocolatey/choco/issues/1386) +- Document how to pass multiple sources on CLI - see [#1331](https://github.com/chocolatey/choco/issues/1331) +- Logging - Trace output should provide deep logging information - see [#1379](https://github.com/chocolatey/choco/issues/1379) +- Logging - Allow external log4net config file - see [#1378](https://github.com/chocolatey/choco/issues/1378) +- Logging - Allow capturing output to an additional log file - see [#1376](https://github.com/chocolatey/choco/issues/1376) +- [API] Make log4net dependency less restrictive - see [#1395](https://github.com/chocolatey/choco/issues/1395) +- Pro/Business - source/list - Support for Admin Only Sources - Limit non-admin list to self service only - see [#1265](https://github.com/chocolatey/choco/issues/1265) + +## [0.10.7](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.7+is%3Aclosed) (June 8, 2017) \{#june-8-2017} + +### Breaking Change + +- Set requested execution level back to asInvoker while determining more advanced elevated scenarios - see [#1324](https://github.com/chocolatey/choco/issues/1324) + + After much deliberation with the community, we're moving execution policy back to the default of `asInvoker` to make it work like it did prior to 0.10.4. However we are leaving it open for you to change it to whatever execution level you want by keeping the manifest external from choco.exe. We will be looking more at advanced scenarios - the discussion is at [#1307](https://github.com/chocolatey/choco/issues/1307). If you don't have a GitHub account, feel free to start a thread on the mailing list (and if you are a customer, you have private channels to voice your opinions on this change). + + Moving to "asInvoker" means that Chocolatey will not ask for elevated privileges prior to execution, so you will need to remember to do that yourself. If you go to `$env:ChocolateyInstall`, you will find `choco.exe.manifest`, and you have freedom to adjust the execution level as you see fit. There is one catch, you will need to do it on every install/upgrade of Chocolatey until [#1206](https://github.com/chocolatey/choco/issues/1206) is implemented. + +### Bug Fixes + +- Fix - Add file/file64 not as aliases, but use them to set url/url64 if empty - see [#1323](https://github.com/chocolatey/choco/issues/1323) +- Fix - Automatic Uninstaller doesn't split multiple paths - see [#1327](https://github.com/chocolatey/choco/issues/1327) +- Fix - choco list / search / info - fails with local directory source - see [#1325](https://github.com/chocolatey/choco/issues/1325) +- Fix - When version is four digits, Chocolatey version heading is not shown - see [#1326](https://github.com/chocolatey/choco/issues/1326) +- Fix - search / list - page/page-size not honored for exact search in 0.10.6 - see [#1322](https://github.com/chocolatey/choco/issues/1322) +- Fix - Deserializing failures on package info files should not fail the choco run - see [#1328](https://github.com/chocolatey/choco/issues/1328) + +### Improvements + +- Use `$packageArgs` in default template for uninstall script - see [#1330](https://github.com/chocolatey/choco/issues/1330) + +## [0.10.6.1](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.6.1+is%3Aclosed) (June 3, 2017) \{#june-3-2017} + +### Bug Fixes + +- Fix - shimgen fails with unrecognized option: '/errorendlocation' in .NET 4.0 only environments - see [#1321](https://github.com/chocolatey/choco/issues/1321) +- Fix - Do not fail extracting resources at runtime - see [#1318](https://github.com/chocolatey/choco/issues/1318) +- Fix - Silently fail when deleting choco.exe.old - see [#1319](https://github.com/chocolatey/choco/issues/1319) + +## [0.10.6](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.6+is%3Aclosed) (June 1, 2017) \{#june-1-2017} + +This release includes fixes and adjustments to the API to make it more usable. Search / List has also been improved with the data that it returns when verbose/detailed, along with info always returning a package with information instead of erroring sometimes. The search results from the community package repository now match what you see on the website. + +### Bug Fixes + +- Fix - choco.exe.manifest is ignored because it is extracted AFTER first choco.exe access - see [#1292](https://github.com/chocolatey/choco/issues/1292) +- Fix - Chocolatey config changes in 0.10.4+ - The process cannot access the file because it is being used by another process - see [#1241](https://github.com/chocolatey/choco/issues/1241) +- Fix - PowerShell sees authenticode hash as changed in scripts that are UTF8 (w/out BOM) that contain unicode characters - see [#1225](https://github.com/chocolatey/choco/issues/1225) +- Fix - Chocolatey timed out immediately when execution timeout was infinite (0) - see [#1224](https://github.com/chocolatey/choco/issues/1224) +- Fix - Multiple authenticated sources with same base url fail when authentication is different - see [#1248](https://github.com/chocolatey/choco/issues/1248) +- Fix - choco list / search / info - Some packages can't be found - see [#1004](https://github.com/chocolatey/choco/issues/1004) +- Fix - chocolatey.config gets corrupted when multiple processes access simultaneously - see [#1258](https://github.com/chocolatey/choco/issues/1258) +- Fix - Update ShimGen to 0.8.x to address some issues - see [#1243](https://github.com/chocolatey/choco/issues/1243) +- Fix - AutoUninstaller should skip uninstall keys if they are empty - see [#1315](https://github.com/chocolatey/choco/issues/1315) +- Fix - Trace logging should only occur on when trace is enabled - see [#1309](https://github.com/chocolatey/choco/issues/1309) +- Fix - RefreshEnv.cmd doesn't set the correct PATH - see [#1227](https://github.com/chocolatey/choco/issues/1227) +- Fix - choco new generates uninstall template with wrong use of registry key variable - see [#1304](https://github.com/chocolatey/choco/issues/1304) +- [API] Fix- chocolatey.lib nuget package has incorrect documentation xml - see [#1247](https://github.com/chocolatey/choco/issues/1247) +- [API] Fix - Chocolatey file cache still adds a 'chocolatey' directory on each install - see [#1231](https://github.com/chocolatey/choco/issues/1231) +- [API] Fix - List and Count should implement similar functionality as run - see [#1298](https://github.com/chocolatey/choco/issues/1298) +- Pro/Business - [API] Fix - Ensure DLL can work with licensed code - see [#1287](https://github.com/chocolatey/choco/issues/1287) + +### Improvements + +- Default package push url now uses push subdomain - see [#1285](https://github.com/chocolatey/choco/issues/1285) +- Report process id in the log files - see [#1239](https://github.com/chocolatey/choco/issues/1239) +- choco info / list / search - Include summary on detailed view - see [#1253](https://github.com/chocolatey/choco/issues/1253) +- choco info / list /search - Include release notes on detailed view - see [#1263](https://github.com/chocolatey/choco/issues/1263) +- choco list / search - Option to list packages only by name - see [#1237](https://github.com/chocolatey/choco/issues/1237) +- choco list / search - Allow sorting package results by relevance - see [#1101](https://github.com/chocolatey/choco/issues/1101) +- choco list / search - Search by tags only - see [#1033](https://github.com/chocolatey/choco/issues/1033) +- choco outdated - Option to leave out pinned packages - see [#994](https://github.com/chocolatey/choco/issues/994) +- Install-ChocolateyPackage and other functions should alias File/File64 - see [#1284](https://github.com/chocolatey/choco/issues/1284) +- Install-ChocolateyPowerShellCommand should alias File/FileFullPath for PsFileFullPath - see [#1311](https://github.com/chocolatey/choco/issues/1311) +- Logging - capture more information about a user (user name, domain, remote?, system?) - see [#615](https://github.com/chocolatey/choco/issues/615) +- Stop saying "0 packages failed." - see [#1259](https://github.com/chocolatey/choco/issues/1259) +- [API] provide a way to see ChocolateyConfiguration - see [#1267](https://github.com/chocolatey/choco/issues/1267) +- [API] Attempt to get ChocolateyInstall environment variable prior to extraction - see [#1297](https://github.com/chocolatey/choco/issues/1297) +- [API] Expose Container directly - see [#1294](https://github.com/chocolatey/choco/issues/1294) +- Pro/Business - Support for Package Audit (who installed packages) - see [#1238](https://github.com/chocolatey/choco/issues/1238) +- Pro/Business - [API] Ensure configuration retains base info between uses - see [#1296](https://github.com/chocolatey/choco/issues/1296) + +## [0.10.5](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.5+is%3Aclosed) (March 30, 2017) \{#march-30-2017} + +### Bug Fix + +- Fix - Start-ChocolateyProcessAsAdmin errors when running PowerShell scripts - see [#1220](https://github.com/chocolatey/choco/issues/1220) + +### Improvement + +- Show machine readable output with `choco outdated -r` - see [#1222](https://github.com/chocolatey/choco/issues/1222) + +## [0.10.4](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.4+is%3Aclosed) (March 30, 2017) \{#march-30-2017} + +We're dubbing this the "10-4 good buddy" release. We've added some major functionality and fixes we think you are going to find top notch - dare we say as smooth as really expensive chocolate? A lot of work for this release has been provided by the community. Remember that Chocolatey is only as good as the support that comes from the community! Be sure to thank other community members for the awesome that is Chocolatey and Chocolatey 10-4. We've closed over 30 bugs and added over 40 enhancements (75 tickets in total)! + +Proxy support just got some major enhancements with the ability to not only [specify proxy information at runtime](https://github.com/chocolatey/choco/issues/1173), but also to [set bypass lists and bypassing on local connections](https://github.com/chocolatey/choco/issues/1165) and [configure source repositories to bypass proxies](https://github.com/chocolatey/choco/issues/262). A major issue with [changing command execution timeout](https://github.com/chocolatey/choco/issues/1059) was just fixed. And there used to be a tiny chance you might [corrupt the choco config when running multiple choco processes](https://github.com/chocolatey/choco/issues/1047) -but now that is much better handled. + +We've also made [package itself display download progress](https://github.com/chocolatey/choco/issues/1134), which is great when software binaries are embedded in packages. For you folks looking to remove any progress (like when using Vagrant), now you can use [`--no-progress`](https://github.com/chocolatey/choco/issues/917). When NuGet.Core has issues, those issues will have more visibility into why things are failing without needing a debugging log. Speaking of some extreme visibility, see network traffic with [`--trace`](https://github.com/chocolatey/choco/issues/1182). + +We've got a few possible breaking changes that could affect you, see what we've written about them below. + +This also marks the first release that uses the [Chocolatey Software digital certificate for signing](https://github.com/chocolatey/choco/issues/1214) instead of the RealDimensions Software, LLC certificate. + +Another major feature released in preview is [using remembered arguments on upgrade](https://github.com/chocolatey/choco/issues/797). This is in preview in 0.10.4 and will be turned to 'on' automatically in a future release. We are going to be continually making it better and won't turn it on by default until it is ready. If you want to turn it on and start using it, once you have 0.10.4 installed, run `choco feature enable --name useRememberedArgumentsForUpgrades`. You can also do this per command with `--use-remembered-arguments`. You can also turn it off per command with `--ignore-remembered-arguments`. We've also really described a lot of important considerations and thoughts related to using this so there are no surprises. Please do read the issue notes at length if you plan to use this feature to reduce confusion. + +### Breaking Changes + +- Run with highestAvailable Execution Level by default - see [#1054](https://github.com/chocolatey/choco/issues/1054) + + One longstanding request with Chocolatey was to have it always request admin privileges before running. This has been a hope that it would cut down on the accidental runs of Chocolatey in a command shell that is not elevated and needing to open one that is elevated. This UAC (User account control) setting is handled by something called an application manifest (app.manifest). We had it set to "asInvoker", or run with the context of the user that ran the command. We've moved this to "highestAvailable", which means if you are a non-admin, it will just run under your context, but if you are an admin in a non-elevated shell, it will ask for elevated permissions to run. There is also "requireAdministrator", which locks execution down to administrators only. + + Moving to "highestAvailable" allows for that asking of privileges that you are used to, up front before it runs. However one additional thing we did here was give you more control over this setting now. We used to embed the app manifest into choco.exe. We now set it next to choco.exe (base install under `$env:ChocolateyInstall`, you will find `choco.exe.manifest`) so you have more freedom to adjust those execution levels as you see fit. There is one catch, you will need to do it on every install/upgrade of Chocolatey until [#1206](https://github.com/chocolatey/choco/issues/1206) is implemented. + +- When a prerelease is installed, it should upgrade to latest prerelease unless excluded - typically seen in choco upgrade all - see [#686](https://github.com/chocolatey/choco/issues/686) + + When you run `choco upgrade all`, it never catches the prereleases. However if you run `choco upgrade all --pre`, it may upgrade some of your stable installs to prereleases. Neither of these situations are desirable. So by default, we've made it so that `choco upgrade all` just does the right thing, which is to upgrade your stable releases to the latest stable release and your prerelease packages will upgrade to the absolute latest available, whether that be stable or prerelease. If you need to change the behavior back to the old way for upgrade all, simply add the `--exclude-prerelease` option. + +- Fix - Passing Allow Downgrade To upgrade against a prerelease may downgrade it to last stable version - see [#1212](https://github.com/chocolatey/choco/issues/1212) + + This is a bug fix that was allowing a prerelease to be downgraded accidentally to the last stable version if you ran `choco upgrade somepackage --allow-downgrade` without a particular version and without `--pre`. Now while this would be less affected with #686 above, it could still happen. It's a bug. The only reason this was marked as breaking change is that someone could be depending on the buggy behavior. So heads up, this bug is now fixed. If you are attempting to downgrade, make sure you specify the version you want it to go down to. + +### Features + +- [Security][Preview] Use Remembered Arguments for a Package During Upgrades - You must opt in for this to work - see [#797](https://github.com/chocolatey/choco/issues/797) +- Show download progress for the packages themselves - see [#1134](https://github.com/chocolatey/choco/issues/1134) +- Set Explicit Proxy Bypass List / Bypass On Local - see [#1165](https://github.com/chocolatey/choco/issues/1165) +- Option/feature to stop installation when a package fails - see [#1151](https://github.com/chocolatey/choco/issues/1151) +- Add File64 to Install-ChocolateyInstallPackage and Get-ChocolateyUnzip - see [#1187](https://github.com/chocolatey/choco/issues/1187) + +### Bug Fixes + +- [Security] Fix - PowerShell sees authenticode hash as changed in scripts that were signed with Unix Line Endings (`LF`) - unable to use `AllSigned` - see [#1203](https://github.com/chocolatey/choco/issues/1203) +- [Security] Fix - chocolatey setup - Use https for downloading .NET Framework 4x if not installed - see [#1112](https://github.com/chocolatey/choco/issues/1112) +- Fix - chocolatey.config gets corrupted when multiple processes access simultaneously - see [#1047](https://github.com/chocolatey/choco/issues/1047) +- Fix - "commandExecutionTimeoutSeconds" always reverts to 2700 when deprecated config setting is 0 - see [#1059](https://github.com/chocolatey/choco/issues/1059) +- Fix - Allow Chocolatey version check with FIPS - see [#1193](https://github.com/chocolatey/choco/issues/1193) +- Fix - Chocolatey doesn't always decompress downloads appropriately (support automatic decompression) - see [#1056](https://github.com/chocolatey/choco/issues/1056) +- Fix - Load built-in Chocolatey functions, then load extensions - see [#1200](https://github.com/chocolatey/choco/issues/1200) +- Fix - Use provided checksum type - see [#1018](https://github.com/chocolatey/choco/issues/1018) +- Fix - MSU fails to install with space in path - see [#1177](https://github.com/chocolatey/choco/issues/1177) +- Fix - Unable to disable failOnInvalidOrMissingLicense feature - see [#1069](https://github.com/chocolatey/choco/issues/1069) +- Fix - PowerShell (Start-ChocolateyProcessAsAdmin) should only import the installerModule and not the profile - see [#1013](https://github.com/chocolatey/choco/issues/1013) +- Fix - Automatic Uninstaller should skip when uninstaller executable does not exist - see [#1035](https://github.com/chocolatey/choco/issues/1035) +- Fix - Package installation often fails with ERROR: You cannot call a method on a null-valued expression - see [#1141](https://github.com/chocolatey/choco/issues/1141) +- Fix - Text file determination fails to throw an error because it catches it - see [#1010](https://github.com/chocolatey/choco/issues/1010) +- Fix - Delete the .istext file before the content-type check - see [#1012](https://github.com/chocolatey/choco/issues/1012) +- Fix - new command - don't add unparsed options as the name - see [#1085](https://github.com/chocolatey/choco/issues/1085) +- Fix - Proxy settings ignored for local connections - see [#497](https://github.com/chocolatey/choco/issues/497) +- Fix - RefreshEnv / Update-SessionEnvironment changes current user to SYSTEM - see [#902](https://github.com/chocolatey/choco/issues/902) +- Fix - Set-EnvironmentVariable writes an error when installing Chocolatey as SYSTEM - see [#1043](https://github.com/chocolatey/choco/issues/1043) +- Fix - Get-FtpFile fails with integer overflow when downloading file more than 2gb in size - see [#1098](https://github.com/chocolatey/choco/issues/1098) +- Fix - Uninstall-ChocolateyPackage prints out warning if the passed file path starts and ends with quotes - see [#1039](https://github.com/chocolatey/choco/issues/1039) +- Fix - Get-UninstallRegistryKey fixes/improvements - see [#815](https://github.com/chocolatey/choco/issues/815) +- Fix - Unzip specific folder feature is broken after introducing 7zip - see [#676](https://github.com/chocolatey/choco/issues/676) +- Fix - Join-Path error when installing Chocolatey as SYSTEM - see [#1042](https://github.com/chocolatey/choco/issues/1042) +- Fix - `$env:OS_NAME` is 'Windows' for Windows 10 - see [#1178](https://github.com/chocolatey/choco/issues/1178) +- Fix - choco install relativepath/to/some.nuspec fails - see [#906](https://github.com/chocolatey/choco/issues/906) +- Fix - When pointing to a nupkg, choco should use only that nupkg to install and not a newer version in the same directory - see [#523](https://github.com/chocolatey/choco/issues/523) +- Fix - Automatic uninstaller should split by quotes when necessary - see [#1208](https://github.com/chocolatey/choco/issues/1208) +- [API] Fix - lib should merge the AlphaFS dependency - see [#1148](https://github.com/chocolatey/choco/issues/1148) +- [API] Fix - don't reset loggers on setting custom automatically - see [#1121](https://github.com/chocolatey/choco/issues/1121) +- [API] Fix - Chocolatey file cache adds a 'chocolatey' directory on each install - see [#1210](https://github.com/chocolatey/choco/issues/1210) +- [API] Fix - Getting Local List of Package may leave config in undesirable state - see [#1213](https://github.com/chocolatey/choco/issues/1213) +- Fix - Pro/Business - Chocolatey Licensed Feed May Show Up More Than Once - see [#1166](https://github.com/chocolatey/choco/issues/1166) +- Fix - Pro/Business - Synchronized packages with DLLs are attempted to be imported by Chocolatey's PowerShell Extensions Loader - see [#1041](https://github.com/chocolatey/choco/issues/1041) + +### Improvements + +- [Security] Username and password for `choco apikey` not encrypted in output - see [#1106](https://github.com/chocolatey/choco/issues/1106) +- [Security] Sign Binaries / Authenticode Signatures with Chocolatey Software digital certificate - see [#1214](https://github.com/chocolatey/choco/issues/1214) +- Setting commandExecutionTimeout to 0 means never time out - see [#1202](https://github.com/chocolatey/choco/issues/1202) +- Configure sources to skip proxy - see [#262](https://github.com/chocolatey/choco/issues/262) +- Set proxy information at runtime - see [#1173](https://github.com/chocolatey/choco/issues/1173) +- Start-ChocolateyProcessAsAdmin should not elevate when already elevated - see [#1126](https://github.com/chocolatey/choco/issues/1126) +- Add `--no-progress` cli switch for hidding progress bars - see [#917](https://github.com/chocolatey/choco/issues/917) +- Note web status errors on package install failures - see [#1172](https://github.com/chocolatey/choco/issues/1172) +- Always let Nuget.Core log - see [#1095](https://github.com/chocolatey/choco/issues/1095) +- Make choco get its proxy settings also from environment variables - see [#605](https://github.com/chocolatey/choco/issues/605) +- Remove quotes in process passed to Start-ChocolateyProcessAsAdmin / CommandExecutor - see [#1167](https://github.com/chocolatey/choco/issues/1167) +- Increase download buffer size in Get-FtpFile to speed up downloads - see [#1099](https://github.com/chocolatey/choco/issues/1099) +- Trace network traffic - see [#1182](https://github.com/chocolatey/choco/issues/1182) +- Upgrade 7Zip to 16.04 - see [#1184](https://github.com/chocolatey/choco/issues/1184) +- Do not create .ignore file if outside of Chocolatey location - see [#1180](https://github.com/chocolatey/choco/issues/1180) +- Help should exit zero if called with the help switch, otherwise non-zero on bad commands - see [#473](https://github.com/chocolatey/choco/issues/473) +- "Licensed messages" may address users in a somewhat unprofessional manner - see [#1111](https://github.com/chocolatey/choco/issues/1111) +- Show the entire text to turn on the allowGlobalConfirmation flag - see [#1053](https://github.com/chocolatey/choco/issues/1053) +- Running `choco` should produce name/version and further instructions - see [#1083](https://github.com/chocolatey/choco/issues/1083) +- Typo in Install-ChocolateyPowershellCommand - see [#1088](https://github.com/chocolatey/choco/issues/1088) +- Update `choco new pkg` template to give example of handling nested quoted paths - see [#1067](https://github.com/chocolatey/choco/issues/1067) +- Add Aliases for Install-ChocolateyVsixPackage - see [#1146](https://github.com/chocolatey/choco/issues/1146) +- Add Chocolatey Software to copyright - see [#1209](https://github.com/chocolatey/choco/issues/1209) +- Pro/Business - Feature to Disable Non-Elevated Warnings - see [#1118](https://github.com/chocolatey/choco/issues/1118) +- Pro/Business - Package Throttle - Bitrate limit packages and downloads (support) - see [#454](https://github.com/chocolatey/choco/issues/454) +- Pro/Business - Allow version overrides for local packages - see [#942](https://github.com/chocolatey/choco/issues/942) +- Pro/Business - List include programs should not show items from Package Synchronizer's Programs and Features Package Sync - see [#1205](https://github.com/chocolatey/choco/issues/1205) +- Pro/Business - Show better messaging when unable to load licensed assembly - see [#1145](https://github.com/chocolatey/choco/issues/1145) +- Pro/Business - PowerShell Functions should allow overriding urls - see [#1117](https://github.com/chocolatey/choco/issues/1117) +- Pro/Business - Automatic Uninstaller - allow remove directly - see [#1119](https://github.com/chocolatey/choco/issues/1119) +- Pro/Business - Add Chocolatey Architect edition license SKU - see [#1075](https://github.com/chocolatey/choco/issues/1075) +- Pro/Business - Ensure sync command can be machine parseable - quiet logging - see [#1147](https://github.com/chocolatey/choco/issues/1147) +- Pro/Business - Configure a source to be allowed for self-service - see [#1181](https://github.com/chocolatey/choco/issues/1181) + +## [0.10.3](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.3+is%3Aclosed) (October 7, 2016) \{#october-7-2016} + +### Breaking Change + +- Fix - Do Not Check `$LastExitCode` - Only error a package install if script errors or set a different exit code when it is specifically set - see [#1000](https://github.com/chocolatey/choco/issues/1000) + +Starting in v0.9.10, Chocolatey started checking `$LASTEXITCODE` in addition to the script command success as a way to be more helpful in determining package failures. This meant it offered the ability to capture when a script exited with `Exit 1` and handle that accordingly. However that really has never been a recommended scenario for returning errors from scripts and is not seen in the wild anywhere so it is believed that those that may be affected are very few. + +Checking `$LastExitCode` checks the last executable's exit code when the script specifically does not call `Exit`. This can lead to very perplexing failures, such as running a successful xcopy that exits with `2` and seeing package failures without understanding why. Since it is not typically recommended to call `Exit` to return a value from PowerShell because of issues with different hosts, it's less of a concern to only look at explicit failures. For folks that may need it, allow failing a package again by the last external command exit code or `exit` from a PowerShell script. Note that it is not recommended to use exit with a number to return from PowerShell scripts. Instead you should use `$env:ChocolateyExitCode` or `Set-PowerShellExitCode` (first available in v0.9.10) to ensure proper setting of the exit code. + +If you need the prior behavior, please turn on the feature `scriptsCheckLastExitCode`. + +### Bug Fixes + +- Fix - chocolateybeforemodify runs after modifying (moving) chocolatey lib package files - see [#995](https://github.com/chocolatey/choco/issues/995) +- Fix - The refreshenv command throws an error about Write-FunctionCallLogMessage when ran in PowerShell on 0.10.2 - see [#996](https://github.com/chocolatey/choco/issues/996) + +## [0.10.2](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.2+is%3Aclosed) (September 30, 2016) \{#september-30-2016} + +We're dubbing this the "Every Joe" release in honor of a friend that just lost his fight with brain cancer. If you want to help further research, please make a donation to a cancer research association of your choosing (e.g. the [American Brain Tumor Assocation](https://give.abta.org/give/261975/#!/donation/checkout)). + +A couple of important fixes/enhancements in this release. Most of the improvements are about providing better feedback to you and fixing minor issues. The big one surrounds when packages set a download path for a file using `$env:TEMP`, choco will ensure that the file can still be found for later use. + +### Bug Fixes + +- Fix - Downloaded file is at old `$env:TEMP\chocolatey\chocolatey` location, but install calls with just `$env:TEMP\chocolatey\` location - see [#969](https://github.com/chocolatey/choco/issues/969) +- Fix - [Pro/Business] UseOriginalLocation fails when there is no 64bit file - see [#972](https://github.com/chocolatey/choco/issues/972) +- Fix - Do not use unparsed options as package names - see [#983](https://github.com/chocolatey/choco/issues/983) + +### Improvements + +- Start-ChocolateyProcessAsAdmin enhancements - see [#977](https://github.com/chocolatey/choco/issues/977) +- Log PowerShell function calls better - see [#976](https://github.com/chocolatey/choco/issues/976) +- Allow environment variables in some config settings - see [#971](https://github.com/chocolatey/choco/issues/971) +- [Pro/Business] Provide license type to environment variables - see [#968](https://github.com/chocolatey/choco/issues/968) +- Note that chocolateyUninstall.ps1 may no longer required in template - see [#982](https://github.com/chocolatey/choco/issues/982) +- Provide guidance when licensed only options are passed to FOSS - see [#984](https://github.com/chocolatey/choco/issues/984) +- Rollback automatically when a user cancels an operation - see [#985](https://github.com/chocolatey/choco/issues/985) +- Explain how to workaround a failing uninstall - see [#573](https://github.com/chocolatey/choco/issues/573) +- Remove extra forward slashes in url - see [#986](https://github.com/chocolatey/choco/issues/986) +- Side by side uninstall enhancements - see [#992](https://github.com/chocolatey/choco/issues/992) + +## [0.10.1](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.1+is%3Aclosed) (September 19, 2016) \{#september-19-2016} + +We're dubbing this the "Shhh! Keep that secret please" release. We've found that when passing in passwords and other sensitive arguments, those items can end up in the logs in clear text. We've addressed this in [#948](https://github.com/chocolatey/choco/issues/948) and [#953](https://github.com/chocolatey/choco/issues/953). When it comes to passing sensitive arguments through to native installers, you can set up environment variables with those sensitive args and pass those arguments directly through to `Start-ChocolateyProcessAsAdmin`. If you prefer a better experience, the licensed version allows passing sensitive options directly through choco.exe as `--install-arguments-sensitive` and `--package-parameters-sensitive`. Read more in the [Licensed CHANGELOG](https://github.com/chocolatey/choco/blob/master/CHANGELOG_LICENSED.md). + +Perhaps the biggest improvement in this release is that Chocolatey will automatically look to see if it can download binaries over HTTPS when provided an HTTP url. If so, Chocolatey will switch to downloading the binaries over SSL. This provides better security in downloading and knowing you are getting the binary from the source location instead of a possible man in the middle location, especially when the package does not provide checksums for verification. + +Another improvement you may not even notice, but we think you will love is that Chocolatey now supports TLS v1.2 transport which presents a nice transparent increase in security. You will need to have at least .NET Framework 4.5 installed to take advantage of this feature. + +### Features + +- [Security] Support TLS v1.2 - see [#458](https://github.com/chocolatey/choco/issues/458) +- [Security] Attempt to download packages via HTTPS connection - see [#746](https://github.com/chocolatey/choco/issues/746) +- [Security] Pro/Business - Pass sensitive arguments to installers - see [#948](https://github.com/chocolatey/choco/issues/948) +- Search (and info) by version - see [#935](https://github.com/chocolatey/choco/issues/935) + +### Bug Fixes + +- [Security] Fix - Passwords in command line options are logged in clear text - see [#953](https://github.com/chocolatey/choco/issues/953) +- [Security] Fix - For PowerShell v2 - if switch down to SSLv3 protocol fails, go back to original protocol - see [#958](https://github.com/chocolatey/choco/issues/958) +- Fix - Unzipping to ProgramFiles/System32 is Subject to File System Redirection - see [#960](https://github.com/chocolatey/choco/issues/960) +- Fix - Run without login - see [#945](https://github.com/chocolatey/choco/issues/945) +- Fix - Support Long Paths - see [#934](https://github.com/chocolatey/choco/issues/934) +- Fix - help should not issue warning about elevated command shell - see [#893](https://github.com/chocolatey/choco/issues/893) +- Fix - Licensed Feed cannot be disabled - see [#959](https://github.com/chocolatey/choco/issues/959) +- Fix - Choco with unknown command should show help menu - see [#938](https://github.com/chocolatey/choco/issues/938) +- Fix - Get-FtpFile error when file is missing (called through Get-ChocolateyWebFile) - see [#920](https://github.com/chocolatey/choco/issues/920) +- Fix - Skip Get-WebFileName for FTP - see [#957](https://github.com/chocolatey/choco/issues/957) +- Fix - Chocolatey-InstallChocolateyPackage fix for double chocolatey folder name is not also applied to the passed in file name - see [#908](https://github.com/chocolatey/choco/issues/908) +- Fix - Start-ProcessAsAdmin - working directory should be from the location of the executable - see [#937](https://github.com/chocolatey/choco/issues/937) +- [POSH Host] Fix - PowerShell Host - Package scripts setting values can affect packages that depend on them - see [#719](https://github.com/chocolatey/choco/issues/719) +- Fix - Transactional install - pending check may fail if the lib folder doesn't exist - see [#954](https://github.com/chocolatey/choco/issues/954) +- Fix - Start-ChocolateyProcessAsAdmin Module Import for PowerShell causes errors - see [#901](https://github.com/chocolatey/choco/issues/901) + +### Improvements + +- Transactional Install - Improve concurrent operations (pending) - see [#943](https://github.com/chocolatey/choco/issues/943) +- Uninstall-ChocolateyPackage should set unrecognized fileType to exe - see [#964](https://github.com/chocolatey/choco/issues/964) +- Powershell functions - Allow access to package title, not only ID - see [#925](https://github.com/chocolatey/choco/issues/925) +- Option to apply package parameters / install arguments to dependent packages - see [#839](https://github.com/chocolatey/choco/issues/839) +- Get-ChocolateyWebFile download check enhancements - see [#952](https://github.com/chocolatey/choco/issues/952) +- Do not treat unknown checksum types as MD5 - see [#932](https://github.com/chocolatey/choco/issues/932) +- Pro/Business - Install-ChocolateyPackage - UseOriginalLocation - see [#950](https://github.com/chocolatey/choco/issues/950) +- Auto determine checksum type - see [#922](https://github.com/chocolatey/choco/issues/922) +- Ensure PowerShell functions have parameter name parity - see [#941](https://github.com/chocolatey/choco/issues/941) +- Output from installer should go to verbose log - see [#940](https://github.com/chocolatey/choco/issues/940) + +## [0.10.0](https://github.com/chocolatey/choco/issues?q=milestone%3A0.10.0+is%3Aclosed) (August 11, 2016) \{#august-11-2016} + +What was planned for 0.9.10.4 is now 0.10.0. This is due partly to a breaking change we are making for security purposes and a move to provide better a better versioning scheme for the remainder of the sub-v1 versions of Chocolatey. Instead of 0.y.z.0 being considered where major verions occur in the sub 1 series, 0.y.0 will now be considered where those major versions occur. We also are moving right along towards v1 (and hope to be there in 2017). + +0.10.0 carries the fixes for 0.9.10.4 and includes a major security enhancement (checksum requirement). + +### Breaking Change + +- [Security] Checksum requirement and enhancements - see [#112](https://github.com/chocolatey/choco/issues/112) + +Checksums in package scripts are meant as a measure to validate the originally intended downloaded resources used in the creation of a package are the same files that are received at a future date. This also ensures that the same files that are checked by all parts of moderation (if applicable) are the same files that are received by users for a package. This is seen mostly on the community repository because it is public and packages are subject to copyright laws (distribution rights), which typically requires the package scripts to download software from the official distribution locations. The Chocolatey framework has had the ability to use checksums in package scripts since [July 2014](https://docs.chocolatey.org/en-us/choco/release-notes#july-3-2014). + +**What is the requirement?** choco will now fail if a package download resources from HTTP/FTP and does not use checksums to verify those downloaded resources. The requirement for HTTP/FTP is [#112](https://github.com/chocolatey/choco/issues/112). We are considering also requiring it for [HTTPS (#895)](https://github.com/chocolatey/choco/issues/895) as well. You can optionally set a feature (`allowEmptyChecksumsSecure`) to ensure packages using HTTPS also use checksums. + +**How does this protect the community anymore than before?** During moderation review, there is a check of these downloaded binaries against VirusTotal (which verifies these binaries against 50-60+ different virus scanners). The binaries are also verified for installation purposes against a test computer. With an independent 3rd party checksum in the package itself, it guarantees that the files received by a user from those remote sources are the exact same files that were used in the verification process. + +**Why the requirement, and why now?** This is a measure of protection for the Chocolatey community. HTTP is easy to hack with both DNS poisoning and MITM (man in the middle) attacks. Without independent verification of the integrity of the downloaded resources, users can be left susceptible to these issues. We've been planning a move to require checksums for awhile now, with a planned longer and smoother transition for package maintainers to get packages updated to reduce breakages. Unfortunately there was a recent event with [FOSSHub getting hacked](https://www.zdnet.com/article/fosshub-serves-up-mbr-compromising-versions-of-audacity-and-classic-shell/) (the [community repository had 8 possibly affected packages](https://us8.campaign-archive.com/?u=86a6d80146a0da7f2223712e4&id=f2fe8dbe6b) and [we quickly took action](https://us8.campaign-archive.com/?u=86a6d80146a0da7f2223712e4&id=2cbe87d486)), which necessitated a need for us to move in a much swifter fashion to ensure the protection of the community sooner, rather than later. The changes in Chocolatey represented by the checksum changes are a major step in the process to ensure protection. Requiring for HTTPS as well will mitigate any future compromises of software distribution sites that are used with Chocolatey packages. + +**Can I shut this behavior off or opt out per package?** +You can shut off the checksum requirement by enabling the feature `allowEmptyChecksums`. This will return Chocolatey to previous behavior. We strongly recommend against it. + +You can shut it off or turn it per package install/upgrade with `--allow-empty-checksums` and `--require-checksums`, respectively. See https://docs.chocolatey.org/en-us/choco/commands/install / https://docs.chocolatey.org/en-us/choco/commands/upgrade. + +You can also disable the feature `allowEmptyChecksumsSecure` to enforce checksums for packages that download from secure locations (HTTPS). + +**Other things I should know?** Users also now have the ability to pass their own checksums and checksumtypes into the install. See https://docs.chocolatey.org/en-us/choco/commands/install / https://docs.chocolatey.org/en-us/choco/commands/upgrade. + +### Known Issue + +- [Known Issues](https://github.com/chocolatey/choco/labels/Bug) + +### Feature + +- Pro/Business - Download a package without installing it - see [#108](https://github.com/chocolatey/choco/issues/108) + +### Bug Fixes + +- Fix - Installing choco on Windows 10 Vagrant box stops Vagrant from being able to manage the box - see [#834](https://github.com/chocolatey/choco/issues/834) +- Fix - 64bit 7z.exe on 32bit system in chocolatey\tools - see [#836](https://github.com/chocolatey/choco/issues/836) +- Fix - [POSH Host] PowerShell exit code does not reset between packages in a single run - see [#854](https://github.com/chocolatey/choco/issues/854) +- Fix - Uninstall-ChocolateyZipPackage is failing - see [#871](https://github.com/chocolatey/choco/issues/871) +- Fix - "C:\Program Files\WindowsPowerShell\Modules" is missing in PSModulePath for cmd.exe [#830](https://github.com/chocolatey/choco/issues/830) +- Fix - Environment variables update fixes [#840](https://github.com/chocolatey/choco/issues/840) +- Fix - Handle null items better - see [#853](https://github.com/chocolatey/choco/issues/853) +- Fix - HKCU may not have Environment (Install of Chocolatey) - see [#375](https://github.com/chocolatey/choco/issues/375) +- Fix - Progress of download does not clear the whole output line - see [#875](https://github.com/chocolatey/choco/issues/875) +- Fix - Wrong download progress reported during package upgrade - see [#872](https://github.com/chocolatey/choco/issues/872) +- Fix - Uninstall not supporting side-by-side => ChocolateyUninstall.ps1 not run - see [#862](https://github.com/chocolatey/choco/issues/862) +- Fix - Uninstall ignores the version parameter - see [#861](https://github.com/chocolatey/choco/issues/861) +- Fix - Search by exact or by id only is case sensitive for remote sources - see [#889](https://github.com/chocolatey/choco/issues/889) +- Fix - Deprecated links inserted in .nuspec files created by `choco new ...` - see [#870](https://github.com/chocolatey/choco/issues/870) +- Fix - Get-OSArchitectureWidth doesn't do what it says it does - see [#828](https://github.com/chocolatey/choco/issues/828) +- Fix - When Choco fails to get a package from NuGet Core, fail the package with exit code 1 - see [#867](https://github.com/chocolatey/choco/issues/867) +- Fix - Illegal characters in path - see [#857](https://github.com/chocolatey/choco/issues/857) +- Fix - Get-OSArchitectureWidth doesn't do what it says it does - see [#828](https://github.com/chocolatey/choco/issues/828) +- Fix - Pro/Business - Choco install config file fails on licensed assembly - see [#866](https://github.com/chocolatey/choco/issues/866) +- Fix - DISM /all doesn't run anywhere but Windows 6.2 -- no dependencies get installed - see [#897](https://github.com/chocolatey/choco/issues/897) + +### Improvements + +- Do not install tab completion (edit of profile) under certain conditions - see [#833](https://github.com/chocolatey/choco/issues/833) +- Choco install with packages.config should print out the packages to install - see [#878](https://github.com/chocolatey/choco/issues/878) +- Larger default log file size and retention - see [#852](https://github.com/chocolatey/choco/issues/852) +- Allow getting installer type to be overridden - see [#885](https://github.com/chocolatey/choco/issues/885) +- Pack - Add optional output folder option - see [#598](https://github.com/chocolatey/choco/issues/598) +- Little command name correction on init.ps1 - see [#595](https://github.com/chocolatey/choco/issues/595) +- Tab completion - don't query if there is a file in the folder that meets completion - see [#847](https://github.com/chocolatey/choco/issues/847) + +## [0.9.10.3](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.10.3+is%3Aclosed) (June 23, 2016) \{#june-23-2016} + +### Bug Fixes + +- Fix - Ignore ValidPackage Exit Codes for Real - see [#827](https://github.com/chocolatey/choco/issues/827) +- Fix - Cache folder running under SYSTEM account should be C:\Windows\TEMP - see [#826](https://github.com/chocolatey/choco/issues/826) +- Fix - Built-in 7zip doesn't behave properly - see [#775](https://github.com/chocolatey/choco/issues/775) +- Fix - Successful installer exit codes not recognized by choco should return 0 - see [#821](https://github.com/chocolatey/choco/issues/821) +- Fix - NotSilent fails with "Cannot bind argument to parameter statements because it is an empty string" - see [#819](https://github.com/chocolatey/choco/issues/819) +- Fix - Silent Args being passed as a string array cause package failure - see [#808](https://github.com/chocolatey/choco/issues/808) + +### Improvements + +- Hold pending check for 10 seconds / provide means of explicitly overriding the transactional install cleanup - see [#822](https://github.com/chocolatey/choco/issues/822) +- Pro/Business - Add runtime skip option to allow skipping the virus scanner - see [#786](https://github.com/chocolatey/choco/issues/786) + +## [0.9.10.2](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.10.2+is%3Aclosed) (June 19, 2016) \{#june-19-2016} + +### Bug Fixes + +- Fix - Chocolatey Licensed is unable to find 0.9.10.x (only 0.9.10.0) - see [#814](https://github.com/chocolatey/choco/issues/814) +- Fix - Logging is broken in some packages due to new TEMP directory - see [#813](https://github.com/chocolatey/choco/issues/813) +- [API] Fix - When performing an Install/Uninstall/Upgrade operation through the API, an error is throw for "chocolatey.resources" - see [#811](https://github.com/chocolatey/choco/issues/811) + +### Improvement + +- Ensure log file path exists - and fix the log file arguments if necessary - see [#758](https://github.com/chocolatey/choco/issues/758) + +## [0.9.10.1](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.10.1+is%3Aclosed) (June 18, 2016) \{#june-18-2016} + +### Bug Fix + +- Fix - Cannot bind argument to parameter 'exitCode' because it is null - see [#810](https://github.com/chocolatey/choco/issues/810) + +### Improvement + +- [Security] Upgrade to 7zip 16.02 to overcome CVE-2016-2334/CVE-2016-2335 - see [#812](https://github.com/chocolatey/choco/issues/812) + +## [0.9.10](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.10+is%3Aclosed) (June 17, 2016) \{#june-17-2016} + +The "I got 99 problems, but a package manager ain't one" release. With the release of 0.9.10 (or if you prefer 0.9.10.0), we're about to make everything 100% better in your Windows package management world. We've addressed over 100 features and bugs in this release. We looked at how we could improve PowerShell and we've come out with a [competely internal host](https://github.com/chocolatey/choco/issues/8) that can Prompt and Read-Host in a way that times out and selects default values after a period of time. Speaking of PowerShell, how about some tab completion `choco ` to `choco install node`? How about never having to [close and reopen your shell again](https://github.com/chocolatey/choco/issues/664)? + +Alternative sources (`-source webpi`, `--source windowsfeature`, etc) are back! I mean, am I right?! Have you heard of auto uninstaller? If Chocolatey has installed something that works with Programs and Features, Chocolatey knows how to uninstall it without an uninstall script about 90+% of the time. This feature was in beta for the 0.9.9 series, it is on by default in 0.9.10 (unless you disabled it after trying it, you will need to reenable it, see `choco feature` for more details). + +Here's one you probably never knew existed - extensions. Chocolatey has had the ability to extend itself by adding PowerShell modules for years, and most folks either didn't know it existed or have never used them. We've enhanced them a bit in preparation for the licensed version of Chocolatey. + +We redesigned our `choco new` default packaging template and we've made managing templates as easy as managing packages. + +`choco search`/`choco list` has so many enhancements, you may not need to visit dot org again. . +- [search -v provides moderation related information and a world of nuspec information](https://github.com/chocolatey/choco/issues/493) +- [search by id only](https://github.com/chocolatey/choco/issues/663) +- [search by id exact](https://github.com/chocolatey/choco/issues/453) +- [search by approved only, not broken, and/or by download cache](https://github.com/chocolatey/choco/issues/670) +- [sort by version](https://github.com/chocolatey/choco/issues/668) +- [search with paging](https://github.com/chocolatey/choco/issues/427) + +There are 150 tickets closed for this release! We've included remediation steps for when a breaking change affects you. Mostly if you have been using Chocolatey in a recommended way, you won't even notice any adverse changes. There are a number of things we thought to highlight, and quite a few security enhancements coming in this release (look for the [Security] tag on the ticket summary). + +### Breaking Changes + +- Only fail automation scripts (chocolateyInstall.ps1) if the script returns non-zero exit code - see [#445](https://github.com/chocolatey/choco/issues/445) + +The 0.9.8 series would only fail a package with terminating errors. The 0.9.9 series took that a bit further and started failing packages if anything wrote to stderr. It turns out that is a bad idea. Only when PowerShell exits with non-zero (which comes with terminating errors) should the package fail due to this. If you need the old behavior of the 0.9.9 series, you can get it back with a switch (`--fail-on-standard-error` and its aliases) and/or a feature flip (`failOnStandardError`). + +- Fix - Force reinstall, force upgrade, and uninstall should delete the download cache - see [#590](https://github.com/chocolatey/choco/issues/590) + +If you set a custom cache directory for downloads, it will no longer use a "chocolatey" subdirectory under that. You may need to make any adjustments if this is going to affect you. + +- Exit with the same exit code as the software being installed - see [#512](https://github.com/chocolatey/choco/issues/512) + +There are more exit codes from Chocolatey now that indicate success -`0`, `1605`, `1614`, `1641`, and `3010`. You may need to adjust anything you were using that would only check for 0 and nonzero. +If you need the previous behavior, be sure to disable the feature `usePackageExitCodes` or use the `--ignore-package-exit-codes` switch in your choco commands. + +- PowerShell module functions adjusted for automatic documentation - see [#697](https://github.com/chocolatey/choco/issues/697) + +If you were using any of the functions in a non-recommended way or not compliant with the examples, you are going to find breakages in the functions as some of the things that were called out as non-optional are now enforced. This shouldn't affect most folks. + +- [Security] Explicit permissions - remove inheritance/lock down to admins - see [#398](https://github.com/chocolatey/choco/issues/398) + +This further restricts the default installation location by removing all permissions and inheritance of permissions, explicitly giving Administrator/LocalSystem to Full access, and Users are granted Read and Execute. + +### Known Issue + +- [Known Issues](https://github.com/chocolatey/choco/labels/Bug) + +### Features + +- Alternative Sources - see [#14](https://github.com/chocolatey/choco/issues/14) +- [POSH Host] Use Internal PowerShell Host - see [#8](https://github.com/chocolatey/choco/issues/8) +- Run a script before uninstall/upgrade (chocolateyBeforeModify.ps1) to allow for things like services to shutdown - see [#268](https://github.com/chocolatey/choco/issues/268) +- Manage package templates with a specially named package and special package folder - see [#542](https://github.com/chocolatey/choco/issues/542) +- Support for custom headers - see [#332](https://github.com/chocolatey/choco/issues/332) +- [Security] Show moderation-related information in search results - see [#493](https://github.com/chocolatey/choco/issues/493) +- New Helper - Get-ToolsLocation helper (replacement for Get-BinRoot) - see [#631](https://github.com/chocolatey/choco/issues/631) +- Choco list/search should have exact filter search - see [#453](https://github.com/chocolatey/choco/issues/453) +- RefreshEnv (Refresh Environment Variables) Should also work in PowerShell - see [#664](https://github.com/chocolatey/choco/issues/664) +- Provide PowerShell tab completion for Chocolatey - see [#412](https://github.com/chocolatey/choco/issues/412) +- [Security] Sign the PowerShell scripts and assemblies - see [#501](https://github.com/chocolatey/choco/issues/501) +- Add a `choco info` command to show info for one package - see [#644](https://github.com/chocolatey/choco/issues/644) +- Mark packages pending until install completes successfully - see [#198](https://github.com/chocolatey/choco/issues/198) +- Resolve sources by name - see [#356](https://github.com/chocolatey/choco/issues/356) +- Uninstall-ChocolateyEnvironmentVariable function - see [#772](https://github.com/chocolatey/choco/issues/772) +- Pro/Business - Ubiquitous Install Directory Switch - see [#258](https://github.com/chocolatey/choco/issues/258) +- Pro/Business - Runtime Virus Scanning - see [virus scanning](https://docs.chocolatey.org/en-us/features/virus-check) +- Pro/Business - Private CDN cache for downloads - see [private CDN cache](https://docs.chocolatey.org/en-us/features/private-cdn) +- Pro/Business - Sync "choco installed status" with "Windows installed status" - see [#567](https://github.com/chocolatey/choco/issues/567) + +### Bug Fixes + +- [Security] Fix - Only load the Chocolatey PowerShell module from a known location - see [#560](https://github.com/chocolatey/choco/issues/560) +- [Security] Fix - Package source authentication at http://location/path doesn't also use http://location/ (base url) - see [#466](https://github.com/chocolatey/choco/issues/466) +- [Security] Fix - When defining a proxy without credentials - proxy password is shown in plain text - see [#503](https://github.com/chocolatey/choco/issues/503) +- [Security] Fix - Fully qualify shutdown command - see [#702](https://github.com/chocolatey/choco/issues/702) +- [Security] Fix - MSI packages fail install with `Could not find 'msiexec'` - see [#723](https://github.com/chocolatey/choco/issues/723) +- Fix - Force should set allow-downgrade to true - see [#585](https://github.com/chocolatey/choco/issues/585) +- Fix - Do not use NuGet package cache - see [#479](https://github.com/chocolatey/choco/issues/479) +- Fix - Pack doesn't include chocolatey-specific metadata - see [#607](https://github.com/chocolatey/choco/issues/607) +- Fix - TEMP environment variable is 8.3 Path on some systems - see [#532](https://github.com/chocolatey/choco/issues/532) +- Fix - `$packageName` should be present for zip uninstalls in uninstall script template - see [#534](https://github.com/chocolatey/choco/issues/534) +- Fix - Debug/Verbose messages not logged in automation scripts (chocolateyInstall.ps1) - see [#520](https://github.com/chocolatey/choco/issues/520) +- Fix - Escape log output for variables that have data from external sources - see [#565](https://github.com/chocolatey/choco/issues/565) +- Fix - Choco new silentargs can't pass in args in the param=value format - see [#510](https://github.com/chocolatey/choco/issues/510) +- Fix - Exception if no source is enabled - see [#490](https://github.com/chocolatey/choco/issues/490) +- Fix - Chocolatey command help output written to standard error instead of standard out - see [#468](https://github.com/chocolatey/choco/issues/468) +- Fix - Logger doesn't clear cached NullLoggers - see [#516](https://github.com/chocolatey/choco/issues/516) +- Fix - DISM "/All" argument in the wrong position - see [#480](https://github.com/chocolatey/choco/issues/480) +- Fix - Pro - Installing/uninstalling extensions should rename files in use - see [#594](https://github.com/chocolatey/choco/issues/594) +- Fix - Running Get-WebFileName in PowerShell 5 fails and sometimes causes package errors - see [#603](https://github.com/chocolatey/choco/issues/603) +- Fix - Merging assemblies on a machine running .Net 4.5 or higher produces binaries incompatible with .Net 4 - see [#392](https://github.com/chocolatey/choco/issues/392) +- Fix - API - Incorrect log4net version in chocolatey.lib dependencies - see [#390](https://github.com/chocolatey/choco/issues/390) +- [POSH Host] Fix - Message after Download progress is on the same line sometimes - see [#525](https://github.com/chocolatey/choco/issues/525) +- [POSH Host] Fix - PowerShell internal process - "The handle is invalid." - see [#526](https://github.com/chocolatey/choco/issues/526) +- [POSH Host] Fix - The handle is invalid - when output is being redirected and a package attempts to write to a filestream - see [#572](https://github.com/chocolatey/choco/issues/572) +- [POSH Host] Fix - Write-Host adding multiple line breaks - see [#672](https://github.com/chocolatey/choco/issues/672) +- [POSH Host] Fix - PowerShell Host doesn't show colorization overrides - see [#674](https://github.com/chocolatey/choco/issues/674) +- [POSH Host] Fix - $profile is empty string when installing packages - does not automatically install the ChocolateyProfile - see [#667](https://github.com/chocolatey/choco/issues/667) +- [POSH Host] Fix - Getting LCID doesn't work properly with the built-in PowerShell - see [#741](https://github.com/chocolatey/choco/issues/741) +- [POSH Host] Fix - Host.Version should return actual PowerShell version - see [#708](https://github.com/chocolatey/choco/issues/708) +- Fix - Verbose shows in output on debug switch - see [#611](https://github.com/chocolatey/choco/issues/611) +- Fix - Get-ChocolateyUnzip captures files that don't belong to the package / Unzip should not do a full disk scan - see [#616](https://github.com/chocolatey/choco/issues/616) and [#155](https://github.com/chocolatey/choco/issues/155) +- Fix - Package succeeds but software install silently fails when Install-ChocolateyInstallPackage has the wrong arguments - see [#629](https://github.com/chocolatey/choco/issues/629) +- Fix - ShimGen handling of spaces and arguments that have shimgen in them - see [#647](https://github.com/chocolatey/choco/issues/647) +- Fix - PowerShell v2 - Choco installer messages can't actually be warnings (causes FileStream errors) - see [#666](https://github.com/chocolatey/choco/issues/666) +- Fix - Installing chocolatey removes $env:PSModulePath changes for current PowerShell session - see [#295](https://github.com/chocolatey/choco/issues/295) +- Fix - Notice for Get-BinRoot deprecation won't be displayed - see [#673](https://github.com/chocolatey/choco/issues/673) +- Fix - choco new creates a bad ChocolateyUninstall.ps1 script which does not work. - see [#460](https://github.com/chocolatey/choco/issues/460) +- Fix - ShimGen fails when file metadata has strings that need literals - see [#677](https://github.com/chocolatey/choco/issues/677) +- Fix - Install-ChocolateyPath Expands Variables in PATH, Overwriting Preexisting Variables - see [#303](https://github.com/chocolatey/choco/issues/303) +- Fix - Install-ChocolateyShortcut gives invalid warning when target is a web url - see [#592](https://github.com/chocolatey/choco/issues/592) +- Fix - Argument Parsing failures should be reported as warnings and not debug messages - see [#571](https://github.com/chocolatey/choco/issues/571) +- Fix - choco pack returns zero exit code when Nuget.Core validation errors - see [#469](https://github.com/chocolatey/choco/issues/469) +- Fix - `Install-ChocolateyPath` updates `PATH` to `REG_SZ`, which may break using Windows dir and system32 tools - see [#699](https://github.com/chocolatey/choco/issues/699) +- Fix - Removing environment variables sets empty environment variables - see [#724](https://github.com/chocolatey/choco/issues/724) +- Fix - Environment Variable Changes Require Reboot - see [#728](https://github.com/chocolatey/choco/issues/728) +- Fix - Get-WebFileName determines strange file name - see [#727](https://github.com/chocolatey/choco/issues/727) +- Fix - Package params are also applied to dependent package - see [#733](https://github.com/chocolatey/choco/issues/733) +- Fix - Use package name/version from environment, not parameters - see [#751](https://github.com/chocolatey/choco/issues/751) +- Fix - Get-WebFileName Does Not Match on Invalid Characters - see [#753](https://github.com/chocolatey/choco/issues/753) +- Fix - `choco new` cannot introduce multistage folder hierarchy template - see [#706](https://github.com/chocolatey/choco/issues/706) +- Fix - Empty $env:ChocolateyToolsLocation combine error - see [#756](https://github.com/chocolatey/choco/issues/756) +- Fix - Installing chocolatey removes $env:PSModulePath changes for current powershell session - see [#295](https://github.com/chocolatey/choco/issues/295) +- Fix - Some environment variables are set too early for options/switches to have an effect - see [#620](https://github.com/chocolatey/choco/issues/620) +- [API] Fix - Issue when attempting to execute run command through API - see [#769](https://github.com/chocolatey/choco/issues/769) +- Fix - Logging of upgrade messages - placement of some messages is incorrect - see [#557](https://github.com/chocolatey/choco/issues/557) +- Fix - Get-WebFile fails with - The term '//continue' is not recognized as the name of a cmdlet - see [#789](https://github.com/chocolatey/choco/issues/789) +- Fix - Unable to read registry snapshot file - see [#487](https://github.com/chocolatey/choco/issues/487) +- Fix - Pro/Business - Licensed version has an incorrect dependency on PowerShell assemblies and will only load v3 and above - see [#799](https://github.com/chocolatey/choco/issues/799) +- Fix - Exit codes in package scripts should work - see [#802](https://github.com/chocolatey/choco/issues/802) +- Fix - Running choco new creates a bad nuspec - see [#801](https://github.com/chocolatey/choco/issues/801) + +### Improvements + +- AutoUninstaller is on by default - see [#308](https://github.com/chocolatey/choco/issues/308) +- Use the actual download file name instead of providing one - see [#435](https://github.com/chocolatey/choco/issues/435) +- Unset Configuration Values - see [#551](https://github.com/chocolatey/choco/issues/551) +- Ability to run "choco upgrade all" ignoring specific packages - see [#293](https://github.com/chocolatey/choco/issues/293) +- Extensions enhancements - see [#588](https://github.com/chocolatey/choco/issues/588) +- Show human-readable file sizes when downloading - see [#363](https://github.com/chocolatey/choco/issues/363) +- [Security] Warn about environment changes - see [#563](https://github.com/chocolatey/choco/issues/563) +- Warn when execution timeout has elapsed - see [#561](https://github.com/chocolatey/choco/issues/561) +- Update nuspec to make it easier to get started - see [#535](https://github.com/chocolatey/choco/issues/535) +- Suppress verbose output to verbose - like with 7-zip - see [#476](https://github.com/chocolatey/choco/issues/476) +- Choco push moderation message only on push to dot org - see [#601](https://github.com/chocolatey/choco/issues/601) +- Allow tools/bin root to be root of the drive again - see [#628](https://github.com/chocolatey/choco/issues/628) +- File description of ShimGen shims should match original as closely as possible - see [#374](https://github.com/chocolatey/choco/issues/374) +- Shim Generation should automatically detect GUI - see [#634](https://github.com/chocolatey/choco/issues/634) +- Don't show 32 bit wording unless there is explicitly both versions available - see [#642](https://github.com/chocolatey/choco/issues/642) +- Allow passing arbitrary key/value arguments to new command when generating packages from templates - see [#658](https://github.com/chocolatey/choco/issues/658) +- Choco search/list should be able to search just by Id - see [#663](https://github.com/chocolatey/choco/issues/663) +- Search by approved, by not broken, by download cache - see [#670](https://github.com/chocolatey/choco/issues/670) +- Save nuspec files with package installs - see [#623](https://github.com/chocolatey/choco/issues/623) +- Show a prompt character when asking a multiple choice question - see [#184](https://github.com/chocolatey/choco/issues/184) +- When prompting for a user yes/no answer, use a short [y/n] representation - see [#181](https://github.com/chocolatey/choco/issues/181) +- Default package template should include LICENSE.txt and VERIFICATION.txt for packages with binaries - see [#675](https://github.com/chocolatey/choco/issues/675) +- choco list/search aliases for -v - '-detail' and '-detailed' - see [#646](https://github.com/chocolatey/choco/issues/646) +- Log normal output to a secondary log - see [#682](https://github.com/chocolatey/choco/issues/682) +- Display Package test status information on install/upgrade - see [#696](https://github.com/chocolatey/choco/issues/696) +- Report when reboots are necessary from package installs - see [#712](https://github.com/chocolatey/choco/issues/712) +- Report loaded extensions - see [#715](https://github.com/chocolatey/choco/issues/715) +- Exit with specific codes on certain actions - see [#707](https://github.com/chocolatey/choco/issues/707) +- Determine if Downloaded File is HTML or Plain Text - see [#649](https://github.com/chocolatey/choco/issues/649) +- Interactively prompt with timeout on some questions - see [#710](https://github.com/chocolatey/choco/issues/710) +- [POSH Host] Exit code from PowerShell Host should be useful - see [#709](https://github.com/chocolatey/choco/issues/709) +- Update environment for scripts after setting environment variables - see [#729](https://github.com/chocolatey/choco/issues/729) +- Clean up any temp nuget folder actions after NuGet operations - see [#622](https://github.com/chocolatey/choco/issues/622) +- Ensure Web Requests and Responses Do Not Timeout - make configurable - see [#732](https://github.com/chocolatey/choco/issues/732) +- Combine timeout from push and execution timeout as one parameter - see [#752](https://github.com/chocolatey/choco/issues/752) +- Override autouninstaller / failonautouninstaller fail with switches for uninstall - see [#515](https://github.com/chocolatey/choco/issues/515) +- Offer to remove actual package (*.install/*.portable) when removing meta/virtual package - see [#735](https://github.com/chocolatey/choco/issues/735) +- Provide more info in package summary - see [#455](https://github.com/chocolatey/choco/issues/455) +- Report install location - see [#689](https://github.com/chocolatey/choco/issues/689) +- Track MSI Information Better - see [#755](https://github.com/chocolatey/choco/issues/755) +- Support for client certificates - see [#399](https://github.com/chocolatey/choco/issues/399) +- choco feature list formatting enhancements - see [#742](https://github.com/chocolatey/choco/issues/742) +- choco new --original-template - see [#737](https://github.com/chocolatey/choco/issues/737) +- Update Get-FtpFile with fixes for Get-WebFile - see [#765](https://github.com/chocolatey/choco/issues/765) +- Rename Get-ProcessorBits as a more appropriately named Get-OSArchitectureWidth - see [#713](https://github.com/chocolatey/choco/issues/713) +- Allow passing no 32-bit url and fail the package on 32-bit systems - see [#527](https://github.com/chocolatey/choco/issues/527) +- Enhance Install-ChocolateyShortcut to support WindowStyle, Pin to Taskbar and Run As Administrator checkbox - see [#519](https://github.com/chocolatey/choco/issues/519) +- [Security] Allow hashing files for checksums with FIPS compliant algorithms - see [#446](https://github.com/chocolatey/choco/issues/446) +- After upgrading provide summary of upgraded packages - see [#759](https://github.com/chocolatey/choco/issues/759) +- Web functions - Check for local file and return early - see [#781](https://github.com/chocolatey/choco/issues/781) +- Refresh environment variables after each install - see [#439](https://github.com/chocolatey/choco/issues/439) +- Capture Arguments for a Package during Install/Upgrade - see [#358](https://github.com/chocolatey/choco/issues/358) +- If config update fails, log to debug instead of warn - see [#793](https://github.com/chocolatey/choco/issues/793) +- Remove extra empty lines when doing choco upgrade all - see [#796](https://github.com/chocolatey/choco/issues/796) +- Mention required permissions if user has no access - see [#794](https://github.com/chocolatey/choco/issues/794) +- Pro/Business - Also check for license in User Profile location - see [#606](https://github.com/chocolatey/choco/issues/606) +- Pro/Business - Set download cache information if available - see [#562](https://github.com/chocolatey/choco/issues/562) +- Pro/Business - Allow commands to be added - see [#583](https://github.com/chocolatey/choco/issues/583) +- Pro/Business - Load/Provide hooks for licensed version - see [#584](https://github.com/chocolatey/choco/issues/584) +- Pro/Business - On valid license, add pro/business source automatically - see [#604](https://github.com/chocolatey/choco/issues/604) +- Pro/Business - Add switch to fail on invalid or missing license - see [#596](https://github.com/chocolatey/choco/issues/596) +- Pro/Business - add ignore invalid switches/parameters - see [#586](https://github.com/chocolatey/choco/issues/586) +- Pro/Business - Don't prompt to upload file for virus scanning if it is too large - see [#695](https://github.com/chocolatey/choco/issues/695) +- Pro/Business - add 'support' command - see [#745](https://github.com/chocolatey/choco/issues/745) +- Pro/Business - Adjust environment settings warning to suggest upgrade - see [#795](https://github.com/chocolatey/choco/issues/795) +- API - Add the ability to retrieve package count for a Source - see [#431](https://github.com/chocolatey/choco/issues/431) +- API - Chocolatey Lib still marks vital package information as internal - see [#433](https://github.com/chocolatey/choco/issues/433) +- API - Add paging to list command - see [#427](https://github.com/chocolatey/choco/issues/427) +- API - Choco search should sort by version - see [#668](https://github.com/chocolatey/choco/issues/668) +- API - Switch dll to .NET Client Profile - see [#680](https://github.com/chocolatey/choco/issues/680) + +## [0.9.9.12](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.12+is%3Aclosed) (March 18, 2016) \{#march-18-2016} + +### Bug Fix + +- Fix - PowerShell "Collection is read-only" - see [#659](https://github.com/chocolatey/choco/issues/659) + +## [0.9.9.11](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.11+is%3Aclosed) (October 6, 2015) \{#october-6-2015} + +### Bug Fix + +- Fix - Pin list is broken - see [#452](https://github.com/chocolatey/choco/issues/452) + +## [0.9.9.10](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.10+is%3Aclosed) (October 3, 2015) \{#october-3-2015} + +Not to be confused with 0.9.10 (this is not that version). This fixes a small but extremely significant issue with relation to configuration managers and other tools that use choco. + +### Bug Fixes + +- Fix - List output for other tools messed up in 0.9.9.9 (pipe separator missing) - see [#450](https://github.com/chocolatey/choco/issues/450) +- Fix - accidentally escaped characters in "new" -help - see [#447](https://github.com/chocolatey/choco/issues/447) + +## [0.9.9.9](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.9+is%3Aclosed) (October 2, 2015) \{#october-2-2015} + +With this release you can completely configure choco from the command line (including the priority of sources). Choco now allows you to create [custom package templates](https://github.com/chocolatey/choco/issues/76). Choco has [proper proxy support](https://github.com/chocolatey/choco/issues/243) now. We also squashed up some bugs, like the infinite download loop that happens if the connection is lost. We've also improved the installation experience of Chocolatey itself, [unpacking all of the required setup files in the chocolatey package](https://github.com/chocolatey/choco/issues/347) and improving the messaging output during the bootstrapping process. Chocolatey also [doesn't try to write config updates every command](https://github.com/chocolatey/choco/issues/364), unless something actually changes in the config file. And last but not least for mentions, the issue of [choco not recognizing itself as needing upgraded after being installed by the bootstrapper](https://github.com/chocolatey/choco/issues/414) is now fixed. + +### Features + +- Config Command - see [#417](https://github.com/chocolatey/choco/issues/417) +- Create Custom Package Templates - see [#76](https://github.com/chocolatey/choco/issues/76) +- Proxy Support - see [#243](https://github.com/chocolatey/choco/issues/243) + +### Bug Fixes + +- Fix - [Security] Remove rollback should validate it exists in choco install backup directory - see [#387](https://github.com/chocolatey/choco/issues/387) +- Fix - Ensure chocolatey is installed into the lib folder during initial install - see [#414](https://github.com/chocolatey/choco/issues/414) +- Fix - Infinite loop downloading files if connection is lost - see [#285](https://github.com/chocolatey/choco/issues/285) +- Fix - list / search results blocking until completion instead of streaming output - see [#143](https://github.com/chocolatey/choco/issues/143) +- Fix - default template install script for MSI silentArgs are bad - see [#354](https://github.com/chocolatey/choco/issues/354) +- Fix - Deleting read-only files fails - see [#338](https://github.com/chocolatey/choco/issues/338) and [#263](https://github.com/chocolatey/choco/issues/263) +- Fix - If the package uses $packageParameters instead of $env:PackageParameters, quotes are removed - see [#406](https://github.com/chocolatey/choco/issues/406) +- Fix - Choco upgrade not downloading new installer if current installer is the same size - see [#405](https://github.com/chocolatey/choco/issues/405) +- Fix - Exit with non-zero code if install/upgrade version and a newer version is installed - see [#365](https://github.com/chocolatey/choco/issues/365) +- Fix - Chocolately can permanently corrupt the config file if an operation is interrupted - see [#355](https://github.com/chocolatey/choco/issues/355) +- Fix - Handle PowerShell's `InitializeDefaultDrives` Error (that should just be a warning) - see [#349](https://github.com/chocolatey/choco/issues/349) +- Fix - Checksumming can not be turned off by the feature flag - see [#33](https://github.com/chocolatey/choco/issues/33) +- Fix - Process with an id of is not running errors on 0.9.9.8 - see [#346](https://github.com/chocolatey/choco/issues/346) +- Fix - Export cmdlets for automation scripts - see [#422](https://github.com/chocolatey/choco/issues/422) + +### Improvements + +- [Security] Add SHA-2 (sha256 / sha512) to checksum - see [#113](https://github.com/chocolatey/choco/issues/113) +- Sources should have explicit priority order- see [#71](https://github.com/chocolatey/choco/issues/71) +- Unpack the powershell files just before packaging up the nupkg (Installing chocolatey meta) - see [#347](https://github.com/chocolatey/choco/issues/347) +- API - List --localonly not working by default - see [#223](https://github.com/chocolatey/choco/issues/223) +- API - Expose package results - see [#132](https://github.com/chocolatey/choco/issues/132) +- API - Externalize IPackage and its interfaces - see [#353](https://github.com/chocolatey/choco/issues/353) +- Enhance "Access to path is denied" message on no admin rights - see [#177](https://github.com/chocolatey/choco/issues/177) +- Only update chocolatey.config if there are changes - see [#364](https://github.com/chocolatey/choco/issues/364) +- Modify source when attempting to add a source with same name but different URL - see [#88](https://github.com/chocolatey/choco/issues/88) +- Features should contain description - see [#416](https://github.com/chocolatey/choco/issues/416) +- Chocolatey Installer - removing modules not loaded - see [#442](https://github.com/chocolatey/choco/issues/442) +- Chocolatey Installer - Don't use Write-Host - see [#444](https://github.com/chocolatey/choco/issues/444) +- Set environment variables once configuration is complete - see [#420](https://github.com/chocolatey/choco/issues/420) +- Enhance Package Template for 0.9.9.9 - see [#366](https://github.com/chocolatey/choco/issues/366) + +## [0.9.9.8](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.8+is%3Aclosed) (June 26, 2015) \{#june-26-2015} + +### Bug Fixes + +- Fix: choco install -y C: deletes all files - see [#341](https://github.com/chocolatey/choco/issues/341) +- Fix: Read-Host halts scripts rather than prompt for input - see [#219](https://github.com/chocolatey/choco/issues/219) + +### Improvement + +- Download Progress Bar is Missing - see [#56](https://github.com/chocolatey/choco/issues/56) + +## [0.9.9.7](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.7+is%3Aclosed) (June 20, 2015) \{#june-20-2015} + +"Fix Everything. Fix All The Things" - There have been some things bugging us for a long time related to limitations with NuGet, so we decided to fix that. Like [nuspec enhancements](https://github.com/chocolatey/choco/issues/205), that crazy [content folder restriction](https://github.com/chocolatey/choco/issues/290) has been removed (I know, right?!), and we're working around [badly](https://github.com/chocolatey/choco/issues/316) [behaved](https://github.com/chocolatey/choco/issues/326) packages quite a bit more to bring you more feature parity. + +Let's talk about a couple of big, like really big, BIG features just added with this release. No more packages rebooting Windows. We fixed ([#304](https://github.com/chocolatey/choco/issues/304) / [#323](https://github.com/chocolatey/choco/issues/323)) and [enhanced](https://github.com/chocolatey/choco/issues/305) up the Auto Uninstaller Service quite a bit to ensure things are working like you would expect (It goes on by default in 0.9.10 - we'll start documenting more about it soon). But wait, there's more! I haven't even told you about the big features yet + +The first big feature is enhancing the nuspec. I mentioned this I know, but *now* you can use `packageSourceUrl` in the nuspec to tell folks where you are storing the source for the package! We also added `projectSourceUrl`, `docsUrl`, `mailingListUrl`, and `bugTrackerUrl`. What's even better is that the community feed has already been enhanced to look for these values. So have the templates from `choco new`. And it's backwards compatible, meaning you can still install packages that have these added nuspec enhancements without issue (but we will need to provide a fix for Nuget Package Explorer). + +The second is Xml Document Transformations (XDT), which I think many folks are aware of but may not realize what it can provide. [NuGet has allowed transformations for quite awhile](https://docs.nuget.org/Create/Configuration-File-and-Source-Code-Transformations) to allow you to make changes to an `app.config`/`web.config` on install/uninstall. We are following in similar footsteps to allow you to do similar when installing/upgrading packages. We will look for `*.install.xdt` files in the package (doesn't matter where) and they will apply to configuration files with the same name in the package. This means that during upgrades we won't overwrite configuration files during upgrades that have opted into this feature. It allows you to give users a better experience during upgrades because they won't need to keep making the same changes to the xml config files each time they upgrade your package. + +### Features + +- Allow XDT Configuration Transforms - see [#331](https://github.com/chocolatey/choco/issues/331) +- Prevent reboots - see [#316](https://github.com/chocolatey/choco/issues/316) +- Enhance the nuspec - first wave - see [#205](https://github.com/chocolatey/choco/issues/205) +- Uninstaller Service Enhancements - see [#305](https://github.com/chocolatey/choco/issues/305) + +### Bug Fixes + +- When uninstall fails, do not continue removing files - see [#315](https://github.com/chocolatey/choco/issues/315) +- Do not run autouninstaller if the package result is already a failure - see [#323](https://github.com/chocolatey/choco/issues/323) +- Fix - Auto Uninstaller can fail if chocolateyUninstall.ps1 uninstalls prior to it running - see [#304](https://github.com/chocolatey/choco/issues/304) +- Fix - Packages with content folders cannot have a dependency without also having a content folder - see [#290](https://github.com/chocolatey/choco/issues/290) +- Remove ShimGen director files on upgrade/uninstall - see [#326](https://github.com/chocolatey/choco/issues/326) +- If feature doesn't exist, throw an error - see [#317](https://github.com/chocolatey/choco/issues/317) +- Fix - The operation completed successfully on stderr - see [#249](https://github.com/chocolatey/choco/issues/249) +- Fix - When specific nuget version is needed by a package it is the chocolatey version that is used - see [#194](https://github.com/chocolatey/choco/issues/194) +- When installing with *.nupkg, need to get package name from package, not file name - see [#90](https://github.com/chocolatey/choco/issues/90) +- Fix - Choco pin list is not returning a list - see [#302](https://github.com/chocolatey/choco/issues/302) +- Fix - A pin is not created for existing installations (prior to new choco) - see [#60](https://github.com/chocolatey/choco/issues/60) + +### Improvements + +- Allow upgrade to always install missing packages - see [#300](https://github.com/chocolatey/choco/issues/300) +- Enhance Templates - see [#296](https://github.com/chocolatey/choco/issues/296) +- Always log debug output to the log file - see [#319](https://github.com/chocolatey/choco/issues/319) +- Warn when unable to snapshot locked files - see [#313](https://github.com/chocolatey/choco/issues/313) +- Use %systemroot% in place of %windir%. PATH exceed 2048 breaks choco - see [#252](https://github.com/chocolatey/choco/issues/252) +- Add fault tolerance to registry snapshot checks - see [#337](https://github.com/chocolatey/choco/issues/337) + +## [0.9.9.6](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.6+is%3Aclosed) (May 16, 2015) \{#may-16-2015} + +Some really large fixes this release, especially removing all files that are installed to the package directory if they haven't changed, including ensuring that the nupkg file is always removed on successful uninstalls. The really big add some folks are going to like is the new outdated command. Some more variables that were misused have been brought back, which allows some packages (like Atom) to be installed again without issue. If you can believe some people never read these, we decided to add a note to the installer prompt to let people know about -y. + +### Feature + +- Outdated Command - Use `choco outdated` to see outdated packages - see [#170](https://github.com/chocolatey/choco/issues/170) + +### Bug Fixes + +- Fix - NotSilent Switch Not Working - see [#281](https://github.com/chocolatey/choco/issues/281) +- Fix - Silent installation of choco without admin is not possible - see [#274](https://github.com/chocolatey/choco/issues/274) +- Fix - Package resolves to latest version from any source - see [#279](https://github.com/chocolatey/choco/issues/279) +- Fix - Install fails when shortcut creation fails - see [#264](https://github.com/chocolatey/choco/issues/264) +- Fix - Error deserializing response of type Registry - see [#257](https://github.com/chocolatey/choco/issues/257) +- Fix - Auto uninstaller should not depend on optional InstallLocation value - see [#255](https://github.com/chocolatey/choco/issues/255) +- Fix - Nupkg is left but reported as successfully uninstalled by NuGet - see [#254](https://github.com/chocolatey/choco/issues/254) +- Fix - SHA1 checksum compared as MD5 for Install-ChocolateyZipPackage - see [#253](https://github.com/chocolatey/choco/issues/253) +- Fix - Auto uninstaller strips off "/" and "-" in arguments - see [#212](https://github.com/chocolatey/choco/issues/212) + +### Improvements + +- Uninstall removes all installed files if unchanged - see [#121](https://github.com/chocolatey/choco/issues/121) +- Auto uninstaller should convert /I to /X for Msi Uninstalls - see [#271](https://github.com/chocolatey/choco/issues/271) +- Bring back more variables for feature parity - see [#267](https://github.com/chocolatey/choco/issues/267) +- Mention -y in the prompt - see [#265](https://github.com/chocolatey/choco/issues/265) + +## [0.9.9.5](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.5+is%3Aclosed) (April 20, 2015) \{#april-20-2015} + +### Breaking Change + +- Renamed short option `p` to `i` for list --include-programs so that `p` could be ubiquitous for password across commands that optionally can pass a password - see [#240](https://github.com/chocolatey/choco/issues/240) + +### Bug Fixes + +- Fix - Secure Sources Not Working - see [#240](https://github.com/chocolatey/choco/issues/240) +- Fix - Generate-BinFile / Remove-BinFile - see [#230](https://github.com/chocolatey/choco/issues/230) +- Fix - cpack should only include files from nuspec - see [#232](https://github.com/chocolatey/choco/issues/232) +- Fix - cpack should leave nupkg in current directory - see [#231](https://github.com/chocolatey/choco/issues/231) +- Fix - Install-PowerShellCommand uses incorrect path - see [#241](https://github.com/chocolatey/choco/issues/241) +- Fix - choco list source with redirects does not resolve - see [#171](https://github.com/chocolatey/choco/issues/171) +- Fix - choco tried to resolve disabled repo - see [#169](https://github.com/chocolatey/choco/issues/169) +- Fix - cpack nuspec results in "The path is not of a legal form" - see [#164](https://github.com/chocolatey/choco/issues/164) +- Fix - cpack hangs on security related issue - see [#160](https://github.com/chocolatey/choco/issues/160) +- Fix - spelling error in "package has been upgradeed successfully" - see [#64](https://github.com/chocolatey/choco/issues/64) + +### Improvements + +- Api Key and Source matching could be more intuitive - see [#228](https://github.com/chocolatey/choco/issues/238) +- Remove warning about allowGlobalConfirmation being enabled - see [#237](https://github.com/chocolatey/choco/issues/237) +- Include log file path when saying 'See the log for details' - see [#187](https://github.com/chocolatey/choco/issues/187) +- Uninstall prompts for version when there is only one installed - see [#186](https://github.com/chocolatey/choco/issues/186) +- Do not offer a default option when prompting for a user choice - see [#185](https://github.com/chocolatey/choco/issues/185) +- Remove the warning note about skipping, and instead show the warning when selecting skip - see [#183](https://github.com/chocolatey/choco/issues/183) +- Do not print PowerShell install/update scripts by default - see [#182](https://github.com/chocolatey/choco/issues/182) + +## [0.9.9.4](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.4+is%3Aclosed) (March 30, 2015) \{#march-30-2015} + +### Bug Fix + +- Fix - The term 'false' is not recognized as the name of a cmdlet - see [#215](https://github.com/chocolatey/choco/issues/215) + +### Improvement + +- Some packages use non-API variables like $installArguments - see [#207](https://github.com/chocolatey/choco/issues/207) + +## [0.9.9.3](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.3+is%3Aclosed) (March 29, 2015) \{#march-29-2015} + +### Bug Fixes + +- Fix - Install .NET Framework immediately during install - see [#168](https://github.com/chocolatey/choco/issues/168) +- Fix - Do not error on Set-Acl during install/upgrade - see [#163](https://github.com/chocolatey/choco/issues/163) +- Fix - Do not escape curly braces in powershell script - see [#208](https://github.com/chocolatey/choco/issues/208) +- Fix - Formatting issues on --noop command logging - see [#202](https://github.com/chocolatey/choco/issues/202) +- Fix - Uninstaller check doesn't find 32-bit registry keys - see [#197](https://github.com/chocolatey/choco/issues/197) +- Fix - Uninstaller errors on short path to msiexec - see [#211](https://github.com/chocolatey/choco/issues/211) + +### Improvements + +- Some packages use non-API variables like $installArguments - see [#207](https://github.com/chocolatey/choco/issues/207) +- Add Generate-BinFile to Helpers (widely used but never part of API) - see [#145](https://github.com/chocolatey/choco/issues/145) +- Add Remove-BinFile to Helpers - see [#195](https://github.com/chocolatey/choco/issues/195) +- Get-ChocolateyWebFile should create path if it doesn't exist - see [#167](https://github.com/chocolatey/choco/issues/167) + +## [0.9.9.2](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.2+is%3Aclosed) (March 6, 2015) \{#march-6-2015} + +### Bug Fixes + +- Fix - Allow passing install arguments again (regression in 0.9.9 series) - see [#150](https://github.com/chocolatey/choco/issues/150) +- Fix - Allow apostrophes to be used as quotes - quoting style that worked with previous client - see [#141](https://github.com/chocolatey/choco/issues/141) +- Fix - Shims write errors to stderr - see [#142](https://github.com/chocolatey/choco/issues/142) and [ShimGen #14](https://github.com/chocolatey/shimgen/issues/14) + +### Improvement + +- Upgrade `-r` should always return a value - see [#153](https://github.com/chocolatey/choco/issues/153) + +## [0.9.9.1](https://github.com/chocolatey/choco/issues?q=milestone%3A0.9.9.1+is%3Aclosed) (March 3, 2015) \{#march-3-2015} + +### Bug Fix + +- Fix - Get-BinRoot broken - see [#144](https://github.com/chocolatey/choco/issues/144) + +## [0.9.9](https://github.com/chocolatey/choco/issues?q=is%3Aissue+milestone%3A0.9.9+is%3Aclosed) (March 3, 2015) \{#march-3-2015-1} + +This also includes issues that were being tracked in the old Chocolatey repository: [Chocolatey 0.9.9](https://github.com/chocolatey/chocolatey/issues?q=is%3Aclosed+label%3Av0.9.9). + +The two links above will not capture everything that has changed, since this is a complete rewrite. We broke everything. If this were a v1+, it would be a major release. But we are less than v1, so 0.9.9 it is! ;) + +Okay, so we didn't really break everything. We have maintained nearly full compatibility with how you pass options into choco, although the output may be a bit different (but better, we hope) and in at least one case, additional switches (or a feature setting) is/are required - we limited this to security related changes only. + +We also fixed and improved a bunch of things, so we feel the trade off is well worth the changes. + +We'll try to capture everything here that you should know about. Please call `choco -?` or `choco.exe -h` to get started. + +### Known Issues + +- [Known Issues](https://github.com/chocolatey/choco/labels/Bug) +- TEMPORARY `install all` is missing - this is expected to be back in 0.9.10 - see [#23](https://github.com/chocolatey/choco/issues/23) +- Alternative sources (`webpi`,`ruby`,`python`,`cygwin`, `windowsfeature`) do not work yet. This is expected to be fixed in 0.9.10 - see [#14](https://github.com/chocolatey/choco/issues/14) +- Progress bar is missing when downloading until we are using internal posh components for Packages - see [#56](https://github.com/chocolatey/choco/issues/56) +- See [Feature Parity](https://github.com/chocolatey/choco/labels/FeatureParity) for items not yet reimplemented from older PowerShell Chocolatey client (v0.9.8.32 and below). + +### Breaking Changes + +- [Security] **Prompt for confirmation**: For security reasons, we now stop for confirmation before changing the state of the system on most commands. You can pass `-y` to confirm any prompts **or set a value in the config that will globally confirm and behave like older versions of Chocolatey** - see [#52](https://github.com/chocolatey/choco/issues/52) + > :choco-info: **NOTE** + > + > This is one of those additional switches we were talking about) +- [Security] If your default installation is still at `c:\Chocolatey`, this version will force a move to ProgramData and update the environment settings - see [#7](https://github.com/chocolatey/choco/issues/7) +- **Configuration ### Breaking Changes** + 1. You now have one config file to interact with in %ChocolateyInstall%\config - your user config is no longer valid and can be removed once you migrate settings to the config. + 1. The config will no longer be overwritten on upgrade. + 1. Choco no longer interacts with NuGet's config file at all. You will need to reset all of your apiKeys (see features for `apikey`). On the plus side, the keys will work for all users of the machine, unlike NuGet's apiKeys (only work for the user that sets them). + 1. This also means you can no longer use `useNugetForSources`. It has been removed as a config setting. +- **Packaging Changes:** + 1. Choco now installs packages without version numbers on folders. This means quite a few things... + 1. Upgrading packages doesn't install a new version next to an old version, it actually upgrades. + 1. Dependencies resolve at highest available version, not the minimum version as before - see [Chocolatey #415](https://github.com/chocolatey/chocolatey/issues/415) + 1. `install` versus `upgrade` - Use `upgrade` on existing packages instead of install. A `-force` reinstall will reinstall the **same** version you already have installed. +- **Package Maintenance Changes**: + 1. Read the above about apikey changes + 1. Read above about dependency resolution changes. +- **Deprecated/Removed Commands:** + 1. `installmissing` has been removed. It was deprecated awhile ago, so this should not be a surprise. + 1. `choco version` has been deprecated and will be removed in v1. Use `choco upgrade pkgName --noop` or `choco upgrade pkgName -whatif` instead. + 1. `Write-ChocolateySuccess`, `Write-ChocolateyFailure` have been deprecated. + 1. `update` is now `upgrade`. `update` has been deprecated and will be removed/replaced in v1. Update will be reincarnated later for a different purpose. **Hint**: It rhymes with smackage pindexes. + +### Features + +- In app documentation! Use `choco -?`, `choco -h` or `choco commandName -?` to learn about each command, complete with examples! +- WhatIf/Noop mode for all commands (`--noop` can also be specified as `-whatif`) - see +- Performs like a package manager, expect to see queries failing because of unmet dependency issues. +- **New Commands:** + 1. `pin` - Suppress upgrades. This allows you to 'pin' an install to a particular version - see + 1. `apikey` - see + 1. `new` - see and [Chocolatey #157](https://github.com/chocolatey/chocolatey/issues/157) +- New ways to pass arguments! See +- Did we mention there is a help menu that is actually helpful now? Shiny! +- AutoUninstaller!!!! But it is not enabled by default this version. See [#15](https://github.com/chocolatey/choco/issues/15), [#9](https://github.com/chocolatey/choco/issues/9) and [Chocolatey #6](https://github.com/chocolatey/chocolatey/issues/6) +- **New Helpers:** + 1. `Install-ChocolateyShortcut` - see [Chocolatey #238](https://github.com/chocolatey/chocolatey/pull/238), [Chocolatey #235](https://github.com/chocolatey/chocolatey/issues/235) and [Chocolatey #218](https://github.com/chocolatey/chocolatey/issues/218) + +### Bug Fixes + +Probably a lot of bug fixes that may not make it here, but here are the ones we know about. + +- Fix - Cannot upgrade from prerelease to same version released - see [Chocolatey #122](https://github.com/chocolatey/chocolatey/issues/122) +- Fix - install `--force` should not use cache - see [Chocolatey #199](https://github.com/chocolatey/chocolatey/issues/199) +- Fix - force dependencies as well - see and [Chocolatey #199](https://github.com/chocolatey/chocolatey/issues/199) +- Fix - Chocolatey should not stop on error - see [Chocolatey #192](https://github.com/chocolatey/chocolatey/issues/192) +- Fix - Upgrading does not remove previous version - see [Chocolatey #259](https://github.com/chocolatey/chocolatey/issues/259) +- Fix - Non-elevated shell message spills errors - see [Chocolatey #540](https://github.com/chocolatey/chocolatey/issues/540) +- Fix - Package names are case sensitive for some sources - see [Chocolatey #589](https://github.com/chocolatey/chocolatey/issues/589) +- Fix - Install-ChocolateyVsixPackage doesn't check for correct VS 2012 path - see [Chocolatey #601](https://github.com/chocolatey/chocolatey/issues/601) +- Fix - Chocolatey behaves strangely after ctrl+c - see [Chocolatey #608](https://github.com/chocolatey/chocolatey/issues/608) +- Fix - Uninstall doesn't respect version setting - see [Chocolatey #612](https://github.com/chocolatey/chocolatey/issues/612) +- Fix - No update after download error - see [Chocolatey #637](https://github.com/chocolatey/chocolatey/issues/637) +- Fix - cup ends silently on error - see [Chocolatey #312](https://github.com/chocolatey/chocolatey/issues/312) +- Fix - cpack silently fails when dependency .NET 4.0+ is not met - see [Chocolatey #270](https://github.com/chocolatey/chocolatey/issues/270) +- Fix - Regression in cver all in 0.9.8.27 - see [Chocolatey #530](https://github.com/chocolatey/chocolatey/issues/530) +- Fix - Certain installs and updates fail with a "process with an Id of xxxx is not running" error - see [Chocolatey #603](https://github.com/chocolatey/chocolatey/issues/603) + +### Improvements + +- [Security] Allow keeping `c:\chocolatey` install directory with environment variable - see [#17](https://github.com/chocolatey/choco/issues/17) +- [Security] Require switch on unofficial build - see [#36](https://github.com/chocolatey/choco/issues/36) +- Install script updates - see [#7](https://github.com/chocolatey/choco/issues/7) +- Ensure Chocolatey pkg is installed properly in lib folder - This means you can take a dependency on a minimum version of Chocolatey (we didn't like that before) - see [#19](https://github.com/chocolatey/choco/issues/19) +- Uninstall - allow abort - see [#43](https://github.com/chocolatey/choco/issues/43) +- Support for HTTPS basic authorization - see [Chocolatey #128](https://github.com/chocolatey/chocolatey/issues/128) +- Smooth out success/failure logging - see [Chocolatey #154](https://github.com/chocolatey/chocolatey/issues/154) +- Add $env:CHOCOLATEY_VERSION - see [Chocolatey #251](https://github.com/chocolatey/chocolatey/issues/251) +- Replace ascii cue with visual cues - see [Chocolatey #376](https://github.com/chocolatey/chocolatey/pull/376) +- Uninstall all versions of an app - see [Chocolatey #389](https://github.com/chocolatey/chocolatey/issues/389) +- Add parameters in packages.config files - see , [Chocolatey #472](https://github.com/chocolatey/chocolatey/issues/472), and [#10](https://github.com/chocolatey/choco/issues/10) +- Choco pack should support `-version` - see [Chocolatey #526](https://github.com/chocolatey/chocolatey/issues/526) +- Enhancements to Start-ChocolateyProcessAsAdmin - see [Chocolatey #564](https://github.com/chocolatey/chocolatey/pull/564) +- Install-ChocolateyFileAssociation - add label to new file types - see [Chocolatey #564](https://github.com/chocolatey/chocolatey/pull/564) +- Clean up the verobsity of Chocolatey - see [Chocolatey #374](https://github.com/chocolatey/chocolatey/issues/374) +- Compact choco upgrade --noop option - see [Chocolatey #414](https://github.com/chocolatey/chocolatey/issues/414) +- Remove references to the Chocolatey gods - see [Chocolatey #669](https://github.com/chocolatey/chocolatey/issues/669) +- Shims now have noop (`--shimgen-noop`) and help (`--shimgen-help`) switches - see [ShimGen #8](https://github.com/chocolatey/shimgen/issues/8) and [ShimGen #10](https://github.com/chocolatey/shimgen/issues/10) +- Shims will terminate underlying process on termination signal - see [ShimGen #11](https://github.com/chocolatey/shimgen/issues/11) +- Shims now have gui (`--shimgen-gui`) and exit (`--shimgen-exit`) switches - see [ShimGen #13](https://github.com/chocolatey/shimgen/issues/13) and [ShimGen #12](https://github.com/chocolatey/shimgen/issues/12) +- Dat help menu tho. I mean srsly guise - see [Chocolatey #641](https://github.com/chocolatey/chocolatey/issues/641) + +## [0.9.8.33](https://github.com/chocolatey/chocolatey/issues?q=label%3Av0.9.8.33+is%3Aclosed) (Feb 11, 2015) \{#feb-11-2015} + +### Feature + +- Dynamically export helpers (this fixes helpers that were not visible before) - [#628](https://github.com/chocolatey/chocolatey/pull/628) + +### Improvements + +- Accept `-y` as a parameter, Add warning about -y for 0.9.9. +- Company name misspelled in shims - [#673](https://github.com/chocolatey/chocolatey/issues/673) and [shimgen #9](https://github.com/chocolatey/shimgen/issues/9) + +## [0.9.8.32](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.32&page=1&state=closed) (January 22, 2015) \{#january-22-2015} + +### Bug Fix + +- Fix - Chocolatey-Install should return non-zero exit code if chocolateyInstall.ps1 fails - [#568](https://github.com/chocolatey/chocolatey/issues/568) & [#658](https://github.com/chocolatey/chocolatey/pull/658) + +## [0.9.8.31](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.31&page=1&state=closed) (January 7, 2015) \{#january-7-2015} + +### Bug Fixes + +- Fix - Shim doesn't always shift off the first argument - [#655](https://github.com/chocolatey/chocolatey/issues/655) & [ShimGen #7](https://github.com/chocolatey/shimgen/issues/7) +- Fix - If executable isn't available, fallback to default icon - [#579](https://github.com/chocolatey/chocolatey/issues/579) + +## [0.9.8.30](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.30&page=1&state=closed) (January 6, 2015) \{#january-6-2015} + +### Feature + +- Use icon of the executable with generated shim - [#579](https://github.com/chocolatey/chocolatey/issues/579) & [ShimGen #2](https://github.com/chocolatey/shimgen/issues/2) + +### Bug Fix + +- Fix - Shims don't correctly handle spaces in path to shim - [#654](https://github.com/chocolatey/chocolatey/issues/654) & [ShimGen #5](https://github.com/chocolatey/shimgen/issues/5) + +## [0.9.8.29](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.29&page=1&state=closed) (January 2, 2015) \{#january-2-2015} + +### Features + +- Use icon of the executable with generated shim - [#579](https://github.com/chocolatey/chocolatey/issues/579) & [ShimGen #2](https://github.com/chocolatey/shimgen/issues/2) +- Allow setting custom temp download location - [#307](https://github.com/chocolatey/chocolatey/issues/307) + +### Improvements + +- Don't assume $env:TEMP or $env:UserProfile are set - [#647](https://github.com/chocolatey/chocolatey/issues/647) +- Remove Kickstarter message. + +## [0.9.8.28](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.28&page=1&state=closed) (November 4, 2014) \{#november-4-2014} + +### Breaking Change + +- You may need to update your saved API key for chocolatey, due to [#599](https://github.com/chocolatey/chocolatey/issues/599) we have switched push to ensure https. + +### Bug Fixes + +- Fix - Shim argument parsing needs fixed for quoting - [ShimGen #1](https://github.com/chocolatey/shimgen/issues/1) +- Fix - Forcing x86 does not use 32bit checksum - [#535](https://github.com/chocolatey/chocolatey/issues/535) +- Fix - Powershell v2 fails to download SSLv3 files - [#531](https://github.com/chocolatey/chocolatey/issues/531) +- Fix - Get-ChocolateyUnzip fails due to Wait-Process exception - [#571](https://github.com/chocolatey/chocolatey/issues/571) + +### Improvements + +- Use default credentials for internet if available - [#577](https://github.com/chocolatey/chocolatey/issues/577) +- Add moderation message on push - [#600](https://github.com/chocolatey/chocolatey/issues/600) +- Restrict all calls to chocolatey.org to HTTPS - [#599](https://github.com/chocolatey/chocolatey/issues/599) +- Batch fallback should quote path for spaces - [#558](https://github.com/chocolatey/chocolatey/issues/558) + +## [0.9.8.27](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.27&page=1&state=closed) (July 13, 2014) \{#july-13-2014} + +### Bug Fix + +- Fix - Posh v3+ Ignores -Wait when run from cmd.exe - [#516](https://github.com/chocolatey/chocolatey/pull/516) + +## [0.9.8.26](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.26&page=1&state=closed) (July 12, 2014) \{#july-12-2014} + +Pulled due to major breakage with #516 + +### Bug Fixes + +- Fix - Allow spaces in arguments to chocolatey again - Regenerate chocolatey included shims to take advantage of shimgen fixes - [#507](https://github.com/chocolatey/chocolatey/issues/507) +- Fix - Default path has changed, causing running without closing shell to have issues again - [#510](https://github.com/chocolatey/chocolatey/issues/510) +- Fix - Working directory of shimgen generated files points to path target executable is in (GUI apps only) - [#508](https://github.com/chocolatey/chocolatey/issues/508) +- Fix - cpack/cpush returns zero exit code even when error occurs - [#256](https://github.com/chocolatey/chocolatey/issues/256) & [#384](https://github.com/chocolatey/chocolatey/issues/384) +- Fix - Install error throws another error due to true instead of $true - [#514](https://github.com/chocolatey/chocolatey/pull/514) +- Fix - Posh v3+ Ignores -Wait when run from cmd.exe - [#516](https://github.com/chocolatey/chocolatey/pull/516) + +### Improvements + +- Allow to pass shimgen specific parameters - [#509](https://github.com/chocolatey/chocolatey/issues/509) +- Issue warning if user is not running an elevated shell - [#519](https://github.com/chocolatey/chocolatey/issues/519) + +## [0.9.8.25](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.25&page=1&state=closed) (July 7, 2014) \{#july-7-2014} + +### Bug Fixes + +- Fix - Shims that require admin may fail on UAC enforced machines (System.ComponentModel.Win32Exception: The requested operation requires elevation) - [#505](https://github.com/chocolatey/chocolatey/issues/505) +- Fix - Do not check content-length if there isn't a content-length returned from Get-WebHeaders - [#504](https://github.com/chocolatey/chocolatey/issues/504) + +## [0.9.8.24](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.24&page=1&state=closed) (July 3, 2014) \{#july-3-2014} + +### Breaking Changes + +- Enhancement - Default install to C:\ProgramData\chocolatey - [#452](https://github.com/chocolatey/chocolatey/issues/452) & [#494](https://github.com/chocolatey/chocolatey/issues/494) +- Don't allow $binroot to be set to c:\ - [#434](https://github.com/chocolatey/chocolatey/issues/434) - this is meant to be temporary while other pieces are fixed. + +### Features + +- Checksum downloaded files - [#427](https://github.com/chocolatey/chocolatey/issues/427) +- Replace Batch Redirector with Shims - [#372](https://github.com/chocolatey/chocolatey/issues/372) +- New Helper - Get-UACEnabled - [#451](https://github.com/chocolatey/chocolatey/issues/451) +- Enhancement - Install to Machine environment variable - [#453](https://github.com/chocolatey/chocolatey/issues/453) +- Enhancement - Install the .NET framework 4.0 requirement - [#255](https://github.com/chocolatey/chocolatey/issues/255) +- Update environment using command (RefreshEnv) - [#134](https://github.com/chocolatey/chocolatey/issues/134) +- `-quiet` parameter that silences almost all output / allow shutting off real write-host - [#416](https://github.com/chocolatey/chocolatey/pull/416) & [#411](https://github.com/chocolatey/chocolatey/issues/411) +- New Helpers - Test-ProcessAdminRights, Get-EnvironmentVariableNames, Get-EnvironmentVariable, Set-EnvironmentVariable - [#486](https://github.com/chocolatey/chocolatey/pull/486) + +### Bug Fixes + +- Fix - Cannot bind argument to parameter 'Path' because it is an empty string - [#371](https://github.com/chocolatey/chocolatey/issues/371) +- Fix - clist -source webpi doesn't prompt for admin access - [#293](https://github.com/chocolatey/chocolatey/issues/293) +- Fix - Get-ChocolateyUnzip silently fails due to incorrect usage of System32 (File System Redirector Issues) - [#476](https://github.com/chocolatey/chocolatey/pull/476) & [#455](https://github.com/chocolatey/chocolatey/issues/455) +- Fix - 7za.exe is subject to UAC file virtualization - [#454](https://github.com/chocolatey/chocolatey/issues/454) +- Fix - "You cannot call a method on a null-valued expression" introduced somewhere. - [#430](https://github.com/chocolatey/chocolatey/issues/430) +- Fix - Get-BinRoot defaulted to "C:\" instead of "C:\tools" - [#421](https://github.com/chocolatey/chocolatey/pull/421) +- Fix - Get-ProcessorBits doesn't return the bitness of the OperatingSystem - [#396](https://github.com/chocolatey/chocolatey/pull/396) +- Fix - Fix Invoke for Install All from a Feed (DEPRECATED by #446 - in improvements below) - [#381](https://github.com/chocolatey/chocolatey/issues/381) +- Fix - Upgrade to 0.9.8.24 produces cannot find Update-SessionEnvironment when using cmd.exe - [#459](https://github.com/chocolatey/chocolatey/issues/459) +- Fix - Package depending on newer chocolatey version is installed using existing version of chocolatey - [#460](https://github.com/chocolatey/chocolatey/issues/460) +- Fix - Bash improvements - [#383](https://github.com/chocolatey/chocolatey/pull/383) +- Fix - Resolve issue with DISM "missing" or with the 32-bit DISM being called on a 64-bit system - [#393](https://github.com/chocolatey/chocolatey/pull/393) +- Fix - Do NOT throw if missing a chocolateyuninstall.ps1 - [#499](https://github.com/chocolatey/chocolatey/issues/499) + +### Improvements + +- Do not download if file already cached - [#428](https://github.com/chocolatey/chocolatey/issues/428) & [#109](https://github.com/chocolatey/chocolatey/pull/109) +- If *.ignore file failes to create, do not fail the process - [#380](https://github.com/chocolatey/chocolatey/issues/380) +- Validate downloaded file is the right size - [#429](https://github.com/chocolatey/chocolatey/issues/429) +- Add perf to Chocolatey-List & allow to return as object - [#426](https://github.com/chocolatey/chocolatey/issues/426) +- Chocolatey-List LocalOnly performance improvements - [#425](https://github.com/chocolatey/chocolatey/pull/425) +- Chocolatey-Version Improvements - [#445](https://github.com/chocolatey/chocolatey/issues/445) +- Remove Invoke-Chocolatey Function to improve handling - [#446](https://github.com/chocolatey/chocolatey/issues/446) +- Don't create a window during Run-Nuget.ps1 - [#450](https://github.com/chocolatey/chocolatey/pull/450) +- Generate _env.cmd file instead of bat file for consistency - [#469](https://github.com/chocolatey/chocolatey/pull/469) +- Remove-BinFile removes shim.exes when installing a package - [#449](https://github.com/chocolatey/chocolatey/pull/449) +- Remove annoying "Reading environment variables from registry. Please wait..." - [#440](https://github.com/chocolatey/chocolatey/pull/440) +- Replace ascii cue to visual cue for "installing package" - [#376](https://github.com/chocolatey/chocolatey/pull/376) +- Clean up the verbosity of chocolatey - [#374](https://github.com/chocolatey/chocolatey/issues/374) +- Improve chocolatey setup as administrator - [#486](https://github.com/chocolatey/chocolatey/pull/486) +- Simplify Chocolatey-Update - [#493](https://github.com/chocolatey/chocolatey/issues/493) +- Update to Nuget.exe 2.8.2 - [#379](https://github.com/chocolatey/chocolatey/issues/379) + +## [0.9.8.23](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.23&page=1&state=closed) (November 11, 2013) \{#november-11-2013} + +### Bug Fixes + +- Fix - Chocolatey 0.9.8.22 incorrectly reports version as alpha1 [#368](https://github.com/chocolatey/chocolatey/issues/368) +- Fix - Some chocolatey commands with no arguments error [#369](https://github.com/chocolatey/chocolatey/issues/369) + +## [0.9.8.22](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.22&page=1&state=closed) (November 10, 2013) \{#november-10-2013} + +### Breaking Change + +- To use spaces and quotes, one should now use single quotation marks. It works best in both PowerShell and cmd. + +### Features + +- Enhancement - Add switch to force x86 when packages have both versions - [#365](https://github.com/chocolatey/chocolatey/issues/365) +- Enhancement - Allow passing parameters to packages - [#159](https://github.com/chocolatey/chocolatey/issues/159) + +### Bug Fix + +- Fix - Chocolatey 0.9.8.21 errors when using spaces or quotes with chocolatey or with batch redirect files [#367](https://github.com/chocolatey/chocolatey/issues/367) + +## [0.9.8.21](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.21&page=1&state=closed) (November 7, 2013) \{#november-7-2013} + +### Breaking Changes + +- Enhancement - For local package searching, use choco list -lo or choco search -lo. The execution speed is greatly increased. cver for local has been deprecated. - [#276](https://github.com/chocolatey/chocolatey/issues/276) +- Breaking - Chocolatey default sources no longer includes Nuget official feed. This will help improve response time and greatly increase relevant results. - [#349](https://github.com/chocolatey/chocolatey/issues/349) + +### Features + +- Enhancement - Support for Server Core - [#59](https://github.com/chocolatey/chocolatey/issues/59) +- Enhancement - Add a switch for ignoring dependencies on install `-ignoredependencies` - [#131](https://github.com/chocolatey/chocolatey/issues/131) +- Command - `choco` is now a default term +- Command - search is now a command (aliases list) `choco search something [-localonly]` +- Function - `Get-ProcessorBits` - tells you whether a processor is x86 or x64. This functionality was in chocolatey already but has been globalized for easy access. - [#231](https://github.com/chocolatey/chocolatey/issues/231) & [#229](https://github.com/chocolatey/chocolatey/issues/229) +- Function - `Get-BinRoot` - Gives package maintainers the ability to call one command that gets them the tools/bin root. This gives you the location where folks want certain packages installed. - [#359](https://github.com/chocolatey/chocolatey/pull/359) + +### Improvements + +- Enhancement - Install multiple packages by specifying them all on the same line - [#191](https://github.com/chocolatey/chocolatey/issues/191) +- Enhancement - Install .NET Framework 4.0 requirement if not already installed - [#255](https://github.com/chocolatey/chocolatey/issues/255) +- Enhancement - Refresh command line PATH after installs - partial to [#134](https://github.com/chocolatey/chocolatey/issues/134) - Previously we were just doing it in chocolatey with [#158](https://github.com/chocolatey/chocolatey/issues/158) +- Enhancement - Allow chocolatey to install when zip shell extensions are disabled - [#297](https://github.com/chocolatey/chocolatey/issues/297) +- Enhancement - Support for bash and similar shells - [#347](https://github.com/chocolatey/chocolatey/issues/347) & [#258](https://github.com/chocolatey/chocolatey/issues/258) +- Enhancement - Allow file uri to be used when downloading files - [#322](https://github.com/chocolatey/chocolatey/issues/322) +- Enhancement - Chocolatey version all versions returned for specific local package. - [#260](https://github.com/chocolatey/chocolatey/issues/260) +- Enhancement - Exit codes return appropriately - [#210](https://github.com/chocolatey/chocolatey/issues/210) +- Enhancement - Better logging support - [#208](https://github.com/chocolatey/chocolatey/issues/208) + +### Bug Fixes + +- Fix - Treat installation failures appropriately - [#10](https://github.com/chocolatey/chocolatey/issues/10) +- Fix - Using newer versions of nuget breaks chocolatey - [#303](https://github.com/chocolatey/chocolatey/issues/303) +- Fix - Chocolatey incorrectly reports 64 bit urls when downloading anything - [#331](https://github.com/chocolatey/chocolatey/issues/331) +- Fix - Executing `cuninst` without parameters shouldn't do anything - [#267](https://github.com/chocolatey/chocolatey/issues/267) & [#265](https://github.com/chocolatey/chocolatey/issues/265) +- Fix - VSIX installer helper is finding the wrong Visual Studio version - [#262](https://github.com/chocolatey/chocolatey/issues/262) +- Fix - Renaming logs appending `.old` results in error - [#225](https://github.com/chocolatey/chocolatey/issues/225) +- Fix - Minor typo in uninstall script "uninINstalling" - [#247](https://github.com/chocolatey/chocolatey/issues/247) +- Fix - Bug in Get-ChocolateyUnzip throws issues sometimes [#244](https://github.com/chocolatey/chocolatey/issues/244) & [#242](https://github.com/chocolatey/chocolatey/issues/242) +- Fix - Minor typo "succesfully" - [#241](https://github.com/chocolatey/chocolatey/issues/241) + + +## [0.9.8.20](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.20&page=1&state=closed) (December 11, 2012) \{#december-11-2012} + +### Features + +- Command - Win Feature feed - [#150](https://github.com/chocolatey/chocolatey/pull/150) +- Function - Add function to install environment variables - [#149](https://github.com/chocolatey/chocolatey/pull/149) +- Function - Function to associate file extensions with installed executables - [#146](https://github.com/chocolatey/chocolatey/pull/146) +- Function - Helper function to create explorer context menu items - [#144](https://github.com/chocolatey/chocolatey/pull/144) +- Function - Helper function for pinning items to task bar - [#143](https://github.com/chocolatey/chocolatey/pull/143) & [#141](https://github.com/chocolatey/chocolatey/pull/141) +- Command - Sources command - [#138](https://github.com/chocolatey/chocolatey/pull/138) +- Command - Provide a way to list all the installed packages - [#125](https://github.com/chocolatey/chocolatey/issues/125) + +### Improvements + +- Enhancement - Added FTP support for the chocolatey file downloader. - [#137](https://github.com/chocolatey/chocolatey/pull/137) +- Enhancement - Block installer exe from being "bin"-ed - [#174](https://github.com/chocolatey/chocolatey/issues/174) +- Enhancement - Making the unzip process silent - [#180](https://github.com/chocolatey/chocolatey/pull/180) +- Enhancement - Makes install args more explicit - [#179](https://github.com/chocolatey/chocolatey/pull/179) +- Enhancement - Update Write-Progress every 5000 iterations instead of every iteration - [#177](https://github.com/chocolatey/chocolatey/pull/177) +- Enhancement - Codeplex Support - [#176](https://github.com/chocolatey/chocolatey/issues/176) +- Enhancement - Fix downloads greater than 2GB - [#173](https://github.com/chocolatey/chocolatey/pull/173) +- Enhancement - Add -verbose switch for clist support to see package description - [#166](https://github.com/chocolatey/chocolatey/pull/166) +- Enhancement - Refresh env vars after Install - [#158](https://github.com/chocolatey/chocolatey/pull/158) & [#153](https://github.com/chocolatey/chocolatey/issues/153) +- Enhancement - Add EditorConfig file denoting coding style. - [#123](https://github.com/chocolatey/chocolatey/pull/123) +- Enhancement - Chocolatey-Version Remote Check - [#119](https://github.com/chocolatey/chocolatey/pull/119) +- Enhancement - Write every unzip path/file to a text file - [#114](https://github.com/chocolatey/chocolatey/pull/114) + +### Bug Fixes + +- Fix - "Execution of NuGet not detected" error. - [#151](https://github.com/chocolatey/chocolatey/pull/151) +- Fix - chocolatey.bat can't find chocolatey.cmd - [#152](https://github.com/chocolatey/chocolatey/issues/152) +- Fix - `chocolatey version all` prints only the last package's information - [#183](https://github.com/chocolatey/chocolatey/pull/183) +- Fix - Issue with $processor.addresswidth var - [#121](https://github.com/chocolatey/chocolatey/pull/121) + +## [0.9.8.19](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.19&page=1&state=closed) (July 2, 2012) \{#july-2-2012} + +### Feature + +- Enhancement - Allow community extensions - [#115](https://github.com/chocolatey/chocolatey/issues/115) + +### Bug Fixes + +- Fix - PowerShell v3 doesn't like foreach loop (prefers ForEach-Object) - [#116](https://github.com/chocolatey/chocolatey/pull/116) +- Fix - Cannot install Python packages on Windows 8 - [#117](https://github.com/chocolatey/chocolatey/issues/117) + +## [0.9.8.18](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.18&sort=created&direction=desc&state=closed&page=1) (June 16, 2012) \{#june-16-2012} + +### Bug Fix + +- Fix - 0.9.8.17 installer doesn't create chocolatey folder if it doesn't exist - [#112](https://github.com/chocolatey/chocolatey/issues/112) + +## [0.9.8.17](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.17&sort=created&direction=desc&state=closed&page=1) (June 15, 2012) \{#june-15-2012} + +### Feature + +- Enhancement - Support for naive uninstall - [#96](https://github.com/chocolatey/chocolatey/issues/96) + +### Improvements + +- Enhancement - Sources specified through config (or nuget.config) - [#101](https://github.com/chocolatey/chocolatey/pull/101) +- Enhancement - Chocolatey should support multiple sources - [#82](https://github.com/chocolatey/chocolatey/issues/82) +- Enhancement - Use Cygwin as a package source - [#93](https://github.com/chocolatey/chocolatey/pull/93) +- Enhancement - Use Python as a package source (uses easy_install) - [#100](https://github.com/chocolatey/chocolatey/issues/100) +- Enhancement - Use Default Credentials before Get-Credentials when using proxy on web call - [#83](https://github.com/chocolatey/chocolatey/pull/83) +- Enhancement - Reduce the verbosity of running chocolatey - [#84](https://github.com/chocolatey/chocolatey/issues/84) +- Enhancement - Support opening links to "GUI" type applications in a different way than the console apps - [#76](https://github.com/chocolatey/chocolatey/issues/76) +- Enhancement - Do not create batch redirects for certain executables in package folder - [#106](https://github.com/chocolatey/chocolatey/issues/106) +- Enhancement - Add a -debug switch - [#85](https://github.com/chocolatey/chocolatey/issues/85) +- Enhancement - Improve pipelining of cver by returning an object - [#94](https://github.com/chocolatey/chocolatey/pull/94) + +### Bug Fixes + +- Fix - Packages.config source now uses chocolatey/nuget sources by default instead of empty - [#79](https://github.com/chocolatey/chocolatey/issues/79) +- Fix - Executable batch links not created for "prerelease" versions - [#88](https://github.com/chocolatey/chocolatey/issues/88) +- Fix - Issue where latest version is not returned - [#92](https://github.com/chocolatey/chocolatey/pull/92) +- Fix - Prerelease versions now broken out as separate versions - [#90](https://github.com/chocolatey/chocolatey/issues/90) +- Fix - During install PowerShell session gets bad $env:ChocolateyInstall variable - [#80](https://github.com/chocolatey/chocolatey/issues/80) +- Fix - Build path with spaces now works - [#102](https://github.com/chocolatey/chocolatey/pull/102) + +## 0.9.8.16 (February 27, 2012) \{#february-27-2012} + +### Bug Fix + +- Small fix to installer for upgrade issues from 0.9.8.15 + +## [0.9.8.15](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.15&sort=created&direction=desc&state=closed&page=1) (February 27, 2012) \{#february-27-2012} + +### Breaking Changes + +- Enhancement - Chocolatey's default folder is now C:\Chocolatey (and no longer C:\NuGet) - [#58](https://github.com/chocolatey/chocolatey/issues/58) +- Enhancement - Use -force to reinstall existing packages - [#45](https://github.com/chocolatey/chocolatey/issues/45) + +### Feature + +- Enhancement - Install now supports **all** with a custom package source to install every package from a source! - [#46](https://github.com/chocolatey/chocolatey/issues/46) + +### Improvements + +- Enhancement - Support Prerelease flag for Install - [#71](https://github.com/chocolatey/chocolatey/issues/71) +- Enhancement - Support Prerelease flag for Update/Version - [#72](https://github.com/chocolatey/chocolatey/issues/72) +- Enhancement - Support Prerelease flag in List - [#74](https://github.com/chocolatey/chocolatey/issues/74) + +### Bug Fix + +- Fix - Parsing the wrong version when trying to update - [#73](https://github.com/chocolatey/chocolatey/issues/73) + +## [0.9.8.14](https://github.com/chocolatey/chocolatey/issues?labels=v0.9.8.14&sort=created&direction=desc&state=closed&page=1) (February 6, 2012) \{#february-6-2012} + +### Improvements + +- Enhancement - Pass ValidExitCodes to Install Helpers - [#54](https://github.com/chocolatey/chocolatey/issues/54) +- Enhancement - Add 64-bit url to Install-ChocolateyZipPackage - [#48](https://github.com/chocolatey/chocolatey/issues/48) +- Enhancement - Add 64-bit url to Install-ChocolateyPowershellCommand - [#57](https://github.com/chocolatey/chocolatey/issues/57) +- Enhancement - Make the main helpers work with files not coming over HTTP - [#51](https://github.com/chocolatey/chocolatey/issues/51) +- Enhancement - Upgrade NuGet.exe to 1.6.0 to take advantage of prerelease packaging - [#64](https://github.com/chocolatey/chocolatey/issues/64) + +### Bug Fixes + +- Fix - The packages.config feature has broken naming packages with '.config' - [#56](https://github.com/chocolatey/chocolatey/issues/56) +- Fix - CList includes all versions without adding the switch - [#60](https://github.com/chocolatey/chocolatey/issues/60) +- Fix - When NuGet.exe failes to run due to .NET Framework 4.0 not installed, chocolatey should report that. - [#65](https://github.com/chocolatey/chocolatey/issues/65) + +## [0.9.8.13](https://github.com/chocolatey/chocolatey/issues?labels=0.9.8.13&sort=created&direction=desc&state=closed&page=1) (January 8, 2012) \{#january-8-2012} + +### Features + +- New Command! Enhancement - Integration with Ruby Gems (`cgem packageName` or `cinst packageName -source ruby`) - [#29](https://github.com/chocolatey/chocolatey/issues/29) +- New Command! Enhancement - Integration with Web PI (`cwebpi packageName` or `cinst packageName -source webpi`) - [#28](https://github.com/chocolatey/chocolatey/issues/28) +- Enhancement - Call chocolatey install with packages.config file (thanks AnthonyMastrean!) - [#31](https://github.com/chocolatey/chocolatey/issues/31) and [#43](https://github.com/chocolatey/chocolatey/pull/43) and [#50](https://github.com/chocolatey/chocolatey/issues/50) +- New Command! Enhancement - Chocolatey Push (`chocolatey push packageName.nupkg` or `cpush packageName.nupkg`) - [#36](https://github.com/chocolatey/chocolatey/issues/36) +- New Command! Enhancement - Chocolatey Pack (`chocolatey pack [packageName.nuspec]` or `cpack [packageName.nuspec]`) - [#35](https://github.com/chocolatey/chocolatey/issues/35) + +### Improvements + +- Enhancement - @datachomp feature - Override Installer Arguments `chocolatey install packageName -installArgs "args to override" -override` or `cinst packageName -ia "args to override" -o`) - [#40](https://github.com/chocolatey/chocolatey/issues/40) +- Enhancement - @datachomp feature - Append Installer Arguments (`chocolatey install packageName -installArgs "args to append"` or `cinst packageName -ia "args to append"`) - [#39](https://github.com/chocolatey/chocolatey/issues/39) +- Enhancement - Run installer in not silent mode (`chocolatey install packageName -notSilent` or `cinst packageName -notSilent`) - [#42](https://github.com/chocolatey/chocolatey/issues/42) +- Enhancement - List available Web PI packages (`clist -source webpi`) - [#37](https://github.com/chocolatey/chocolatey/issues/37) +- Enhancement - List command should allow the All or AllVersions switch - [#38](https://github.com/chocolatey/chocolatey/issues/38) +- Enhancement - Any install will create the ChocolateyInstall environment variable so that installers can take advantage of it - [#30](https://github.com/chocolatey/chocolatey/issues/30) + +### Bug Fixes + +- Fixing an issue on proxy display message (Thanks jasonmueller!) - [#44](https://github.com/chocolatey/chocolatey/pull/44) +- Fixing the source path to allow for spaces (where chocolatey is installed) - [#33](https://github.com/chocolatey/chocolatey/issues/33) +- Fixing the culture to InvariantCulture to eliminate the turkish "I" issue - [#22](https://github.com/chocolatey/chocolatey/issues/22) + +## 0.9.8.12 (November 20, 2011) \{#november-20-2011} + +### Improvement + +- Enhancement - Reducing the number of window pop ups - [#25](https://github.com/chocolatey/chocolatey/issues/25) + +### Bug Fixes + +- Fixed an issue with write-host and write-error overrides that happens in the next version of PowerShell - [#24](https://github.com/chocolatey/chocolatey/pull/24) +- Fixing an issue that happens when PowerShell is not on the path - [#23](https://github.com/chocolatey/chocolatey/issues/23) +- Fixing the replacement of capital ".EXE" in addition to lowercase ".exe" when creating batch redirects - [#26](https://github.com/chocolatey/chocolatey/issues/26) + +## 0.9.8.11 (October 4, 2011) \{#october-4-2011} + +### Bug Fixes + +- Fixing an update issue if the package only exists on chocolatey.org - [#16](https://github.com/chocolatey/chocolatey/issues/16) +- Fixing an issue with install missing if the package never existed - [#13](https://github.com/chocolatey/chocolatey/issues/13) + +## 0.9.8.10 (September 17, 2011) \{#september-17-2011} + +### Feature + +- New Helper! Install-ChocolateyPowershellCommand - install a PowerShell script as a command - [#11](https://github.com/chocolatey/chocolatey/issues/11) + +## 0.9.8.9 (September 10, 2011) \{#september-10-2011} + +### Bug Fix + +- Reinstalls an existing package if -version (0.9.8.7+) or --version (>=0.9.9.0) is passed (first surfaced in 0.9.8.7 w/NuGet 1.5) - [#9](https://github.com/chocolatey/chocolatey/issues/9) + +## 0.9.8.8 (September 10, 2011) \{#september-10-2011} + +### Bug Fixes + +- Fixing version comparison - [#4](https://github.com/chocolatey/chocolatey/issues/4) +- Fixed package selector to not select like named packages (i.e. ruby.devkit when getting information about ruby) - [#3](https://github.com/chocolatey/chocolatey/issues/3) + +## 0.9.8.7 (September 2, 2011) \{#september-2-2011} + +### Improvements + +- Added proxy support based on [#1](https://github.com/chocolatey/chocolatey/issues/1) +- Updated to work with NuGet 1.5 - [#2](https://github.com/chocolatey/chocolatey/issues/2) + +## 0.9.8.6 (July 27, 2011) \{#july-27-2011} + +### Bug Fix + +- Fixed a bug introduced in 0.9.8.5 - Start-ChocolateyProcessAsAdmin erroring out when setting machine path as a result of trying to log the message. + +## 0.9.8.5 (July 27, 2011) \{#july-27-2011} + +### Improvements + +- Improving Run-ChocolateyProcessAsAdmin to allow for running entire functions as administrator by importing helpers to that command if using PowerShell. +- Updating some of the notes. + +### Bug Fix + +- Fixed bug in installer when User Environment Path is null. + +## 0.9.8.4 (July 27, 2011) \{#july-27-2011} + +### Bug Fix + +- Fixed a small issue with the Install-ChocolateyDesktopLink + +## 0.9.8.3 (July 7, 2011) \{#july-7-2011} + +### Breaking Change + +- Chocolatey no longer runs the entire PowerShell script as an administrator. With the addition of the Start-ChocolateyProcessAsAdmin, this is how you will get to administrative tasks outside of the helpers. + +### Features + +- New chocolatey command! InstallMissing allows you to install a package only if it is not already installed. Shortcut is 'cinstm'. +- New Helper! Install-ChocolateyPath - give it a path for out of band items that are not imported to path with chocolatey +- New Helper! Start-ChocolateyProcessAsAdmin - this allows you to run processes as administrator +- New Helper! Install-ChocolateyDesktopLink - put shortcuts on the desktop + +### Improvements + +- NuGet updated to v1.4 +- Much of the error handling is improved. There are two new Helpers to call (ChocolateySuccess and Write-ChocolateyFailure). +- Chocolatey no longer needs administrative rights to install itself. + +## 0.9.8.2 (May 21, 2011) \{#may-21-2011} + +### Feature + +- You now have the option of a custom installation folder. Thanks Jason Jarrett! + +## 0.9.8.1 (May 18, 2011) \{#may-18-2011} + +### Bug Fix + +- General fix to bad character in file. Fixed selection for update as well. + +## 0.9.8 (May 4, 2011) \{#may-4-2011} + +### Breaking Change + +- A dependency will not reinstall once it has been installed. To have it reinstall, you can install it directly (or delete it from the repository and run the core package). + +### Improvements + +- Shortcuts have been added: 'cup' for 'chocolatey update', 'cver' for 'chocolatey version', and 'clist' for 'chocolatey list'. +- Update only runs if newer version detected. +- Calling update with no arguments will update chocolatey. +- Calling update with all will update your entire chocolatey repository. + +## 0.9.7.3 (April 30, 2011) \{#april-30-2011} + +### Bug Fix + +- Fixing Install-ChocolateyZipPackage so that it works again. + +## 0.9.7.2 (April 29, 2011) \{#april-29-2011} + +### Bug Fix + +- Fixing an underlying issue with not having silent arguments for exe files. + +## 0.9.7.1 (April 29, 2011) \{#april-29-2011} + +### Bug Fixes + +- Fixing an introduced bug where the downloader didn't get the file name passed to it. + +## 0.9.7 (April 29, 2011) \{#april-29-2011} + +### Features + +- New helper added Install-ChocolateyInstallPackage - this was previously part of the download & install and has been broken out. +- New chocolatey command! Version allows you to see if a package you have installed is the most up to date. Leave out package and it will check for chocolatey itself. + +### Improvements + +- The PowerShell module is automatically loaded, so packages no longer need to import the module. This means one line chocolateyInstall.ps1 files! +- Error handling is improved. +- Silent installer override for msi has been removed to allow for additional arguments that need to be passed. + +## 0.9.6.4 (April 26, 2011) \{#april-26-2011} + +### Improvement + +- Remove PowerShell execution timeout. + +## 0.9.6.3 (April 25, 2011) \{#april-25-2011} + +### Feature + +- New Helper added Install-ChocolateyZipPackage - this wraps the two upper commands into one smaller command and addresses the file name bug. + +## 0.9.6.2 (April 25, 2011) \{#april-25-2011} + +### Bug Fix + +- Addressed a small bug in getting back the file name from the helper. + +## 0.9.6.1 (April 23, 2011) \{#april-23-2011} + +### Improvement + +- Adding in ability to find a dependency when the version doesn't exist. + +## 0.9.6 (April 23, 2011) \{#april-23-2011} + +### Improvement + +- Can execute PowerShell and chocolatey without having to change execution rights to PowerShell system wide. + +### Features + +- New Helper added - Get-ChocolateyWebFile - downloads a file from a url and gives you back the location of the file once complete. +- New Helper added - Get-ChocolateyZipContents - unzips a file to a directory of your choosing. + +## 0.9.5 (April 21, 2011) \{#april-21-2011} + +### Feature + +- Helper for native installer added (Install-ChocolateyPackage). Reduces the amount of PowerShell necessary to download and install a native package to two lines from over 25. + +### Improvements + +- Helper outputs progress during download. +- Dependency runner is complete. + +## 0.9.4 (April 10, 2011) \{#april-10-2011} + +### Improvements + +- List command has a filter. +- Package license acceptance terms notated. + +## 0.9.3 (April 4, 2011) \{#april-4-2011} + +### Improvement + +- You can now pass -source and -version (\<0.9.9.0) or --version (\>=0.9.9.0) to install command. + +## 0.9.2 (April 4, 2011) \{#april-4-2011} + +### Feature + +- List command added. + +## 0.9.1 (March 30, 2011) \{#march-30-2011} + +### Improvement + +- Shortcut for 'chocolatey install' - 'cinst' now available. diff --git a/src/content/docs/en-us/choco/sensitive-inputs.mdx b/src/content/docs/en-us/choco/sensitive-inputs.mdx new file mode 100644 index 00000000000..0b516ff76f0 --- /dev/null +++ b/src/content/docs/en-us/choco/sensitive-inputs.mdx @@ -0,0 +1,28 @@ +--- +order: 35 +xref: sensitive-inputs +title: Sensitive Inputs +description: Information on inputs that are hidden from the Chocolatey logs if detected +--- +import Xref from '@components/Xref.astro'; + +By default Chocolatey will omit logging commands or parameters that could potentially contain sensitive information. + +## Commands hidden from logs + +* `apikey` +* `config` +* `push` + +## Parameters hidden from logs + +* `--install-arguments-sensitive` +* `--package-parameters-sensitive` +* `-p` +* `--password` +* `-cp` +* `--certpassword` +* `-k` +* `--key` +* `--apikey` +* `--api-key` diff --git a/src/content/docs/en-us/choco/setup.mdx b/src/content/docs/en-us/choco/setup.mdx new file mode 100644 index 00000000000..4985da40957 --- /dev/null +++ b/src/content/docs/en-us/choco/setup.mdx @@ -0,0 +1,910 @@ +--- +order: 20 +xref: setup-choco +title: Setup / Install +description: How to install Chocolatey CLI +--- +import Xref from '@components/Xref.astro'; + +## Requirements + +- +- Windows PowerShell v2.0 or higher + - Windows PowerShell v3 is required for directly installing Chocolatey CLI from the Chocolatey Community Repository due to the [TLS 1.2 requirement](https://blog.chocolatey.org/2020/01/remove-support-for-old-tls-versions/) + +### Chocolatey CLI v2.0+ + +- .NET Framework 4.8 + - The installation script will attempt to install .NET 4.8 if it is not installed. + +### Chocolatey CLI v1.x + +- .NET Framework 4+ + - The installation will attempt to install .NET 4.0 if you do not have it installed + - .NET Framework 4.5+ is required for installing directly from the Chocolatey Community Repository, due to the [TLS 1.2 requirement](https://blog.chocolatey.org/2020/01/remove-support-for-old-tls-versions/) + +## Installing Chocolatey CLI + +1. First, ensure that you are using an **[administrative shell](https://www.howtogeek.com/194041/how-to-open-the-command-prompt-as-administrator-in-windows-10/)**. + - Refer to [Non-Administrative Installation](#non-administrative-install) for information on installing without administrative rights. +1. Copy the text specific to your command shell - [cmd.exe](#install-with-cmd.exe) or [powershell.exe](#install-with-powershell.exe). +1. Paste the copied text into your shell and press Enter. +1. Wait a few seconds for the command to complete. +1. If you don't see any errors, you are ready to use Chocolatey CLI! +1. Type `choco` or `choco -?` now, or see for usage instructions. + +> :choco-info: **NOTE** +> * If you are behind a proxy, please see Installing behind a proxy. +> * Need completely offline solution? See Completely Offline Install. +> * Installing the licensed edition? See . +> * More Options / + +#### Install with cmd.exe + +Run the following command: + +```powershell + +@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" + +``` + +#### Install with PowerShell.exe + +With PowerShell, there is an additional step. You must ensure [Get-ExecutionPolicy](https://go.microsoft.com/fwlink/?LinkID=135170) is not Restricted. We suggest using `Bypass` to bypass the policy to get things installed or `AllSigned` for quite a bit more security. + +* Run `Get-ExecutionPolicy`. If it returns `Restricted`, then run `Set-ExecutionPolicy AllSigned` or `Set-ExecutionPolicy Bypass -Scope Process`. +* Now run the following command: + +```powershell + +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + +``` + +#### Additional considerations + +> :choco-info: **NOTE** +> +> Please inspect [https://community.chocolatey.org/install.ps1](https://community.chocolatey.org/install.ps1) prior to running any of these scripts to ensure safety. We already know it's safe, but you should verify the security and contents of **any** script from the internet you are not familiar with. All of these scripts download a remote PowerShell script and execute it on your machine. + +We take security very seriously. . + +> "Why do I need to enable TLS 1.2 in PowerShell? Shouldn't it be on by default when I load PowerShell?" + +Unfortunately it's not always a default, and more of the time it is not. The low level is that it depends on .NET Framework and Windows. + +* Explicitly set - Basically you need .NET Fx 4.5 at a minimum to be able to explicitly set TLS 1.2. +* Load by default - To have it load by default when you run PowerShell, you need at least .NET Fx 4.7 AND the Operating System's SystemDefault to have TLS 1.2 enabled. + +The load by default is really hard to see, so you should check to ensure it is there. Assume it doesn't and set explicitly. + +## More Install Options + +**Troubleshooting? Proxy? Need more options?** + + + +
    + +* [Install from PowerShell v3+](#install-from-powershell-v3) +* [Install using the MSI](#install-using-the-msi) +* [Install using WinGet](#install-using-winget) +* [Completely offline/internal install](#completely-offline-install) +* [Install with Puppet](#install-with-puppet) +* [Install using PowerShell from cmd.exe](#install-using-powershell-from-cmd.exe) +* [Install using NuGet Package Manager](#install-using-nuget-package-manager) +* [Install using NuGet.exe from PowerShell](#install-using-nuget.exe-from-powershell) +* [Install downloaded NuGet package from PowerShell](#install-downloaded-nuget-package-from-powershell) +* [Install licensed edition](#install-licensed-edition) +* [Installing behind a proxy](#installing-behind-a-proxy) +* [Installing behind an explicit proxy](#installing-behind-an-explicit-proxy) +* [Installing to a different location](#installing-to-a-different-location) +* [Installing a particular version of Chocolatey](#installing-a-particular-version-of-chocolatey) +* [Use Windows built-in compression instead of downloading 7zip](#use-windows-built-in-compression-instead-of-downloading-7zip) +* [Installing with restricted TLS](#installing-with-restricted-tls) +* [Non-Administrative install](#non-administrative-install) + +### Install from PowerShell v3+ + +> :choco-info: **NOTE** +> +> The command for installing with PowerShell at the top of the page works for all versions of PowerShell from v2 on. This is provided as an additional note for folks who want a more terse command that is easier to remember. + +With PowerShell, there is an additional step or two. You must ensure [Get-ExecutionPolicy](https://go.microsoft.com/fwlink/?LinkID=135170) is not Restricted. We suggest using `Bypass` to bypass the policy to get things installed or `AllSigned` for quite a bit more security. + +* Run `Get-ExecutionPolicy`. If it returns `Restricted`, then run `Set-ExecutionPolicy AllSigned` or `Set-ExecutionPolicy Bypass`. +* Now run the following command: + +```powershell + +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iwr https://community.chocolatey.org/install.ps1 -UseBasicParsing | iex + +``` + +### Install using the MSI? + +From version 2.0.0 of Chocolatey CLI we provide an MSI for installation, allowing you to deploy using your existing tools. Once installed, use Chocolatey CLI as normal to upgrade. + +The MSI is provided as an asset on each GitHub release of Chocolatey CLI 2.0.0 onwards. See the assets section on the [Chocolatey GitHub repository release page](https://github.com/chocolatey/choco/releases). + +### Install using WinGet + +You can install Chocolatey CLI version 2.0.0 and later through WinGet by running `winget install --id chocolatey.chocolatey --source winget`. Once installed, use Chocolatey CLI as normal to upgrade. + +### Completely offline install + +With completely offline use of Chocolatey, you want to ensure you remove the default community package source (`choco source list` followed by `choco source remove --name chocolatey`, or however you would do that with a configuration manager [like Puppet](https://forge.puppet.com/puppetlabs/chocolatey#sources-configuration)). + +1. The first step with offline is to obtain a copy of the Chocolatey Nupkg (nupkg files are just fancy zip files). Go to https://community.chocolatey.org/packages/chocolatey and find a version you want. +1. Click on Download to download that version's nupkg file. + + ![download chocolatey.nupkg visual](/images/DownloadChocolateyPackage.png) + +1. You can also download [the latest version directly](https://community.chocolatey.org/api/v2/package/chocolatey). +1. You can put the chocolatey.nupkg on an internal package repository and then address that full path, similar to how you see in the Puppet provider - https://forge.puppet.com/modules/puppetlabs/chocolatey/readme#manage-chocolatey-installation +1. Then you would run a script similar to the below to address that local install. If it is on a repository somewhere, you will need to enhance the below script to get that file (the Chocolatey Puppet provider install script shows that). + +```powershell +# Download and install Chocolatey nupkg from an OData (HTTP/HTTPS) url such as Artifactory, Nexus, ProGet (all of these are recommended for organizational use), or Chocolatey.Server (great for smaller organizations and POCs) +# This is where you see the top level API - with xml to Packages - should look nearly the same as https://community.chocolatey.org/api/v2/ +# If you are using Nexus, always add the trailing slash or it won't work +# === EDIT HERE === +$packageRepo = '' + +# If the above $packageRepo repository requires authentication, add the username and password here. Otherwise these leave these as empty strings. +$repoUsername = '' # this must be empty is NOT using authentication +$repoPassword = '' # this must be empty if NOT using authentication + +# Determine unzipping method +# 7zip is the most compatible, but you need an internally hosted 7za.exe. +# Make sure the version matches for the arguments as well. +# Built-in does not work with Server Core, but if you have PowerShell 5 +# it uses Expand-Archive instead of COM +$unzipMethod = 'builtin' +#$unzipMethod = '7zip' +#$7zipUrl = 'https://chocolatey.org/7za.exe' (download this file, host internally, and update this to internal) + +# === ENVIRONMENT VARIABLES YOU CAN SET === +# Prior to running this script, in a PowerShell session, you can set the +# following environment variables and it will affect the output + +# - $env:ChocolateyEnvironmentDebug = 'true' # see output +# - $env:chocolateyIgnoreProxy = 'true' # ignore proxy +# - $env:chocolateyProxyLocation = '' # explicit proxy +# - $env:chocolateyProxyUser = '' # explicit proxy user name (optional) +# - $env:chocolateyProxyPassword = '' # explicit proxy password (optional) + +# === NO NEED TO EDIT ANYTHING BELOW THIS LINE === +# Ensure we can run everything +Set-ExecutionPolicy Bypass -Scope Process -Force; + +# If the repository requires authentication, create the Credential object +if ((-not [string]::IsNullOrEmpty($repoUsername)) -and (-not [string]::IsNullOrEmpty($repoPassword))) { + $securePassword = ConvertTo-SecureString $repoPassword -AsPlainText -Force + $repoCreds = New-Object System.Management.Automation.PSCredential ($repoUsername, $securePassword) +} + +$searchUrl = ($packageRepo.Trim('/'), 'Packages()?$filter=(Id%20eq%20%27chocolatey%27)%20and%20IsLatestVersion') -join '/' + +# Reroute TEMP to a local location +New-Item $env:ALLUSERSPROFILE\choco-cache -ItemType Directory -Force +$env:TEMP = "$env:ALLUSERSPROFILE\choco-cache" + +$localChocolateyPackageFilePath = Join-Path $env:TEMP 'chocolatey.nupkg' +$ChocoInstallPath = "$($env:SystemDrive)\ProgramData\Chocolatey\bin" +$env:ChocolateyInstall = "$($env:SystemDrive)\ProgramData\Chocolatey" +$env:Path += ";$ChocoInstallPath" +$DebugPreference = 'Continue'; + +# PowerShell v2/3 caches the output stream. Then it throws errors due +# to the FileStream not being what is expected. Fixes "The OS handle's +# position is not what FileStream expected. Do not use a handle +# simultaneously in one FileStream and in Win32 code or another +# FileStream." +function Fix-PowerShellOutputRedirectionBug { + $poshMajorVerion = $PSVersionTable.PSVersion.Major + + if ($poshMajorVerion -lt 4) { + try{ + # http://www.leeholmes.com/blog/2008/07/30/workaround-the-os-handles-position-is-not-what-filestream-expected/ plus comments + $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField" + $objectRef = $host.GetType().GetField("externalHostRef", $bindingFlags).GetValue($host) + $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty" + $consoleHost = $objectRef.GetType().GetProperty("Value", $bindingFlags).GetValue($objectRef, @()) + [void] $consoleHost.GetType().GetProperty("IsStandardOutputRedirected", $bindingFlags).GetValue($consoleHost, @()) + $bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField" + $field = $consoleHost.GetType().GetField("standardOutputWriter", $bindingFlags) + $field.SetValue($consoleHost, [Console]::Out) + [void] $consoleHost.GetType().GetProperty("IsStandardErrorRedirected", $bindingFlags).GetValue($consoleHost, @()) + $field2 = $consoleHost.GetType().GetField("standardErrorWriter", $bindingFlags) + $field2.SetValue($consoleHost, [Console]::Error) + } catch { + Write-Output 'Unable to apply redirection fix.' + } + } +} + +Fix-PowerShellOutputRedirectionBug + +# Attempt to set highest encryption available for SecurityProtocol. +# PowerShell will not set this by default (until maybe .NET 4.6.x). This +# will typically produce a message for PowerShell v2 (just an info +# message though) +try { + # Set TLS 1.2 (3072), then TLS 1.1 (768), then TLS 1.0 (192), finally SSL 3.0 (48) + # Use integers because the enumeration values for TLS 1.2 and TLS 1.1 won't + # exist in .NET 4.0, even though they are addressable if .NET 4.5+ is + # installed (.NET 4.5 is an in-place upgrade). + [System.Net.ServicePointManager]::SecurityProtocol = 3072 -bor 768 -bor 192 -bor 48 +} catch { + Write-Output 'Unable to set PowerShell to use TLS 1.2 and TLS 1.1 due to old .NET Framework installed. If you see underlying connection closed or trust errors, you may need to upgrade to .NET Framework 4.5+ and PowerShell v3+.' +} + +function Get-Downloader { +param ( + [string]$url + ) + $downloader = new-object System.Net.WebClient + + $defaultCreds = [System.Net.CredentialCache]::DefaultCredentials + if (Test-Path -Path variable:repoCreds) { + Write-Debug "Using provided repository authentication credentials." + $downloader.Credentials = $repoCreds + } elseif ($defaultCreds -ne $null) { + Write-Debug "Using default repository authentication credentials." + $downloader.Credentials = $defaultCreds + } + + $ignoreProxy = $env:chocolateyIgnoreProxy + if ($ignoreProxy -ne $null -and $ignoreProxy -eq 'true') { + Write-Debug 'Explicitly bypassing proxy due to user environment variable.' + $downloader.Proxy = [System.Net.GlobalProxySelection]::GetEmptyWebProxy() + } else { + # check if a proxy is required + $explicitProxy = $env:chocolateyProxyLocation + $explicitProxyUser = $env:chocolateyProxyUser + $explicitProxyPassword = $env:chocolateyProxyPassword + if ($explicitProxy -ne $null -and $explicitProxy -ne '') { + # explicit proxy + $proxy = New-Object System.Net.WebProxy($explicitProxy, $true) + if ($explicitProxyPassword -ne $null -and $explicitProxyPassword -ne '') { + $passwd = ConvertTo-SecureString $explicitProxyPassword -AsPlainText -Force + $proxy.Credentials = New-Object System.Management.Automation.PSCredential ($explicitProxyUser, $passwd) + } + + Write-Debug "Using explicit proxy server '$explicitProxy'." + $downloader.Proxy = $proxy + + } elseif (!$downloader.Proxy.IsBypassed($url)) { + # system proxy (pass through) + $creds = $defaultCreds + if ($creds -eq $null) { + Write-Debug 'Default credentials were null. Attempting backup method' + $cred = get-credential + $creds = $cred.GetNetworkCredential(); + } + + $proxyaddress = $downloader.Proxy.GetProxy($url).Authority + Write-Debug "Using system proxy server '$proxyaddress'." + $proxy = New-Object System.Net.WebProxy($proxyaddress) + $proxy.Credentials = $creds + $downloader.Proxy = $proxy + } + } + + return $downloader +} + +function Download-File { +param ( + [string]$url, + [string]$file + ) + $downloader = Get-Downloader $url + $downloader.DownloadFile($url, $file) +} + +function Download-Package { +param ( + [string]$packageODataSearchUrl, + [string]$file + ) + $downloader = Get-Downloader $packageODataSearchUrl + + Write-Output "Querying latest package from $packageODataSearchUrl" + [xml]$pkg = $downloader.DownloadString($packageODataSearchUrl) + $packageDownloadUrl = $pkg.feed.entry.content.src + + Write-Output "Downloading $packageDownloadUrl to $file" + $downloader.DownloadFile($packageDownloadUrl, $file) +} + +function Install-ChocolateyFromPackage { +param ( + [string]$chocolateyPackageFilePath = '' +) + + if ($chocolateyPackageFilePath -eq $null -or $chocolateyPackageFilePath -eq '') { + throw "You must specify a local package to run the local install." + } + + if (!(Test-Path($chocolateyPackageFilePath))) { + throw "No file exists at $chocolateyPackageFilePath" + } + + $chocTempDir = Join-Path $env:TEMP "chocolatey" + $tempDir = Join-Path $chocTempDir "chocInstall" + if (![System.IO.Directory]::Exists($tempDir)) {[System.IO.Directory]::CreateDirectory($tempDir)} + $file = Join-Path $tempDir "chocolatey.zip" + Copy-Item $chocolateyPackageFilePath $file -Force + + # unzip the package + Write-Output "Extracting $file to $tempDir..." + if ($unzipMethod -eq '7zip') { + $7zaExe = Join-Path $tempDir '7za.exe' + if (-Not (Test-Path ($7zaExe))) { + Write-Output 'Downloading 7-Zip commandline tool prior to extraction.' + # download 7zip + Download-File $7zipUrl "$7zaExe" + } + + $params = "x -o`"$tempDir`" -bd -y `"$file`"" + # use more robust Process as compared to Start-Process -Wait (which doesn't + # wait for the process to finish in PowerShell v3) + $process = New-Object System.Diagnostics.Process + $process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo($7zaExe, $params) + $process.StartInfo.RedirectStandardOutput = $true + $process.StartInfo.UseShellExecute = $false + $process.StartInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden + $process.Start() | Out-Null + $process.BeginOutputReadLine() + $process.WaitForExit() + $exitCode = $process.ExitCode + $process.Dispose() + + $errorMessage = "Unable to unzip package using 7zip. Perhaps try setting `$env:chocolateyUseWindowsCompression = 'true' and call install again. Error:" + switch ($exitCode) { + 0 { break } + 1 { throw "$errorMessage Some files could not be extracted" } + 2 { throw "$errorMessage 7-Zip encountered a fatal error while extracting the files" } + 7 { throw "$errorMessage 7-Zip command line error" } + 8 { throw "$errorMessage 7-Zip out of memory" } + 255 { throw "$errorMessage Extraction cancelled by the user" } + default { throw "$errorMessage 7-Zip signalled an unknown error (code $exitCode)" } + } + } else { + if ($PSVersionTable.PSVersion.Major -lt 5) { + try { + $shellApplication = new-object -com shell.application + $zipPackage = $shellApplication.NameSpace($file) + $destinationFolder = $shellApplication.NameSpace($tempDir) + $destinationFolder.CopyHere($zipPackage.Items(),0x10) + } catch { + throw "Unable to unzip package using built-in compression. Set `$env:chocolateyUseWindowsCompression = 'false' and call install again to use 7zip to unzip. Error: `n $_" + } + } else { + Expand-Archive -Path "$file" -DestinationPath "$tempDir" -Force + } + } + + # Call Chocolatey install + Write-Output 'Installing chocolatey on this machine' + $toolsFolder = Join-Path $tempDir "tools" + $chocInstallPS1 = Join-Path $toolsFolder "chocolateyInstall.ps1" + + & $chocInstallPS1 + + Write-Output 'Ensuring chocolatey commands are on the path' + $chocInstallVariableName = 'ChocolateyInstall' + $chocoPath = [Environment]::GetEnvironmentVariable($chocInstallVariableName) + if ($chocoPath -eq $null -or $chocoPath -eq '') { + $chocoPath = 'C:\ProgramData\Chocolatey' + } + + $chocoExePath = Join-Path $chocoPath 'bin' + + if ($($env:Path).ToLower().Contains($($chocoExePath).ToLower()) -eq $false) { + $env:Path = [Environment]::GetEnvironmentVariable('Path',[System.EnvironmentVariableTarget]::Machine); + } + + Write-Output 'Ensuring chocolatey.nupkg is in the lib folder' + $chocoPkgDir = Join-Path $chocoPath 'lib\chocolatey' + $nupkg = Join-Path $chocoPkgDir 'chocolatey.nupkg' + if (!(Test-Path $nupkg)) { + Write-Output 'Copying chocolatey.nupkg is in the lib folder' + if (![System.IO.Directory]::Exists($chocoPkgDir)) { [System.IO.Directory]::CreateDirectory($chocoPkgDir); } + Copy-Item "$file" "$nupkg" -Force -ErrorAction SilentlyContinue + } +} + +# Idempotence - do not install Chocolatey if it is already installed +if (!(Test-Path $ChocoInstallPath)) { + # download the package to the local path + if (!(Test-Path $localChocolateyPackageFilePath)) { + Download-Package $searchUrl $localChocolateyPackageFilePath + } + + # Install Chocolatey + Install-ChocolateyFromPackage $localChocolateyPackageFilePath +} + +``` + +### Install with Puppet + +> :choco-info: **NOTE** +> +> If you have the licensed edition, see instead. This only additionally contains some package examples and setting up tab completion. + +Here's an example of setting Chocolatey up with Puppet that sets up and configures Chocolatey, sets up an internal package repository, and shows setting up the licensed edition and ensuring some packages. + +* Download the chocolatey.nupkg from the community repository - [download the latest chocolatey nupkg](https://community.chocolatey.org/api/v2/package/chocolatey) or see [Completely offline install](#completely-offline-install) to get an older version. +* Optionally download the chocolatey.server package from the community repository - [download the latest chocolatey.server nupkg](https://community.chocolatey.org/api/v2/package/chocolatey.server). +* Use `choco push` to push those items to your internal package repository (e.g. `choco push chocolatey.0.10.7.nupkg --source http://internal_repo/ --api-key abc123`) +* Determine how to get the bare url to download the Chocolatey.Nupkg directly. You will need that for the internal url for installing Chocolatey offline. For the community repository, it is https://community.chocolatey.org/api/v2/package/chocolatey + + +```puppet +# Requires puppetlabs/chocolatey module +# See https://forge.puppet.com/puppetlabs/chocolatey + +## Set resource defaults for `package` resources on Windows to use the Chocolatey provider +case $operatingsystem { + 'windows': { + Package { + provider => chocolatey, + } + } +} + +## - Ensure Chocolatey Install - +#include chocolatey +## OR +## Download chocolatey.nupkg to your internal repository (see above +## about getting the package for offline use) +## Note: `chocolatey_download_url is completely different than normal +## source locations. This is directly to the bare download url for the +## chocolatey.nupkg, similar to what you see when you browse to +## https://community.chocolatey.org/api/v2/package/chocolatey +class {'chocolatey': + chocolatey_download_url => 'https:///chocolatey.nupkg', + use_7zip => false, +} + +## If you need FIPS compliance +## make this the first thing you configure before you do any additional +## configuration or package installations +#chocolateyfeature {'useFipsCompliantChecksums': +# ensure => enabled, +#} + +## Keep chocolatey up to date based on your internal source +## You control the upgrades based on when you push an updated version +## to your internal repository. +## Note the source here is to the OData feed, similar to what you see +## when you browse to https://chocolatey.org/api/v2 +package {'chocolatey': + ensure => latest, + provider => chocolatey, + source => 'https:///chocolatey', +} + + +## - Configure Chocolatey - +### Config Settings + +## Move cache location so Chocolatey is very deterministic about +## cleaning up temporary data +chocolateyconfig {'cacheLocation': + value => 'c:\ProgramData\chocolatey\choco-cache', +} + +## Increase timeout to 4 hours +chocolateyconfig {'commandExecutionTimeoutSeconds': + value => '14400', +} + +### Sources +## Remove the default community package repository source +chocolateysource {'chocolatey': + ensure => absent, + location => 'https://community.chocolatey.org/api/v2/', +} + +## Add default sources for your internal repositories +chocolateysource {'internal_chocolatey': + ensure => present, + location => 'http://internal_location/OData/endpoint', + priority => 1, + username => 'optional', + password => 'optional,not ensured', +} + +### Features +chocolateyfeature {'checksumFiles': + ensure => enabled, +} + +## When using Puppet for installs +chocolateyfeature {'showDownloadProgress': + ensure => disabled, +} + +chocolateyfeature {'useRememberedArgumentsForUpgrades': + ensure => enabled, +} + + +## - Chocolatey Simple Server Package Repository - +## Requires chocolatey/chocolatey_server module - see +## https://forge.puppet.com/chocolatey/chocolatey_server +## this contains the bits to install the custom server +## - Ensures IIS and Ensure ASP.NET +## - Installs and configures the Chocolatey.Server website and app pool +## - Sets permissions appropriately + +#include chocolatey_server +## OR +## `server_package_source` is to the OData feed, similar to what you see +## when you browse to https://chocolatey.org/api/v2 +class {'chocolatey_server': + server_package_source => 'https://internalurl/odata/server', +} + +chocolateysource {'local_chocolatey_server': + ensure => present, + location => 'http://localhost/chocolatey', + priority => 2, +} + + +## - Tab Completion - +## Ensure that when someone uses choco from powershell.exe, they have tab completion +file {'C:/Users/Administrator/Documents/WindowsPowerShell': + ensure => directory, +} + +file {'C:/Users/Administrator/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1': + ensure => file, + content => '$ChocolateyProfile = "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" +if (Test-Path($ChocolateyProfile)) { + Import-Module "$ChocolateyProfile" +}', +} + + +## - Package Examples - +package {'roundhouse': + ensure => '0.8.5.0', +} + +package {'git': + ensure => latest, +} + +## see https://forge.puppet.com/puppetlabs/chocolatey#install-options-with-spaces +package {'launchy': + ensure => installed, + install_options => ['--override', '--installArgs','"', '/VERYSILENT','/NORESTART','"'], +} + +package {['virustotaluploader', + 'googlechrome', + 'notepadplusplus', + '7zip', + 'ruby', + 'charles', + 'grepwin', + 'stexbar', + 'inkscape', + 'gitextensions', + 'pandoc', + 'snagit', + 'nodejs', + ]: + ensure => latest, + source => 'https://community.chocolatey.org/api/v2/', +} + +package {'screentogif': + ensure => '2.2.160907', + source => 'https://community.chocolatey.org/api/v2/', +} + +package {'dotnet4.5.2': + ensure => latest, +} +``` + +### Install using PowerShell from cmd.exe + +This is the best method if you want to repeat it or include it in source control. It requires no change to your existing PowerShell to allow for remote unsigned scripts. + +Create a file named `installChocolatey.cmd` with the following: + +``` +@echo off + +SET DIR=%~dp0% + +::download install.ps1 +%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "((new-object net.webclient).DownloadFile('https://community.chocolatey.org/install.ps1','%DIR%install.ps1'))" +::run installer +%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%DIR%install.ps1' %*" +``` + +You can also get to this file by going to [https://community.chocolatey.org/installChocolatey.cmd](https://community.chocolatey.org/installChocolatey.cmd). + +If you prefer to have the install.ps1 file already, comment out the download line in the batch file and download the [`install.ps1`](https://community.chocolatey.org/install.ps1) from [community.chocolatey.org](https://community.chocolatey.org/install.ps1) and save it as `install.ps1` next to the `installChocolatey.cmd` file. + +Run `installChocolatey.cmd` from an elevated `cmd.exe` command prompt and it will install the latest version of Chocolatey. You can not run this from `powershell.exe` without making changes to your execution policy. + +> :choco-info: **NOTE** +> +> To create and save a `.cmd` file, please use a text editor and nothing fancy like Microsoft Word or OneNote. + +### Install using NuGet Package Manager + +When you have Visual Studio 2010+ and the NuGet extension installed (pre-installed on any newer versions of Visual Studio), you can simply type the following three commands and you will have Chocolatey installed on your machine. + + `Install-Package chocolatey` + `Initialize-Chocolatey` + `Uninstall-Package chocolatey` + +### Install using NuGet.exe from PowerShell + +You can also use NuGet command line to download Chocolatey: + + `nuget install chocolatey` or `nuget install chocolatey -pre` + +Once you download it, open PowerShell (remote unsigned), navigate to the tools folder and run: + +`& .\chocolateyInstall.ps1` + +### Install downloaded NuGet package from PowerShell + +You can also just download and unzip the Chocolatey package (`.nupkg` is a fancy zip file): + + 1. Download the [Chocolatey package](https://community.chocolatey.org/api/v2/package/chocolatey/). + 1. Ensure the downloaded nupkg is not blocked. + 1. Unzip it using any application that supports `zip` format. + 1. Open a PowerShell command shell and navigate into the unzipped package's tools folder. + > :choco-info: **NOTE** + > + > Ensure PowerShell execution policy is set to at least bypass or remote signed (if you have issues, you may need to set it to Unrestricted). + 1. Call `& .\chocolateyInstall.ps1` to allow Chocolatey to install. + > :choco-info: **NOTE** + > + > This will not set Chocolatey as an installed package, so it may be a good idea to also call `choco upgrade chocolatey -y` and let it reinstall the same version, but at least it will be available for upgrades then. + +### Install licensed edition + +Please see . + +### Installing behind a proxy + +Have a proxy? Try + +* Cmd.exe: + +```powershell + +@powershell -NoProfile -ExecutionPolicy Bypass -Command "[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET PATH="%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" + +``` + +* PowerShell.exe (Ensure [Get-ExecutionPolicy](https://go.microsoft.com/fwlink/?LinkID=135170) is at least RemoteSigned): + +```powershell + +[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + +``` + +### Installing behind an explicit proxy + +See + +### Installing to a different location + +1. Create a __machine__ level (__user__ level will also work) environment variable named `ChocolateyInstall` and set it to the folder you want Chocolatey to install to prior to installation (this environment variable must be set globally or available to PowerShell- it is not enough to simply make it available to your current command prompt session). +1. Don't use `"C:\Chocolatey"` unless necessary. +1. Create the folder manually. +1. If you have already installed (and want to change the location after the fact): + * Follow the above steps. + * Install Chocolatey again. + * Copy/Move over the items from the old lib/bin directory. + * Delete your old install directory. + +> :choco-info: **NOTE** +> +> There is one really important consideration when installing Chocolatey to a non-default location: Chocolatey only locks down the permissions to Admins when installed to the default location `%PROGRAMDATA%\Chocolatey`, which means the same thing as `%SystemDrive%\ProgramData\Chocolatey`. +> If you are installing to another location, you will need to handle this yourself, i. e. restrict write access to Admins in case you so desire. +This is due to alternative locations could have a range of permissions that should not be changed. +See and [GitHub Issue 398](https://github.com/chocolatey/choco/issues/398) for more details. + +### Installing a particular version of Chocolatey + +Set the following environment variable prior to install: + +* `chocolateyVersion` - controls what version of Chocolatey is installed + +In PowerShell, it looks like this: + +```powershell +$env:chocolateyVersion = '0.9.9.12' +# install script +``` + +> :choco-info: **NOTE** +> +> This will only work with the installation methods that call https://community.chocolatey.org/install.ps1 as part of the install. + +### Use Windows built-in compression instead of downloading 7zip + +Set the following environment variable prior to install: + +* `chocolateyUseWindowsCompression` - this will bypass the download and use of 7zip. + +In PowerShell, it looks like this: + +```powershell +$env:chocolateyUseWindowsCompression = 'true' +# install script +``` + +> :choco-info: **NOTE** +> +> This will only work with the installation methods that call https://community.chocolatey.org/install.ps1 as part of the install. + +### Installing with restricted TLS + +> :choco-info: **NOTE** +> +> community.chocolatey.org now requires TLS 1.2 at a minimum. Please see https://blog.chocolatey.org/2020/01/remove-support-for-old-tls-versions/. + +> :choco-info: **NOTE** +> +> If your server is restricted to TLS 1.1+, you need to add additional logic to be able to download and install Chocolatey (this is not necessary when running Chocolatey normally as it does this automatically). + +> :choco-info: **NOTE** +> +> If this is for organizational use, you should consider hosting the Chocolatey package internally and installing from there. + + +If you see an error that looks similar to the following: + +```powershell +Exception calling "DownloadString" with "1" argument(s): "The underlying connection was closed: An unexpected error +occurred on a receive." +At line:1 char:1 ++ iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/in ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + + FullyQualifiedErrorId : WebException +``` + +OR: + +```powershell +Exception calling "DownloadString" with "1" argument(s): "The request was aborted: Could not create SSL/TLS secure +channel." +At line:1 char:51 ++ ... ess -Force; iex ((New-Object System.Net.WebClient).DownloadString('ht ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + + FullyQualifiedErrorId : WebException +``` + +It's possible that you are attempting to install from a server that needs to use TLS 1.1 or TLS 1.2 (has restricted the use of TLS 1.0 and SSL v3), you have some options. community.chocolatey.org now requires TLS 1.2 at a minimum. + +#### Option 1 - Host Internally + +If you are an organization, this is your best option and it reduces issues with rate limiting that could occur later. + +See https://chocolatey.org/install#organization for details. + + +#### Option 2 - Updated PowerShell and .NET + +Upgrade to the following: + +* PowerShell v3+ +* .NET Framework 4.5 + +```powershell +try { + # Set TLS 1.2 (3072) as that is the minimum required by Chocolatey.org + # Use integers because the enumeration value for TLS 1.2 won't exist + # in .NET 4.0, even though they are addressable if .NET 4.5+ is + # installed (.NET 4.5 is an in-place upgrade). + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 +} catch { + Write-Warning 'Unable to set PowerShell to use TLS 1.2. This is required for contacting Chocolatey as of 03 FEB 2020. https://blog.chocolatey.org/2020/01/remove-support-for-old-tls-versions/. If you see underlying connection closed or trust errors, you may need to do one or more of the following: (1) upgrade to .NET Framework 4.5+ and PowerShell v3+, (2) Call [System.Net.ServicePointManager]::SecurityProtocol = 3072; in PowerShell prior to attempting installation, (3) specify internal Chocolatey package location (set $env:chocolateyDownloadUrl prior to install or host the package internally), (4) use the Download + PowerShell method of install. See https://docs.chocolatey.org/en-us/choco/setup for all install options.' +} + +iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` + +#### Option 3 - Manual + +You need to download and unzip the Chocolatey package, then call the PowerShell install script from there. See the [Install downloaded NuGet package from PowerShell](#install-downloaded-nuget-package-from-powershell) section below. + + +### Non-Administrative install + +> :choco-info: **NOTE** +> +> This option should be a last resort and is considered to be a more advanced scenario - most things you do on Windows require administrative rights, especially surrounding software management, so you are going to be limited even in packages you attempt to install. If you are using the [community package repository](https://community.chocolatey.org/packages), there are over 200 packages you can install from the community repository without administrative permission - see https://community.chocolatey.org/packages?q=id%3Aportable+tag%3Aportable. + +You must choose a different location than the default (see [Installing to a different location](#installing-to-a-different-location) above). The default is a more secure location that only administrators can update. + +1. Save the script below as `ChocolateyInstallNonAdmin.ps1`. +1. Use the script below, determine where you might want Chocolatey installed if it is not to `C:\ProgramData\chocoportable`. +1. Open PowerShell.exe. +1. Run the following `Set-ExecutionPolicy Bypass -Scope Process -Force;` +1. Run `.\ChocolateyInstallNonAdmin.ps1`. + +ChocolateyInstallNonAdmin.ps1: + +```powershell +# Set directory for installation - Chocolatey does not lock +# down the directory if not the default +$InstallDir='C:\ProgramData\chocoportable' +$env:ChocolateyInstall="$InstallDir" + +# If your PowerShell Execution policy is restrictive, you may +# not be able to get around that. Try setting your session to +# Bypass. +Set-ExecutionPolicy Bypass -Scope Process -Force; + +# All install options - offline, proxy, etc at +# https://chocolatey.org/install +iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` + +Examples of packages you can install: + +```powershell +choco install puppet-agent.portable -y +choco install ruby.portable -y +choco install git.commandline -y + +# pick an editor +#choco install visualstudiocode.portable -y # not yet available +choco install notepadplusplus.commandline -y +#choco install nano -y +#choco install vim-tux.portable + +# What else can I install without admin rights? +# https://community.chocolatey.org/packages?q=id%3Aportable +``` + +If you prefer or need cmd.exe example, please see https://gist.github.com/ferventcoder/78fa6b6f4d6e2b12c89680cbc0daec78 + +
    + +## Upgrading Chocolatey + +Once installed, Chocolatey can be upgraded in exactly the same way as any other package that has been installed using Chocolatey. Simply use the command to upgrade to the latest stable release of Chocolatey: + +``` +choco upgrade chocolatey +``` + +## Uninstalling Chocolatey + +See . + +## FAQs + +### I'm having trouble installing Chocolatey + +Make sure you've reviewed More Install Options and looked over . If you've done those things, reach out over the mailing list or over [chat](https://ch0.co/community). The links to those can be found in the open source section of https://chocolatey.org/support. + +### I'm getting a 403 attempting to install + +This is addressed in . + +

     

    diff --git a/src/content/docs/en-us/choco/troubleshooting/dependency-troubles.mdx b/src/content/docs/en-us/choco/troubleshooting/dependency-troubles.mdx new file mode 100644 index 00000000000..0f2e40d9deb --- /dev/null +++ b/src/content/docs/en-us/choco/troubleshooting/dependency-troubles.mdx @@ -0,0 +1,91 @@ +--- +order: 10 +xref: choco-dependency-troubles +title: Dependency Troubleshooting in Chocolatey CLI +description: Troubleshooting steps for when you encounter issues related to dependencies +--- +import Xref from '@components/Xref.astro'; + +## Installation and Upgrade Commands Fail for Many Seemingly Unrelated Packages + +Due to the way dependency resolution works, packages with dependencies can occasionally trigger undesirable behavior. +When this happens, you will often be presented with both warnings and errors. +The most important information will be in the errors, and not the warnings. + +When you encounter these errors, it is recommended to start with the package name mentioned in the error, and attempt to install it. +Repeat this process with any other failing dependencies until they're all installed. + +### Example 1 - Upgrade All Fails to Upgrade One or More Packages + +This will sometimes be encountered with meta-packages, such as `obs-studio` which takes an exact-version dependency on `obs-studio.install`. +When running `choco upgrade all` it will attempt to upgrade every installed package. +Any packages which fail to install may be retried as part of a later dependency chain. +For example, `obs-studio.install` may be upgraded, fail, and then later be tried again as part of the dependency chain for `obs-studio` itself. +As a result, Chocolatey CLI's packages may be in an inconsistent state. +This is typically characterized by a dependency resolution error message when performing package operations: + +``` +Unable to resolve dependencies. 'obs-studio.install 29.0.2' is not compatible with 'obs-studio 29.1.1 constraint: obs-studio.install (>= 29.1.1)'. +``` + +This is normally resolved by upgrading the affected dependency. +In this example, you would run `choco upgrade obs-studio.install` to resolve the issue. + +The following scenario illustrates what can happen during an `upgrade all` where a dependency fails to install. +In this example, `obs-studio` installs, but `obs-studio.install` fails. +Due to the dependency version range specified by `obs-studio`, the version of `obs-studio.install` that remains installed (due to the upgrade failure) does not satisfy the dependency requirement. + +To resolve the issue, we run `choco upgrade obs-studio.install` to get the correct dependency version installed. +For packages that have a specific version dependency, add the `--version` option and specify the exact version to install. + +![Partial output from choco upgrade all, showing that obs-studio.install is attempted and failed](/images/chocolatey/dependency-resolution-failure-1.png) + +![Continued output from choco upgrade all, showing that obs-studio metapackage is installed and subsequently re-attempts the upgrade to obs-studio.install which again fails, followed by a dependency resolution error in the next package and failing a seemingly unrelated package installation](/images/chocolatey/dependency-resolution-failure-2.png) + +### Example 2 - Installing a Package Fails Due to Existing Missing Dependencies + +> :choco-warning: **WARNING** +> +> This example deals with multiple missing dependencies, and installs them while ignoring dependencies. +> You will need to ensure you're installing the correct versions required for your dependencies. + +The following scenario illustrates what can happen during an `install` where multiple existing packages have dependencies that are not currently met. +In this example, `glab` is attempting to be installed, but a number of `KB` packages are missing from the Chocolatey `lib` directory. + +1. We start by attempting to install `glab`, and note that that the following error occurs. + + ![Output from choco install glab where it fails to resolve dependency 'KB306858'](/images/chocolatey/kb-dependency-failure-1.png) + +1. To resolve the issue, we first run `choco install KB3063858` to install the first identified package. +We note that this fails to install, so we make note of the package it couldn't find (`KB2919355`) and we run `choco install KB3063858 --ignore-dependencies` to ignore the dependency failure. + + ![Output from choco install KB306858 where it fails to resolve dependency 'KB2919355'](/images/chocolatey/kb-dependency-failure-2.png) + +1. Now that we have `KB3063858` installed, we attempt to run `choco install KB2919355` to install the next identified package. +Again we make note of the next package (`KB2999226`) and install this package while ignoring dependencies: `choco install KB2919355 --ignore-dependencies`. + + ![Output from choco install KB2919355 where it fails to resolve dependency 'KB2999226'](/images/chocolatey/kb-dependency-failure-3.png) + +1. Now with `KB2919355` installed we continue with `choco install KB2999226`. +Again we make note of the next package (`KB2919442`) and install this package while ignoring dependencies: `choco install KB2999226 --ignore-dependencies`. + + ![Output from choco install KB2999226 where it fails to resolve dependency 'KB2919442'](/images/chocolatey/kb-dependency-failure-4.png) + +1. Now with `KB2999226` installed, we attempt to run `choco install KB2919442`. +We see that this one is actually already installed, so we attempt to install `glab` again. +When `glab` fails to install, we make note of the next package missing in our chain: `chocolatey-windowsupdate.extension`. + + ![Output from choco install KB2919442 where it is already installed. Following output is from choco install glab where it fails to resolve dependency 'chocolatey-windowsupdate.extension'](/images/chocolatey/kb-dependency-failure-5.png) + +1. We install this in the same way as before (`choco install chocolatey-windowsupdate.extension`, then `choco install chocolatey-windowsupdate.extension --ignore-dependencies`). + + ![Output from choco install chocolatey-windowsupdate.extension where it fails to resolve dependency 'KB3033929'](/images/chocolatey/kb-dependency-failure-6.png) + +1. We install the next package (`KB3033929`) and note that it did not have any dependency failures. + + ![Output from choco install KB3033929 where it installs with no dependency failures](/images/chocolatey/kb-dependency-failure-7.png) + +1. So, we attempt our install of `glab` once more. +Thankfully, we are able to install it with no dependency errors. + + ![Output from choco install glab where it finally installs](/images/chocolatey/kb-dependency-failure-8.png) diff --git a/src/content/docs/en-us/choco/troubleshooting/index.mdx b/src/content/docs/en-us/choco/troubleshooting/index.mdx new file mode 100644 index 00000000000..8e05f87686c --- /dev/null +++ b/src/content/docs/en-us/choco/troubleshooting/index.mdx @@ -0,0 +1,8 @@ +--- +order: 100 +xref: choco-troubleshooting +title: Chocolatey CLI Troubleshooting +description: Having issues running Chocolatey, check here for solutions +--- +import Xref from '@components/Xref.astro'; + diff --git a/src/content/docs/en-us/choco/troubleshooting/unable-to-load-service-index.mdx b/src/content/docs/en-us/choco/troubleshooting/unable-to-load-service-index.mdx new file mode 100644 index 00000000000..eb36ce5c63d --- /dev/null +++ b/src/content/docs/en-us/choco/troubleshooting/unable-to-load-service-index.mdx @@ -0,0 +1,77 @@ +--- +order: 10 +xref: choco-unable-to-load-service-index +title: Unable to Load Service Index Errors +description: Information on solutions/workarounds for a problem that can have multiple underlying causes +--- +import Xref from '@components/Xref.astro'; + +On occasion, you may run into issues where Chocolatey CLI is unable to communicate with a package source. +There are a number of possible reasons for this, many of which will result in a warning that looks like this: + +> Unable to load the service index for source ``. + +This page contains the currently known information about these errors, as well as how to further diagnose the problem and find a solution. + +## Finding the Underlying Error(s) + +In Chocolatey CLI v2.0.0 and v2.1.0, the underlying errors are not fully enumerated in the Chocolatey logs. +To discover the underlying issue causing the error in these versions, you will need to use a tool that can inspect network traffic, like Fiddler. +Gary Park has a [short YouTube video](https://www.youtube.com/watch?v=z4CwJ-MF7ik) describing how to use Fiddler to inspect the network traffic using Fiddler Classic. + +As of Chocolatey CLI v2.2.0, the underlying errors will all be logged, but only a portion of the total stack of errors will be shown by default. +If more information is required, you will need to check the chocolatey.log file or re-run the command with the `--debug` option to see the additional errors. + +## Known Issues + +### SSL / TLS Errors + +Some server configurations require specific TLS versions and cipher suites to be available in order for clients to connect to them. +As a result, users lacking these TLS versions or cipher suites may have issues communicating with package sources on these servers. +One such example is the Chocolatey Community Repository, which requires TLS 1.2 as a minimum. + +Some examples of these kinds of error messages are: + +> The request was aborted: Could not create SSL/TLS secure channel. + +> HTTPS handshake to community.chocolatey.org (for #3) failed. System.Security.Authentication.AuthenticationException A call to SSPI failed, see inner exception. +> < The function requested is not supported +> +> Win32 (SChannel) Native Error Code: 0x80090302 + +In these cases, one of two issues is present: + +1. Your operating system is not using TLS 1.2 by default. + TLS issues are mostly seen in older Windows systems, primarily Windows 7/Windows Server 2008 R2, and earlier. +1. Your operating system has a missing cipher suite that is required by the server. + +In both cases, this can be most easily resolved using the `iiscrypto` tool to configure your operating system correctly. +This can be installed via Chocolatey CLI with: + +```powershell +choco install iiscrypto +``` + +However, if you are having issues connecting to the Chocolatey Community Repository, you can [download the IIS Crypto tool from their website](https://www.nartac.com/Products/IISCrypto/) directly. +Once installed, open the IIS Crypto tool and follow these instructions: + +1. On the **Schannel** tab (which is shown on starting the IIS Crypto tool by default) click the **Best Practices** button. +1. You will be prompted to click the Apply button, but follow the next steps before doing so. +1. Click on the **Cipher Suites** tab in the menu on the left to switch to it. +1. Click the **Best Practices** button again. +1. Click the **Apply** button. +1. Restart your computer. + +If this does not resolve the issue, continue reading below. + +### Certificate Errors + +In some cases, users who are communicating with the Chocolatey Community Repository through a proxy server or a network gateway proxy have experienced issues where Chocolatey CLI is unable to verify the SSL Certificate. + +A common error message in these circumstances looks like this: + +> The remote certificate is invalid according to the validation procedure. + +To confirm whether the issue is related to your proxy configuration, we recommend temporarily bypassing or disabling the proxy in order to verify whether you are otherwise able to communicate with the Chocolatey Community Repository. + +Specific resolutions for various products which proxy traffic are outside the scope of this article; we suggest you contact your network administrator to resolve these issues. diff --git a/src/content/docs/en-us/choco/uninstallation.mdx b/src/content/docs/en-us/choco/uninstallation.mdx new file mode 100644 index 00000000000..a8c81278c43 --- /dev/null +++ b/src/content/docs/en-us/choco/uninstallation.mdx @@ -0,0 +1,156 @@ +--- +order: 30 +xref: choco-uninstallation +title: How to uninstall +description: Information on how to uninstall Chocolatey +--- +import Xref from '@components/Xref.astro'; +import Collapse from '@components/Collapse.astro'; + +# Uninstalling Chocolatey + +Should you decide you don't like Chocolatey, you can uninstall it simply by removing the folder (and the environment variable(s) that it creates). Since it is not actually installed in Programs and Features, you don't have to worry that it cluttered up your registry (however that's a different story for the applications that you installed with Chocolatey or manually). + +## Folder +Most of Chocolatey is contained in `C:\ProgramData\chocolatey` or whatever `$env:ChocolateyInstall` evaluates to. You can simply delete that folder. + +> :choco-info: **NOTE** +> +> You might first back up the sub-folders `lib` and `bin` just in case you find undesirable results in removing Chocolatey. Bear in mind not every Chocolatey package is an installer package, there may be some non-installed applications contained in these subfolders that could potentially go missing. Having a backup will allow you to test that aspect out. + +## Environment Variables +There are some environment variables that need to be adjusted or removed. + +* ChocolateyInstall +* ChocolateyToolsLocation +* ChocolateyLastPathUpdate +* PATH (will need updated to remove) + +## Script +There are no warranties on this script whatsoever, but here is something you can try: + +> :choco-warning: **WARNING** +> +> This will remove Chocolatey and all packages, software, and configurations in the Chocolatey Installation folder from your machine. Everything will be GONE. This is very destructive. DO NOT RUN this script unless you completely understand what the intention of this script is and are good with it. If you mess something up, we cannot help you fix it. + +> :choco-warning: **WARNING** +> +> Seriously, this script may destroy your machine and require a rebuild. It may have varied results on different machines in the same environment. Think twice before running this. + +

    Click the red button below to reveal the uninstall scripts.

    + +export const collapseOne = { + id: 'uninstallScripts', + title: 'Yes, I understand the dangers of running these scripts', + btnColor: 'danger' +} + + + If you also intend to delete the Chocolatey directory, remove the `-WhatIf` switch from the `Remove-Item` call near the bottom: + + ```powershell + $VerbosePreference = 'Continue' + if (-not $env:ChocolateyInstall) { + $message = @( + "The ChocolateyInstall environment variable was not found." + "Chocolatey is not detected as installed. Nothing to do." + ) -join "`n" + + Write-Warning $message + return + } + + if (-not (Test-Path $env:ChocolateyInstall)) { + $message = @( + "No Chocolatey installation detected at '$env:ChocolateyInstall'." + "Nothing to do." + ) -join "`n" + + Write-Warning $message + return + } + + <# + Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values; + Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to + accidentally overwrite them with absolute path values. Where the registry allows us to see "%SystemRoot%" in a PATH + entry, PowerShell's registry provider only sees "C:\Windows", for example. + #> + $userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment',$true) + $userPath = $userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() + + $machineKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\ControlSet001\Control\Session Manager\Environment\',$true) + $machinePath = $machineKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() + + $backupPATHs = @( + "User PATH: $userPath" + "Machine PATH: $machinePath" + ) + $backupFile = "C:\PATH_backups_ChocolateyUninstall.txt" + $backupPATHs | Set-Content -Path $backupFile -Encoding UTF8 -Force + + $warningMessage = @" + This could cause issues after reboot where nothing is found if something goes wrong. + In that case, look at the backup file for the original PATH values in '$backupFile'. + "@ + + if ($userPath -like "*$env:ChocolateyInstall*") { + Write-Verbose "Chocolatey Install location found in User Path. Removing..." + Write-Warning $warningMessage + + $newUserPATH = @( + $userPath -split [System.IO.Path]::PathSeparator | + Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" } + ) -join [System.IO.Path]::PathSeparator + + # NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449 + # This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019 + $userKey.SetValue('PATH', $newUserPATH, 'ExpandString') + } + + if ($machinePath -like "*$env:ChocolateyInstall*") { + Write-Verbose "Chocolatey Install location found in Machine Path. Removing..." + Write-Warning $warningMessage + + $newMachinePATH = @( + $machinePath -split [System.IO.Path]::PathSeparator | + Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" } + ) -join [System.IO.Path]::PathSeparator + + # NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449 + # This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019 + $machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString') + } + + # Adapt for any services running in subfolders of ChocolateyInstall + $agentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue + if ($agentService -and $agentService.Status -eq 'Running') { + $agentService.Stop() + } + # TODO: add other services here + + Remove-Item -Path $env:ChocolateyInstall -Recurse -Force -WhatIf + + 'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object { + foreach ($scope in 'User', 'Machine') { + [Environment]::SetEnvironmentVariable($_, [string]::Empty, $scope) + } + } + + $machineKey.Close() + $userKey.Close() + ``` + + Additionally, the below code will remove the environment variables pointing to the tools directory that was managed by Chocolatey. + If you want to remove the actual directory from disk, remove the `-WhatIf` switch from the `Remove-Item` call below as well. + + ```powershell + if ($env:ChocolateyToolsLocation -and (Test-Path $env:ChocolateyToolsLocation)) { + Remove-Item -Path $env:ChocolateyToolsLocation -WhatIf -Recurse -Force + } + + foreach ($scope in 'User', 'Machine') { + [Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope) + } + ``` + diff --git a/src/content/docs/en-us/chocolatey-components-dependencies-and-support-lifecycle.mdx b/src/content/docs/en-us/chocolatey-components-dependencies-and-support-lifecycle.mdx new file mode 100644 index 00000000000..293c4d4f52f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-components-dependencies-and-support-lifecycle.mdx @@ -0,0 +1,58 @@ +--- +order: 75 +xref: chocolatey-components-dependencies-and-support-lifecycle +title: Chocolatey Components Dependencies and Support Lifecycle +description: Provides information about the Support Lifecycle for various Chocolatey Components, as well as the dependencies between them. +--- +import Xref from '@components/Xref.astro'; +import ChocolateyComponentDependencies from '@components/docs/ChocolateyComponentDependencies.mdx'; +import MaintenanceAndSupport from '@components/docs/MaintenanceAndSupport.mdx'; + +## Product Support Lifecycle + +All of the latest released stable versions of Chocolatey products (Chocolatey CLI, Chocolatey GUI, Chocolatey Central Management, etc.) are fully supported and will periodically receive new features, bug fixes, and security fixes as appropriate. +We recommend customers update to the latest versions to benefit from new features and fixes as they are released. + +### Pre-v1.0 Products + +For any products that have not yet reached v1.0, **only the latest version is supported**. +We will continue to add features, fix bugs, and address security concerns as normal while we work towards a v1.0 release. + +### Version 1.0+ Products + +Once a product reaches v1.0, we recommend customers move to that version as soon as possible. +We will not continue to support v0.x versions once a product reaches v1.0. + +### Version 2.0+ Products + +Once a product reaches the second major release, the following will apply: + +1. We will support the previous major version with **security fixes** for Chocolatey For Business customers. + - For example: at v2.0, the latest v1.x version of the product will receive security fixes; at v3.0, only the latest v2.x version of the product will continue to receive security fixes. +1. We will support the previous major version with certain bug fixes (excepting bug fixes that require breaking changes) for Chocolatey For Business customers for six months following the release of the next major version. +1. No new features will be backported to the previous major version. + +## Supported Windows Versions + +Chocolatey products' support for Windows Operating Systems follows Microsoft's Support Lifecycle: if the Windows version is supported by Microsoft, Chocolatey products are supported on that version of Windows. + +This information is up-to-date as of 6 June 2023. + +### Clients + +- Windows 11 +- Windows 10 22H2 +- Windows 10 21H2 + +### Servers + +- Windows Server 2022 +- Windows Server 2019 +- Windows Server 2016 +- Windows Server 2012 R2 +- Windows Server 2012 +- Windows Server 2008 R2 (in Azure only) + + + + diff --git a/src/content/docs/en-us/chocolatey-gui-licensed-extension/index.mdx b/src/content/docs/en-us/chocolatey-gui-licensed-extension/index.mdx new file mode 100644 index 00000000000..1ab46ce71aa --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui-licensed-extension/index.mdx @@ -0,0 +1,8 @@ +--- +order: 120 +xref: chocolatey-gui-licensed-extension +title: Chocolatey GUI Licensed Extension +description: This is a Chocolatey GUI extension that enables the licensed features of Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui-licensed-extension/release-notes.mdx b/src/content/docs/en-us/chocolatey-gui-licensed-extension/release-notes.mdx new file mode 100644 index 00000000000..953a529daaf --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui-licensed-extension/release-notes.mdx @@ -0,0 +1,256 @@ +--- +order: 10 +xref: chocolatey-gui-licensed-extension-release-notes +title: Release Notes +description: Release Notes for Chocolatey GUI Extension +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-gui-licensed-extension-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-gui-licensed-extension-twitter.png +--- +import Xref from '@components/Xref.astro'; +import ChocolateyComponentDependenciesLink from '@components/docs/ChocolateyComponentDependenciesLink.mdx'; +import MaintenanceAndSupportLink from '@components/docs/MaintenanceAndSupportLink.mdx'; + +# Chocolatey Release Notes - Chocolatey GUI Licensed Extension +## Summary +This covers the release notes for the Chocolatey GUI Licensed Extension (`chocolateygui.extension`) package, where the commercial editions of Chocolatey GUI get their enhanced functionality. +Please see for information on how to get and install the package. + +> :choco-info: **NOTE** +> +> This package is available to Chocolatey for Business customers only. + +## Other Release Notes + +- Refer to as commercial editions build on top of open source. +- Chocolatey for Business (C4B) customers - also refer to and . + + + + + + +## 2.0.0 (May 31, 2023) \{#may-31-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Improvement + +- Update to use latest releases of Chocolatey products. + + +## 1.0.3 (May 10, 2023) \{#may-10-2023} + +### Bug Fix + +- Fix - Update version ranges in nuspec file to use maximum inclusive rather than maximum exclusive. + + +## 2.0.0-beta-20230426 (April 26, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI Licensed Extension and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI Licensed Extension we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey products. + + +## 2.0.0-beta-20230412 (April 12, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI Licensed Extension and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI Licensed Extension we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey Components. + + +## 2.0.0-beta-20230321 (March 21, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI Licensed Extension and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI Licensed Extension we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey Components. + + +## 1.0.2 (March 13, 2023) \{#march-13-2023} + +### Bug Fixes + +- Fix - Chocolatey GUI v1.1.2 crashes on launch with Chocolatey GUI Licensed Extension installed - see [licensed #338](https://github.com/chocolatey/chocolatey-licensed-issues/issues/338). + +## 2.0.0-alpha-20230221 (February 21, 2023) \{#alpha-20230221-february-21-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI Licensed Extension and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey GUI Licensed Extension we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Change + +- Upgrade to target version 2.0.0 of Chocolatey.Lib and version 2.0.0 of Chocolatey GUI assemblies. + + +## 1.0.1 (October 12, 2022) \{#october-12-2022} + +### Improvements + +- Update package version range for Chocolatey Licensed Extension to support 5.0.0+. + +## 1.0.0 (March 21, 2022) \{#march-21-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolateygui.extension package have changed in this release. It now requires Chocolatey GUI v1.0.0 and Chocolatey Licensed Extension v4.0.0. + +### Breaking Changes + +- Add Chocolatey Licensed Extension dependency to package to ensure all required dependencies are installed during upgrade. +- Updates Chocolatey CLI dependency for package to v1.0.0. + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.4.0 (February 10, 2022) \{#february-10-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolateygui.extension package have changed in this release, and it now requires Chocolatey GUI v0.20.0. + +### Breaking Change + +- Change target .NET Framework version to be 4.8 - see [#841](https://github.com/chocolatey/ChocolateyGUI/issues/841). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.3.0 (September 6, 2021) \{#september-6-2021} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolateygui.extension package have changed in this release, and it now requires Chocolatey CLI v0.11.1 and Chocolatey GUI v0.19.0. + +### Features + +- Add feature to allow disabling of the This PC source - see [licensed #228](https://github.com/chocolatey/chocolatey-licensed-issues/issues/228). +- Add feature to allow disabling of "Update All" button -see [licensed #240](https://github.com/chocolatey/chocolatey-licensed-issues/issues/240). + +### Improvements + +- [Security] XML External Entity attack in log4net (CVE-2018-1285) see [licensed #254](https://github.com/chocolatey/chocolatey-licensed-issues/issues/254). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.2.1 (March 29, 2021) \{#march-29-2021} + +### Bug Fix + +- Fix - Incorrect configuration database being used by Chocolatey GUI Licensed Extension when running as non-administrator user - see [licensed #209](https://github.com/chocolatey/chocolatey-licensed-issues/issues/209). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.2.0 (March 9, 2021) \{#march-9-2021} + +### Breaking Change + +- Update the default value for "NonAdmin Access to Settings" feature to be false - see [#601](https://github.com/chocolatey/ChocolateyGUI/issues/601). + +### Features + +- Provide ability for Chocolatey GUI to respect the background service allowed commands configuration option. +- Add a feature to toggle on/off a read only view for installed packages - see [licensed #201](https://github.com/chocolatey/chocolatey-licensed-issues/issues/201). +- Add a feature to toggle on/off the option to not attempt to download icons for packages - see [licensed #199](https://github.com/chocolatey/chocolatey-licensed-issues/issues/199). +- Add a configuration option to specify a default for a particular source when application loads - see [licensed #198](https://github.com/chocolatey/chocolatey-licensed-issues/issues/198). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## 0.1.0 (January 22, 2021) \{#january-22-2021} + +Initial preview release + +### Features + +- Branding - Support for branding portions of the Chocolatey GUI assets from provided assets. +- Provide ability to restrict access to Chocolatey GUI settings to only machine administrators. +- Packaging - Extension is deployable in the same way as the Chocolatey Licensed Extension. +- Provide visual indication in Chocolatey GUI when the Chocolatey GUI Licensed Extension is being used. + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    diff --git a/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/index.mdx b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/index.mdx new file mode 100644 index 00000000000..8d133ff3074 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/index.mdx @@ -0,0 +1,8 @@ +--- +order: 20 +xref: setup-chocolatey-gui-licensed +title: Setup +description: Information on how to install and setup Chocolatey GUI Licensed Extension +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/installation.mdx b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/installation.mdx new file mode 100644 index 00000000000..554b9630087 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/installation.mdx @@ -0,0 +1,25 @@ +--- +order: 10 +xref: chocolatey-gui-licensed-installation +title: Installation +description: Instructions on how to install Chocolatey GUI Licensed Extension +--- +import Xref from '@components/Xref.astro'; + +Once you have the installed +the easiest way to install Chocolatey GUI Licensed Extension is to use Chocolatey. +Use the following command to install the latest version of Chocolatey GUI Licensed +Extension: + +```powershell +choco install chocolateygui.extension +``` + +## Upgrading Chocolatey GUI Licensed Extension + +If you already have Chocolatey GUI Licensed Extension installed, you can upgrade +to the latest version using the following command: + +```powershell +choco upgrade chocolateygui.extension +``` \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/uninstallation.mdx b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/uninstallation.mdx new file mode 100644 index 00000000000..c5dd1b9611f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui-licensed-extension/setup/uninstallation.mdx @@ -0,0 +1,13 @@ +--- +order: 20 +xref: chocolatey-gui-licensed-uninstallation +title: Uninstallation +description: Instructions on how to uninstall Chocolatey GUI Licensed Extension +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI Licensed Extension can be easily uninstalled using the following command: + +```powershell +choco uninstall chocolateygui.extension +``` \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/business-features/admin-only-sources.mdx b/src/content/docs/en-us/chocolatey-gui/business-features/admin-only-sources.mdx new file mode 100644 index 00000000000..224b22da2b3 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/business-features/admin-only-sources.mdx @@ -0,0 +1,23 @@ +--- +order: 20 +xref: admin-only-sources +title: Admin Only Sources +description: Restrict access to sources based on Admin Only property +--- +import Xref from '@components/Xref.astro'; + +When Chocolatey GUI is used in conjunction with a Licensed version of Chocolatey, it is possible to restrict access to sources that have been configured on the system, using the Admin Only property. + +If this setting has been set to true on a source, Chocolatey GUI will no longer show it within the application when it is being used by a non-admin user. + +> :choco-info: **NOTE** +> +> This feature will only be supported in the Open Source version of Chocolatey GUI when using a licensed version of Chocolatey. Open Source Chocolatey will always report all sources that have been configured, regardless of whether they have been marked as Admin Only. + +## Resources + +Below is a short video which shows this feature in action: + +
    + +
    diff --git a/src/content/docs/en-us/chocolatey-gui/business-features/branding.mdx b/src/content/docs/en-us/chocolatey-gui/business-features/branding.mdx new file mode 100644 index 00000000000..afc0ebb03bd --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/business-features/branding.mdx @@ -0,0 +1,11 @@ +--- +order: 10 +xref: gui-branding +title: Branding +description: Information about applying branding to the Chocolatey GUI application +--- +import Xref from '@components/Xref.astro'; + +There is a Chocolatey for Business feature that allows applying branding to the Chocolatey GUI application. This allows customers to make Chocolatey GUI "look" more like there internal application. + +Visit the for full details on how this can be achieved. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/business-features/index.mdx b/src/content/docs/en-us/chocolatey-gui/business-features/index.mdx new file mode 100644 index 00000000000..a9d2b0804e0 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/business-features/index.mdx @@ -0,0 +1,8 @@ +--- +order: 50 +xref: gui-business-features +title: Business Features +description: Information about additional features that can be added using Chocolatey GUI for Business +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/commands/config.mdx b/src/content/docs/en-us/chocolatey-gui/commands/config.mdx new file mode 100644 index 00000000000..be54fc0ebdf --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/commands/config.mdx @@ -0,0 +1,73 @@ +--- +order: 10 +xref: gui-config-command +title: Config +description: Usage instructions on how to list/get/set/unset Chocolatey GUI config settings +--- +import Xref from '@components/Xref.astro'; +import AvailableSettings from '@components/docs/AvailableSettings.mdx'; + +Chocolatey GUI will allow you to interact with the config settings. + +## Usage + +```powershell +chocolateyguicli config [list]|get|set|unset [ +
    + +
    +
    +

    + +## Configuration Options + +The available items that can be configured are: + + diff --git a/src/content/docs/en-us/chocolatey-gui/commands/feature.mdx b/src/content/docs/en-us/chocolatey-gui/commands/feature.mdx new file mode 100644 index 00000000000..58e20d7179b --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/commands/feature.mdx @@ -0,0 +1,69 @@ +--- +order: 20 +xref: gui-feature-command +title: Feature +description: Usage instructions on how to enable/disable Chocolatey GUI features +--- +import Xref from '@components/Xref.astro'; +import AvailableFeatures from '@components/docs/AvailableFeatures.mdx'; + +Chocolatey GUI will allow you to interact with features. + +## Usage + +```powershell +chocolateyguicli feature [list]|disable|enable [ +
    + +
    +
    +

    + +## Feature Options + +The available features that can be configured are: + + diff --git a/src/content/docs/en-us/chocolatey-gui/commands/index.mdx b/src/content/docs/en-us/chocolatey-gui/commands/index.mdx new file mode 100644 index 00000000000..c7557e009ca --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/commands/index.mdx @@ -0,0 +1,9 @@ +--- +order: 40 +xref: gui-commands +title: Commands +description: Information about the various commands which can be used with Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +While it is possible to configure all aspects of Chocolatey GUI from within the [Settings]() screen, it is also possible to configure all aspects directly from three commands which are exposed with the `chocolateyguicli` executable. This executable is installed with the Chocolatey GUI Chocolatey package, and is immediately available in both a PowerShell or Command window. Three commands, `config`, `feature`, and `purge` are available to control the different aspects of Chocolatey GUI. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/commands/purge.mdx b/src/content/docs/en-us/chocolatey-gui/commands/purge.mdx new file mode 100644 index 00000000000..d1389b4e2ff --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/commands/purge.mdx @@ -0,0 +1,52 @@ +--- +order: 30 +xref: gui-purge-command +title: Purge +description: Usage instructions on how to execute the purge command +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI will allow you to interact with purging caches used in application. + +## Usage + +```powershell +chocolateyguicli purge icons|outdated [] +``` + +## Examples + +```powershell +chocolateyguicli purge icons +chocolateyguicli purge outdated +``` + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + +- 0: operation was successful, no issues detected +- -1 or 1: an error has occurred + +## Options and Switches + +```powershell +-?, --help, -h + Prints out the help menu. + +-r, --limitoutput, --limit-output + Limit the output to essential information +``` +## Resources + +Below is a short video which shows how to use the feature command of the chocolateyguicli: + +

    +

    + +
    +
    +

    diff --git a/src/content/docs/en-us/chocolatey-gui/index.mdx b/src/content/docs/en-us/chocolatey-gui/index.mdx new file mode 100644 index 00000000000..8a46c0dfc2f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/index.mdx @@ -0,0 +1,24 @@ +--- +order: 100 +xref: chocolateygui +title: Chocolatey GUI +description: What is Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +## What is Chocolatey GUI? + +Chocolatey GUI is a WPF application that allows the installation, uninstallation, updating, and searching for Chocolatey Packages. It is intended as a replacement for the Chocolatey CLI for those that prefer interacting with an application, rather than with commands. + +## What functionality is offered by Chocolatey GUI? + +While Chocolatey GUI has a number of pieces of functionality, is doesn't have everything that is offered by the Chocolatey CLI. Over time, additional functionality will likely be added, but for the time being, the following is possible in Chocolatey GUI: + +- List Chocolatey Packages installed on local machine +- List Chocolatey Packages available for installation from remote sources +- Install/Uninstall/Update/Pin/Unpin Chocolatey Packages +- Add/Remove Chocolatey Sources +- Enable/disable Chocolatey Features +- Modify Chocolatey configuration values +- Visual indications provided when installed Chocolatey Packages are out of date +- List and Tile View of installed/available packages diff --git a/src/content/docs/en-us/chocolatey-gui/known-issues.mdx b/src/content/docs/en-us/chocolatey-gui/known-issues.mdx new file mode 100644 index 00000000000..193df4c93f8 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/known-issues.mdx @@ -0,0 +1,82 @@ +--- +order: 70 +xref: chocolateygui-known-issues +title: Known Issues +description: Current known issues regarding Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +## Not all available packages are shown, or there is no way to navigate to next page of results + +Chocolatey GUI is reliant on the repository server providing accurate information in order to determine whether there are more packages available than it was given in the first set of results. +In some implementations of NuGet v3 feeds, we have observed that the repository server is returning incorrect information. +As a result, there are cases where Chocolatey GUI may not be able to display all packages that the repository server has in its list. + +Currently, we are aware of this affecting Sonatype Nexus NuGet v3 repository feeds, but any repository implementation that reports incorrect metadata may result in similar issues. +Follow [the NEXUS-37861 Jira ticket](https://issues.sonatype.org/browse/NEXUS-38761) for further information on when this will be resolved by Sonatype. + +### Technical details + +Chocolatey GUI works on the concept of "pages" of packages. +This means that it will request only a subset of the total number of packages that exist on a particular repository server. +By default, Chocolatey GUI requests packages in a page size of 30. +If the page of packages returned has less than 30, Chocolatey GUI takes this to mean that there are no further packages to be returned, since it wasn't a full page. +In order for Chocolatey GUI to correctly display and paginate through all available packages, it is reliant on the correct information coming back from the repository server that is being queried. +In other words, the pages of packages that are returned need to be correct. + +During testing, there have been cases where a lower number of packages than was known to exist on the repository server was returned. +When this happens, Chocolatey GUI determines that there are no more packages on the server to request. +The result is that not all packages are displayed within Chocolatey GUI if this occurs. + +In addition, there have been cases where information about the total number of packages that exist on the repository server has not been returned correctly. +Where this has been witnessed to happen, the total number of packages is reported by the server as `1`, rather than the actual number. +Chocolatey GUI relies on this information in order to know how many pages of packages need to be shown, so that the correct `Next`, `Previous`, `First`, and `Last` buttons can be shown. +When the information is returned incorrectly from the repository server, the result is that all the pagination buttons are disabled, and can't be clicked. + +## Package installation arguments are not remembered when upgrading a package with Chocolatey GUI + +When the `useRememberedArgumentsForUpgrades` Chocolatey feature is enabled, package arguments are not correctly retained when upgrading packages. + +This is due to [a known bug in chocolatey.lib](https://github.com/chocolatey/choco/issues/2886). + +If you need to use this feature, you must currently upgrade affected packages via Chocolatey CLI instead of Chocolatey GUI. + + +## Chocolatey GUI asking for credentials for my non-administrator accounts + +If a user is a member of the Built-in AD group `Network Configuration Operators`, then that means they have an elevation token available and will be treated in the same way as administrative accounts. To fix this, you have two options: + +* Remove the users from `Network Configuration Operators` - PowerShell offers an alternative to `ipconfig /flushdns` that does not require admin permissions - `Clear-DnsClientCache`. +* OR change the ChocolateyGui.exe.manifest file in v0.17.0+ in the Chocolatey GUI folder under Program Files to `` (from `highestAvailable`). + +Please see the following [GitHub Issue](https://github.com/chocolatey/ChocolateyGUI/issues/629) for more details. + + +## Pin command does not work when running with Background Mode enabled + +In the current versions of Chocolatey CLI (v0.11.1) and Chocolatey GUI (v0.19.0), when attempting to pin a package using the Chocolatey CLI (choco.exe) with Background Mode enabled, things will work as expected. i.e. when running: `choco pin add --name="procmon"`. + +The procmon package will be correctly pinned. + +However, if you attempt the same operation via Chocolatey GUI, using the "Pin (Ignore Updates)" context menu, you will get an error stating: + +> Failed to pin package +> +> Exception: System.NullReferenceException: Object reference not set to an instance of an object + +This was fixed as part of a feature addition within . + + +## chocolateyguicli Command Not Registered by System + +If you recieve an error in the shell stating `chocolateyguicli is not registered` or `ObjectNotFound`, please go through the following steps. + +1. Reinstall the `chococlateygui` package. `choco upgrade chocolateygui -y --force` +1. If step 1 did not fix the issue, please check that your antivirus software is not blocking the Chocolatey GUI Config from being written to. The Chocolatey GUI Config file can be located at `C:\ProgramData\Chocolatey GUI\Config\Data.db`. +1. If further assistance is needed please reach out via your support means. Listed by running `choco support`. If running Chocolatey OSS please reach out via our [Community Chat](https://ch0.co/community). + +## Package Installation Failures Don't Always Report Errors + +When installing packages with Chocolatey GUI, only the log output of the first installation is processed by Chocolatey GUI for reporting errors. + +This is due to a [known bug in Chocolatey GUI](https://github.com/chocolatey/ChocolateyGUI/issues/998). diff --git a/src/content/docs/en-us/chocolatey-gui/localization.mdx b/src/content/docs/en-us/chocolatey-gui/localization.mdx new file mode 100644 index 00000000000..281d1822b15 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/localization.mdx @@ -0,0 +1,122 @@ +--- +order: 60 +xref: gui-localization +title: Localization +description: Localization in Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +## Basics + +To enable using localized strings in the Chocolatey GUI UI, the UI loads all its strings from a set of resource files called `resx` files. + +> :choco-info: **NOTE** +> +> Only the default `Resources.resx` file is committed into source control. All other translations are downloaded from transifex at the time of compilation (more information on this below). + +These `resx` files allows defining language and culture specific strings and resources, while having English fallbacks when they aren't present. +This allows Chocolatey GUI to, in general, be localization neutral. +For more information about localization using `resx` check the CultureInfo section on [MSDN](https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx). + +The most important thing to remember is: each language has it's own `Resources..resx`, where `` is referring to the language culture name (as an example `de` for German or `nl` for Dutch). +A list of available cultures and their corresponding codes tags can be found [here](https://msdn.microsoft.com/en-us/library/cc233982.aspx). +If no fitting `` is present for the current system, the default/fallback `Resources.resx` - containing the English language will be chosen. + +When a new release of Chocolatey GUI is created, the resx files at the time of compilation are embedded within the generated assembly. +As a result, any modifications/additions to any files will not be available until the next release of Chocolatey GUI. + +> :choco-info: **NOTE** +> +> It is possible, assuming you have a transifex token, to download the resx files locally onto your environment. and compile Chocolatey GUI, will would allow you to test any changes locally. More information on this below. + +## transifex + +The Chocolatey GUI project makes use of the localization platform known as [transifex](https://www.transifex.com/). + +> :choco-info: **NOTE** +> +> This is normally a paid for service, however, we are using the Open Source offering that they provide. + +### Helping with translations + +In order to help with the localization effort for Chocolatey GUI, you will need to create an account on [transifex](https://www.transifex.com/). +Once you have an account, you will be able to request to join the [Chocolatey GUI](https://www.transifex.com/chocolatey/chocolatey-gui/dashboard/) project in transifex. + +> :choco-info: **NOTE** +> +> This request will need to be approved. + +If a request goes unapproved for a period of time, reach out on [Community Chat](https://ch0.co/community) for help. + +### Adding a new language + +If a language hasn't yet been created for the Chocolatey GUI project that you would like to help with, you will need to make a request to have it added. +This can be done via the [Chocolatey GUI dashboard](https://www.transifex.com/chocolatey/chocolatey-gui/dashboard/). + +> :choco-info: **NOTE** +> +> Adding a new language to the project will require approval. + +If a request goes unapproved for a period of time, reach out on [Community Chat](https://ch0.co/community) for help. + +> :choco-info: **NOTE** +> +> If you are requesting a new language that uses a full language code, for example `zh_CN` rather than a language code similar to `de`, please get in touch with one of the project maintainers, as a Pull Request similar to [this](https://github.com/chocolatey/ChocolateyGUI/pull/634) will be required. + +## Testing Other Languages + +### Download transifex files + +In order to test other languages within Chocolatey GUI, prior to a release, you will need to do the following: + +* Open an Administrative PowerShell Window +* Navigate to the folder where you have cloned the Chocolatey GUI repository +* Run the following command: + * `.\build.ps1 --target="Transifex-Pull-Translations"` +* You will be asked whether you have a transifex token + * If so, answer yes, and enter it + * If not, answer no, and you will be prompted for your transifex username/password +* Once all information is provided, hit enter +* All current resx files should be downloaded into the `Source\ChocolateyGui\Properties` folder +* Build the application by running the command: + * `.\build.ps1` +* Assuming that completes successfully, you should be able to install the generated MSI, which will contain the most recent translations available + +### Reset transifex authentication + +If for some reason you need to reset the authentication used by transifex, you will need to delete the persisted information. +This can be found in the root of your Users folder, in a file called `.transifexrc`. +Simply delete this file. +If you do this, you will need to run the `Transifex-Pull-Translations` task again, in order to provide the required information. + +### Temporary code change + +When testing another language (that does not match the current system locale), a little code-snippet has to be added. +Add the following to your App.xaml.cs (located at `Source/ChocolateyGui/App.xaml.cs`) (right before `application.Run();`) + +* **Don't forget** to remove this line of code after you're done testing! + +```cs +System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(""); +application.Run(); +``` + +> :choco-info: **NOTE** +> +> If you are unsure what you should replace `` with, a list of available cultures and their corresponding codes tags can be found [here](https://msdn.microsoft.com/en-us/library/cc233982.aspx). + +> :choco-info: **NOTE** +> +> There is an [open issue](https://github.com/chocolatey/ChocolateyGUI/issues/533) that would allow runtime modification of the current locale, but this hasn't been implemented yet. + +Once this has been implemented, this code change will no longer be required. + +## Adding New Strings To Chocolatey GUI + +The following rules of thumb apply for adding entirely new strings to Chocolatey GUI: + +* Always use static bindings (lang:Resources.xyz) +* Use context-sensitive names (`PageOrControlName_StringUsageHintOrName`) +* Always add the new String to `Resources.resx` (English) +* Only changes to this one file should be committed into source control +* Once your changes have been merged into the develop branch, the resx file will be uploaded to Transifex, which will then make the strings available for translation into other languages diff --git a/src/content/docs/en-us/chocolatey-gui/release-notes.mdx b/src/content/docs/en-us/chocolatey-gui/release-notes.mdx new file mode 100644 index 00000000000..c4787e89bf5 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/release-notes.mdx @@ -0,0 +1,656 @@ +--- +order: 10 +xref: chocolateygui-release-notes +title: Release Notes +description: Release Notes for Chocolatey GUI +ogImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-gui-og.png +twitterImage: https://img.chocolatey.org/social-share/release-notes-chocolatey-gui-twitter.png +--- +import Xref from '@components/Xref.astro'; +import ChocolateyComponentDependencies from '@components/docs/ChocolateyComponentDependencies.mdx'; + +# Chocolatey GUI Release Notes - Open Source + +This covers changes for the "chocolateygui" package, which is available as FOSS. + +> :choco-info: **NOTE** +> +> For commercial editions, please also refer to , as well at the . + + + +## 2.1.1 (April 29, 2024) \{#april-29-2024} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fixes + +- Fix - Chocolatey GUI not displaying error output when running as non-admin through Background Service - see [#967](https://github.com/chocolatey/ChocolateyGUI/issues/967). +- Fix - Chocolatey GUI does not start if the config folder is missing from `C:\ProgramData\Chocolatey GUI`. - see [#996](https://github.com/chocolatey/ChocolateyGUI/issues/996). + +## 2.1.0 (June 29, 2023) \{#june-29-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.x. + +### Bug Fixes + +- Fix - Package version normalization is not being applied everywhere - see [#1005](https://github.com/chocolatey/ChocolateyGUI/issues/1005). +- Fix - Null reference exception is thrown when accessing the Chocolatey GUI settings screen - see [#1003](https://github.com/chocolatey/ChocolateyGUI/issues/1003). + +### Improvement + +- Provide ability to use option for Chocolatey CLI commands to skip cached HTTP query results - see [#1014](https://github.com/chocolatey/ChocolateyGUI/issues/1014). + + +## 2.1.0-alpha-20230608 (June 8, 2023) \{#alpha-20230608-june-8-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +### Bug Fixes + +- Fix - Package version normalization is not being applied everywhere - see [#1005](https://github.com/chocolatey/ChocolateyGUI/issues/1005). +- Fix - Null reference exception is thrown when accessing the Chocolatey GUI settings screen - see [#1003](https://github.com/chocolatey/ChocolateyGUI/issues/1003). + + +## 2.0.0 (May 31, 2023) \{#may-31-2023} + +> :choco-warning: **WARNING** +> +> Refer to our for recommendations before upgrading from 1.x versions to 2.0.0. + +### Breaking Changes + +- Upgrade to target version 3.1.0 of Chocolatey.NuGet.Client and version 2.0.0 of Chocolatey.Lib assemblies - see [#974](https://github.com/chocolatey/ChocolateyGUI/issues/974). +- Remove side-by-side installs - see [#989](https://github.com/chocolatey/ChocolateyGUI/issues/989). + +### Improvement + +- Ensure correct usage of ListCommand after upstream changes in Chocolatey CLI - see [#990](https://github.com/chocolatey/ChocolateyGUI/issues/990). + + +## 1.1.3 (May 10, 2023) \{#may-10-2023} + +### Bug Fix + +- Fix - Update version ranges in nuspec file to use maximum inclusive rather than maximum exclusive - see [#999](https://github.com/chocolatey/ChocolateyGUI/issues/999). + + +## 2.0.0-beta-20230426 (April 26, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey GUI **only** works with the beta version of the Chocolatey GUI Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvements + +- Added handling for large package download counts, which causes an exception to be thrown when number is too large. +- Update to use latest beta releases of Chocolatey products. + + +## 2.0.0-beta-20230412 (April 12, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey GUI **only** works with the beta version of the Chocolatey GUI Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Improvement + +- Update to use latest beta releases of Chocolatey Components. + + +## 2.0.0-beta-20230321 (March 21, 2023) + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey GUI **only** works with the beta version of the Chocolatey GUI Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this beta version of Chocolatey GUI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this beta release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Change + +- Remove side-by-side installs - see [#989](https://github.com/chocolatey/ChocolateyGUI/issues/989). + +## Enhancement + +- Ensure correct usage of ListCommand after upstream changes in Chocolatey CLI - see [#990](https://github.com/chocolatey/ChocolateyGUI/issues/990). + + +## 1.1.2 (March 8, 2023) \{#march-8-2023} + +### Improvements + +- Bump LiteDB dependency to 5.0.15 - see [#985](https://github.com/chocolatey/ChocolateyGUI/issues/985). + +## 2.0.0-alpha-20230307 (March 7, 2023) \{#alpha-20230307-march-7-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey GUI **only** works with the alpha version of the Chocolatey GUI Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey GUI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Bug Fix + +- Fix - Chocolatey GUI MSI incorrectly included the `chocolatey.dll` and `chocolatey.pdb` files. + + +## 2.0.0-alpha-20230221 (February 21, 2023) \{#alpha-20230221-february-21-2023} + +> :choco-warning: **WARNING** +> +> This is a pre-release version of Chocolatey GUI and it is **NOT** suitable for production use! A pre-release version will have bugs that could have a detrimental impact to your environment. Ensure all necessary due diligence steps are taken before using in your environment. + +> :choco-warning: **WARNING** +> +> This pre-release version of Chocolatey GUI **only** works with the alpha version of the Chocolatey GUI Licensed Extension. + +> :choco-info: **NOTE** +> +> If you run into any problems when using this alpha version of Chocolatey GUI we would ask that you comment on this [discussion](https://github.com/chocolatey/choco/discussions/2995), which is where we will be collating issues, and providing workarounds, etc. We will not be accepting issues raised against this alpha release. + +### Known Issues + +See this [list](https://github.com/chocolatey/choco/discussions/2995) for known issues with this pre-release. + +### Breaking Change + +- Upgrade to target version 6.4.0 of NuGet.Client and version 2.0.0 of Chocolatey.Lib assemblies - see [#974](https://github.com/chocolatey/ChocolateyGUI/issues/974). + + +## [1.1.1](https://github.com/chocolatey/ChocolateyGUI/milestone/30?closed=1) (January 26, 2023) \{#january-26-2023} + +### Bug Fixes + +- Fix - Unable to load with Chocolatey GUI Licensed Extension - see [#977](https://github.com/chocolatey/ChocolateyGUI/issues/977). +- Fix - Cached file listing outdated packages is not updated when there are no changes - see [#978](https://github.com/chocolatey/ChocolateyGUI/issues/978). + +## [1.1.0](https://github.com/chocolatey/ChocolateyGUI/milestone/29?closed=1) (September 8, 2022) \{#september-8-2022} + +### Improvement + +- Add option to bypass confirmation dialogs of potentially destructive operations - see [#919](https://github.com/chocolatey/ChocolateyGUI/issues/919). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [1.0.0](https://github.com/chocolatey/ChocolateyGUI/milestone/28?closed=1) (March 21, 2022) \{#march-21-2022} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolateygui package have changed in this release. It now requires Chocolatey v1.0.0. + +### Breaking Change + +- Updates Chocolatey CLI dependency for package to v1.0.0 - see [#928](https://github.com/chocolatey/ChocolateyGUI/issues/928). + +### Bug Fix + +- Fix - Ensure keyboard shortcuts to navigate between sources works correctly when the show aggregated sources feature is enabled - see [#915](https://github.com/chocolatey/ChocolateyGUI/issues/915) + +### Documentation + +- Fix typo in window seen after export command finishes - see [#924](https://github.com/chocolatey/ChocolateyGUI/pull/924). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.20.0](https://github.com/chocolatey/ChocolateyGUI/milestone/23?closed=1) (February 10, 2022) \{#february-10-2022} + +> :choco-warning: **WARNING** +> +> If you install v0.20.0 of Chocolatey GUI then you will also have to install v0.4.0 of Chocolatey GUI Licensed Extension if you use it. You will see errors when attempting to run Chocolatey GUI if you do not do so. + +### Breaking Changes + +- Change target .NET Framework version to be 4.8 - see [#841](https://github.com/chocolatey/ChocolateyGUI/issues/841) + +### Features + +- Allow for passing in package parameters / installer arguments when installing a package - see [#545](https://github.com/chocolatey/ChocolateyGUI/issues/545). +- Allow users to change the locale to use - see [#533](https://github.com/chocolatey/ChocolateyGUI/issues/533). +- Provide ability to "see" persisted arguments for installed package - see [#770](https://github.com/chocolatey/ChocolateyGUI/issues/770). +- Provide ability to search/filter features and settings - see [#838](https://github.com/chocolatey/ChocolateyGUI/issues/838). +- Add confirmation dialog for update all button - see [#828](https://github.com/chocolatey/ChocolateyGUI/issues/828). +- Add confirmation dialog when removing a source - see [#827](https://github.com/chocolatey/ChocolateyGUI/issues/827). +- Add confirmation dialog when performing an Uninstall/Reinstall operation from context menu - see [#786](https://github.com/chocolatey/ChocolateyGUI/issues/786). + +### Bug Fixes + +- Fix - Install button is not disabled when installation of packages is not allowed - see [#911](https://github.com/chocolatey/ChocolateyGUI/issues/911). +- Fix - Message boxes used to report issues often don't stay open - see [#904](https://github.com/chocolatey/ChocolateyGUI/issues/904). +- Fix - All operations on packages with a progress dialog are broken - see [#875](https://github.com/chocolatey/ChocolateyGUI/issues/875). + +### Improvements + +- Ensure WiX installer verifies that .NET Framework 4.8 is installed - see [#842](https://github.com/chocolatey/ChocolateyGUI/issues/842). +- Order features and settings alphabetically - see [#837](https://github.com/chocolatey/ChocolateyGUI/issues/837). +- Support per-monitor DPI - see [#836](https://github.com/chocolatey/ChocolateyGUI/issues/836). +- Chocolatey GUI doesn't write to chocolatey.log - see [#697](https://github.com/chocolatey/ChocolateyGUI/issues/697). + +### Documentation + +- Gitter is still mentioned in the Readme - see [#898](https://github.com/chocolatey/ChocolateyGUI/issues/898). +- Fix link to localization article - see [#891](https://github.com/chocolatey/ChocolateyGUI/pull/891). +- Remove package parameters from nuspec file - see [#885](https://github.com/chocolatey/ChocolateyGUI/issues/885). +- Contributing.md has broken links - see [#854](https://github.com/chocolatey/ChocolateyGUI/issues/854). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.19.0](https://github.com/chocolatey/ChocolateyGUI/milestone/26?closed=1) (September 6, 2021) \{#september-6-2021} + +> :choco-warning: **WARNING** +> +> The dependencies of the chocolateygui package have changed in this release, and it now requires Chocolatey CLI v0.11.1. + +> :choco-warning: **WARNING** +> +> If you use Chocolatey GUI alongside the Chocolatey GUI Licensed Extension, if you install v0.19.0 of Chocolatey GUI then you will also have to install v0.3.0 of Chocolatey GUI Licensed Extension, or you will see errors when attempting to run Chocolatey GUI. + +### Improvements + +- [Security] XML External Entity attack in log4net (CVE-2018-1285) - see [#869](https://github.com/chocolatey/ChocolateyGUI/issues/869). +- Make use of Chocolatey CLI Export command - see [#882](https://github.com/chocolatey/ChocolateyGUI/issues/882). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.18.2](https://github.com/chocolatey/ChocolateyGUI/milestone/25?closed=1) (September 2, 2021) \{#september-2-2021} + +### Bug Fix + +- Fix - When running Chocolatey GUI, ensure installed Chocolatey assembly is used, rather than locally referenced assembly - see [#857](https://github.com/chocolatey/ChocolateyGUI/issues/857). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.18.1](https://github.com/chocolatey/ChocolateyGUI/milestone/24?closed=1) (March 29, 2021) \{#march-29-2021} + +### Bug Fixes + +- Fix - Chocolatey GUI fails to start in certain circumstances when running as a non-administrator user - [#829](https://github.com/chocolatey/ChocolateyGUI/issues/829). +- Fix - Ensure that transactions are persisted to configuration databases when making changes to Chocolatey GUI settings/features - see [#832](https://github.com/chocolatey/ChocolateyGUI/issues/832). +- Fix - Chocolatey GUI incorrectly reverts to list view after making a change in settings screen - see [#830](https://github.com/chocolatey/ChocolateyGUI/issues/830). + +### Documentation + +- Fix incorrect quoting of parameter in package nuspec - see [#831](https://github.com/chocolatey/ChocolateyGUI/issues/831). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.18.0](https://github.com/chocolatey/ChocolateyGUI/milestone/19?closed=1) (March 9, 2021) \{#march-9-2021} + +### Breaking Changes + +- Update the default value for tile view for local and remote source to be true - see [#820](https://github.com/chocolatey/ChocolateyGUI/issues/820). +- Update the default value for "NonAdmin Access to Settings" feature to be false - see [#601](https://github.com/chocolatey/ChocolateyGUI/issues/601). + +### Features + +- Add a feature to toggle on/off the option to not attempt to download icons for packages - see [#811](https://github.com/chocolatey/ChocolateyGUI/issues/811). +- Add a feature to toggle on/off a read only view for installed packages - see [#780](https://github.com/chocolatey/ChocolateyGUI/issues/780). +- Add a feature to toggle on/off the checking for outdated packages automatically - see [#769](https://github.com/chocolatey/ChocolateyGUI/issues/769). +- Add a feature to toggle on/off the preloading of packages when switching to remote views - see [#706](https://github.com/chocolatey/ChocolateyGUI/issues/706). +- Add a feature to toggle on/off dark mode for application UI - see [#685](https://github.com/chocolatey/ChocolateyGUI/issues/685). +- Add a configuration option to specify a default for a particular source when application loads - see [#808](https://github.com/chocolatey/ChocolateyGUI/issues/808). +- Provide ability to control which UI operations are allowed to be executed - see [#757](https://github.com/chocolatey/ChocolateyGUI/issues/757). +- Provide ability to set configuration at the machine level, rather than just at user level - see [#602](https://github.com/chocolatey/ChocolateyGUI/issues/602). +- Enable text search within local and remove views - when not using Tile View - see [#688](https://github.com/chocolatey/ChocolateyGUI/issues/688). + +### Bug Fixes + +- Fix - Option to only show packages with updates doesn't work correctly when automated outdated check is enabled - see [#821](https://github.com/chocolatey/ChocolateyGUI/issues/821). +- Fix - Configuration option to default to tile view for remote source is not respected - see [#782](https://github.com/chocolatey/ChocolateyGUI/issues/782). +- Fix - Using the UseDelayedSearch package parameter during installation doesn't work - see [#749](https://github.com/chocolatey/ChocolateyGUI/issues/749). +- Fix - Ensure that all features/config can be set via parameters during installation of package - see [#741](https://github.com/chocolatey/ChocolateyGUI/issues/741). + +### Improvements + +- Add keybinding for navigating between sources - see [#513](https://github.com/chocolatey/ChocolateyGUI/issues/513). +- Improve readability of settings description by wrapping text within cell - see [#813](https://github.com/chocolatey/ChocolateyGUI/issues/813). +- Improve how package icons with an svg extension are rendered - see [#756](https://github.com/chocolatey/ChocolateyGUI/issues/756). +- Improve how package icons with an ico extension are rendered - see [#739](https://github.com/chocolatey/ChocolateyGUI/issues/739). +- Improve order and spacing of context menu items to make it easier to use - see [#745](https://github.com/chocolatey/ChocolateyGUI/issues/745). +- Update wording of context menu items to make it clearer what they refer to - see [#730](https://github.com/chocolatey/ChocolateyGUI/issues/730). +- Update Svg.Skia and SkiaSharp dependencies - see [#812](https://github.com/chocolatey/ChocolateyGUI/pull/812). +- Update LiteDB to v5.0.5 - see [#763](https://github.com/chocolatey/ChocolateyGUI/pull/763). +- Update Automapper to v7.0.1 - see [#760](https://github.com/chocolatey/ChocolateyGUI/pull/760). + +### Documentation + +- Add link to wixtoolset Visual Studio integration - see [#792](https://github.com/chocolatey/ChocolateyGUI/pull/792). +- Update credits to include all 3rd party dependencies that are being used - see [#761](https://github.com/chocolatey/ChocolateyGUI/issues/761). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.17.3](https://github.com/chocolatey/ChocolateyGUI/milestone/22?closed=1) (February 1, 2021) \{#february-1-2021} + +### Bug Fix + +- Fix - Chocolatey GUI doesn't always shows the right list of software - see [#807](https://github.com/chocolatey/ChocolateyGUI/issues/807). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.17.2](https://github.com/chocolatey/ChocolateyGUI/milestone/21?closed=1) (July 13, 2020) \{#july-13-2020} + +### Bug Fixes + +- Fix - Ensure earlier versions of Chocolatey GUI assemblies can be resolved when using an older version of Chocolatey GUI extension - see [#785](https://github.com/chocolatey/ChocolateyGUI/issues/785). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.17.1](https://github.com/chocolatey/ChocolateyGUI/milestone/20?closed=1) (June 11, 2020) \{#june-11-2020} + +### Bug Fixes + +- Fix - Language localization files are missing in 0.17.0 - see [#778](https://github.com/chocolatey/ChocolateyGUI/issues/778). +- Fix - Chocolatey GUI runs as a 32 bit process when running on a 64 bit machine - see [#779](https://github.com/chocolatey/ChocolateyGUI/issues/779). + +### Release Video + +A short video explaining what is included in this release can be found here: + +
    + +
    + +## [0.17.0](https://github.com/chocolatey/ChocolateyGUI/milestone/18?closed=1) (March 26, 2020) \{#march-26-2020} + +### Features + +- Add ability to show/hide download count on remote source view - see [#710](https://github.com/chocolatey/ChocolateyGUI/issues/710). +- Create and publish additional NuGet packages for Chocolatey GUI - see [#698](https://github.com/chocolatey/ChocolateyGUI/issues/698). +- Provide integration with `chocolateygui.extension` - see [#679](https://github.com/chocolatey/ChocolateyGUI/issues/679). +- Create commands to allow purging of caches from CLI - see [#673](https://github.com/chocolatey/ChocolateyGUI/issues/673). +- Provide ability to purge Outdated Package cache file - see [#671](https://github.com/chocolatey/ChocolateyGUI/issues/671). +- Separate the app.manifest from the exe [Customer] - see [#629](https://github.com/chocolatey/ChocolateyGUI/issues/629). +- Provide ability to hide packages that are known to already be installed when viewing sources - see [#627](https://github.com/chocolatey/ChocolateyGUI/issues/627). +- Provide ability to refresh cached icons for packages when there are known changes to icon - see [#624](https://github.com/chocolatey/ChocolateyGUI/issues/624). +- Remove admin only sources/repos - see [#603](https://github.com/chocolatey/ChocolateyGUI/issues/603). +- Allow setting of Chocolatey GUI settings via Chocolatey package parameter - see [#592](https://github.com/chocolatey/ChocolateyGUI/issues/592). +- Search in all available repositories - see [#588](https://github.com/chocolatey/ChocolateyGUI/issues/588). +- Hide Download Counters - see [#569](https://github.com/chocolatey/ChocolateyGUI/issues/569). +- Limit non-admin list to self service only - see [#432](https://github.com/chocolatey/ChocolateyGUI/issues/432). + +### C4B Features + +- Add footer with information about current version in bottom left-hand corner - see [#705](https://github.com/chocolatey/ChocolateyGUI/issues/705). +- Add ability to strong name sign the output of the build - see [#704](https://github.com/chocolatey/ChocolateyGUI/issues/704). + +### Bug Fixes + +- Fix - PackageParameters are not working (when installing Chocolatey GUI via Chocolatey CLI) - see [#716](https://github.com/chocolatey/ChocolateyGUI/issues/716). +- Fix - Context menu not displayed - see [#709](https://github.com/chocolatey/ChocolateyGUI/issues/709). +- Fix - Correctly handle incorrect license installation - see [#686](https://github.com/chocolatey/ChocolateyGUI/issues/686). +- Fix - Packages with pre-release versioning never found on list/search - see [#676](https://github.com/chocolatey/ChocolateyGUI/issues/676). +- Fix - Empty icon doesn't appear on local source view - see [#674](https://github.com/chocolatey/ChocolateyGUI/issues/674). +- Fix - IsPrerelease property is never set - see [#661](https://github.com/chocolatey/ChocolateyGUI/issues/661). +- Fix - nuspec - Remove the upper bound dependency on Chocolatey CLI - see [#656](https://github.com/chocolatey/ChocolateyGUI/issues/656). +- Fix - Prerelease packages not being correctly labeled as "outdated" - see [#653](https://github.com/chocolatey/ChocolateyGUI/issues/653). +- Fix - Tile View - Nitpick inconsistent spacing - see [#652](https://github.com/chocolatey/ChocolateyGUI/issues/652). +- Fix - NotSupportedException:'System.NotSupportedException: UriTypeConverter cannot convert from (null) when viewing Package Details - see [#643](https://github.com/chocolatey/ChocolateyGUI/issues/643). +- Fix - nuspec - Add .NET Framework 4.x Dependency [Customer] - see [#632](https://github.com/chocolatey/ChocolateyGUI/issues/632). +- Fix - Unable to update source after making a change to another source [Customer] - see [#620](https://github.com/chocolatey/ChocolateyGUI/issues/620). +- Fix - Tile selection for Remote Sources is not being used - see [#618](https://github.com/chocolatey/ChocolateyGUI/issues/618). +- Fix - Unable to install a package that uses 64bit PowerShell Modules - see [#610](https://github.com/chocolatey/ChocolateyGUI/issues/610). +- Fix - Locking of generated packages.config file when exporting package list - see [#593](https://github.com/chocolatey/ChocolateyGUI/issues/593). +- Fix - Next/Previous First/Last buttons remain disabled when using Simple.Server [Customer] - see [#590](https://github.com/chocolatey/ChocolateyGUI/issues/590). +- Fix - Chocolatey GUI icon is a blank image - see [#589](https://github.com/chocolatey/ChocolateyGUI/issues/589). +- Fix - GUI misses update that shows in CLI - see [#585](https://github.com/chocolatey/ChocolateyGUI/issues/585). +- Fix - Chocolatey GUI crashes when opening details page for Rufus package - see [#584](https://github.com/chocolatey/ChocolateyGUI/issues/584). +- Fix - Chocolatey GUI crashes when viewing Package Details - see [#578](https://github.com/chocolatey/ChocolateyGUI/issues/578). +- Fix - Package shows as installed in GUI when it did not actually install [Customer] - see [#573](https://github.com/chocolatey/ChocolateyGUI/issues/573). +- Fix - Chocolatey GUI crashes on startup if all sources are disabled. - see [#568](https://github.com/chocolatey/ChocolateyGUI/issues/568). +- Fix - Chocolatey GUI v0.16.0 uninstall errors (but uninstalls) - see [#563](https://github.com/chocolatey/ChocolateyGUI/issues/563). +- Fix - Links in Settings/About page that result in "Page Not Found" errors - see [#562](https://github.com/chocolatey/ChocolateyGUI/issues/562). +- Fix - Icon not showing up in gallery - see [#558](https://github.com/chocolatey/ChocolateyGUI/issues/558). +- Fix - Package source link for Chocolatey GUI 0.15.0 in nuspec is wrong - see [#550](https://github.com/chocolatey/ChocolateyGUI/issues/550). +- Fix - Context Menu Position issue in the package details. - see [#548](https://github.com/chocolatey/ChocolateyGUI/issues/548). +- Fix - On Load of any source, outdated is running (logging) every time - see [#525](https://github.com/chocolatey/ChocolateyGUI/issues/525). +- Fix - Issue where Latest Version is not showing - see [#506](https://github.com/chocolatey/ChocolateyGUI/issues/506). +- Fix - Disable "Show Only Packages with Updates" while information is still loaded - see [#502](https://github.com/chocolatey/ChocolateyGUI/issues/502). + +### Improvements + +- Prerelease label should not be red as this suggests an error, which isn't the case - see [#711](https://github.com/chocolatey/ChocolateyGUI/issues/711). +- Move Windows specific code into another Common library - see [#682](https://github.com/chocolatey/ChocolateyGUI/issues/682). +- Remove tilting chocolatey logo - see [#680](https://github.com/chocolatey/ChocolateyGUI/issues/680). +- Split CLI functionality into separate exe - see [#675](https://github.com/chocolatey/ChocolateyGUI/issues/675). +- Allow "safe" Chocolatey operations to happen in parallel - see [#672](https://github.com/chocolatey/ChocolateyGUI/issues/672). +- Update to Chocolatey.Lib 0.10.15 - see [#670](https://github.com/chocolatey/ChocolateyGUI/issues/670). +- Ensure all dialogs shown in Chocolatey GUI have localized text on buttons - see [#668](https://github.com/chocolatey/ChocolateyGUI/issues/668). +- Do not display password in source settings screen - see [#665](https://github.com/chocolatey/ChocolateyGUI/issues/665). +- Tile View - Prevent Version text overlap - see [#651](https://github.com/chocolatey/ChocolateyGUI/issues/651). +- Ensure that icons maintain their aspect ratio - see [#633](https://github.com/chocolatey/ChocolateyGUI/issues/633). +- Improve UI for Feature and Settings lists - see [#612](https://github.com/chocolatey/ChocolateyGUI/pull/612). +- Upgrade MahApps.Metro and MahApps.Metro.IconPacks - see [#608](https://github.com/chocolatey/ChocolateyGUI/pull/608). +- Remove multiple uses of SetCustomLogging - see [#607](https://github.com/chocolatey/ChocolateyGUI/issues/607). +- Don't allow navigation to settings or about screen while dialog is open - see [#606](https://github.com/chocolatey/ChocolateyGUI/issues/606). +- Improve the descriptions/explanations used for Chocolatey GUI settings - see [#605](https://github.com/chocolatey/ChocolateyGUI/issues/605). +- Provide separate settings and about views - see [#598](https://github.com/chocolatey/ChocolateyGUI/issues/598). +- Chocolatey GUI not found in the PATH - see [#574](https://github.com/chocolatey/ChocolateyGUI/issues/574). +- Chocolatey GUI pulls download stats only from the community feed - see [#564](https://github.com/chocolatey/ChocolateyGUI/issues/564). +- Move version on Package view to the left column - see [#530](https://github.com/chocolatey/ChocolateyGUI/issues/530). +- Improve UI by reducing flashing when modal appears - see [#528](https://github.com/chocolatey/ChocolateyGUI/issues/528). +- Package description should use all available client space - see [#501](https://github.com/chocolatey/ChocolateyGUI/issues/501). +- Add different background for outdated packages - see [#431](https://github.com/chocolatey/ChocolateyGUI/issues/431). +- Package details view is missing the 'Gallery' link - see [#430](https://github.com/chocolatey/ChocolateyGUI/issues/430). +- Current prerelease does not display any versioning information in the ABOUT screen - see [#422](https://github.com/chocolatey/ChocolateyGUI/issues/422). +- Fix rendering of headings in package description - see [#356](https://github.com/chocolatey/ChocolateyGUI/issues/356). +- Add option to show package id column - see [#270](https://github.com/chocolatey/ChocolateyGUI/issues/270). + +### Documentation + +- Add Czech language map - see [#729](https://github.com/chocolatey/ChocolateyGUI/pull/729). +- Fix typo in readme - see [#693](https://github.com/chocolatey/ChocolateyGUI/issues/693). +- Added Chinese language map - see [#634](https://github.com/chocolatey/ChocolateyGUI/pull/634). +- Fix typo in about page - see [#583](https://github.com/chocolatey/ChocolateyGUI/pull/583). + +## [0.16.0](https://github.com/chocolatey/ChocolateyGUI/milestone/17?closed=1) (February 15, 2018) \{#february-15-2018} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.16.0). + +## [0.15.0](https://github.com/chocolatey/ChocolateyGUI/milestone/6?closed=1) (October 18, 2017) \{#october-18-2017} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.15.0). + +## [0.13.2](https://github.com/chocolatey/ChocolateyGUI/milestone/14?closed=1) (December 14, 2015) \{#december-14-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.13.2). + +## [0.13.1](https://github.com/chocolatey/ChocolateyGUI/milestone/13?closed=1) (March 29, 2015) \{#march-29-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.13.1). + +## [0.13.0](https://github.com/chocolatey/ChocolateyGUI/milestone/3?closed=1) (March 26, 2015) \{#march-26-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.13.0). + +## [0.12.4](https://github.com/chocolatey/ChocolateyGUI/milestone/10?closed=1) (March 12, 2015) \{#march-12-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.12.4). + +## [0.12.3](https://github.com/chocolatey/ChocolateyGUI/milestone/9?closed=1) (March 3, 2015) \{#march-3-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.12.3). + +## [0.12.2](https://github.com/chocolatey/ChocolateyGUI/milestone/8?closed=1) (March 3, 2015) \{#march-3-2015-1} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.12.2). + +## [0.12.1](https://github.com/chocolatey/ChocolateyGUI/milestone/7?closed=1) (March 2, 2015) \{#march-2-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.12.1). + +## [0.12.0](https://github.com/chocolatey/ChocolateyGUI/milestone/2?closed=1) (February 28, 2015) \{#february-28-2015} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.12.0). + +## [0.11.4](https://github.com/chocolatey/ChocolateyGUI/milestone/5?closed=1) (September 16, 2014) \{#september-16-2014} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.11.4). + +## 0.11.3 (September 16, 2014) \{#september-16-2014-1} + +No release notes available. + +## [0.11.2](https://github.com/chocolatey/ChocolateyGUI/milestone/4?closed=1) (September 16, 2014) \{#september-16-2014-2} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.11.2). + +## [0.11.1](https://github.com/chocolatey/ChocolateyGUI/milestone/11?closed=1) (February 24, 2013) \{#february-24-2013} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.11.1). + +## [0.11.0](https://github.com/chocolatey/ChocolateyGUI/milestone/1?closed=1) (February 24, 2013) \{#february-24-2013-1} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.11.0). + +## 0.1.4 (February 10, 2013) \{#february-10-2013} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.1.4). + +## 0.1.3 (February 10, 2013) \{#february-10-2013-1} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.1.3). + +## 0.1.2 (February 10, 2013) \{#february-10-2013-2} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.1.2). + +## 0.1.1 (February 10, 2013) \{#february-10-2013-3} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.1.1). + +## 0.1.0 (February 9, 2013) \{#february-9-2013} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.1.0). + +## 0.0.5 (September 10, 2011) \{#september-10-2011} + +Release notes can be found [here](https://github.com/chocolatey/ChocolateyGUI/releases/tag/0.0.5). + +## 0.0.4 (September 10, 2011) \{#september-10-2011} + +No release notes available. + +## 0.0.3 (September 10, 2011) \{#september-10-2011-1} + +No release notes available. + +## 0.0.2 (September 10, 2011) \{#september-10-2011-2} + +No release notes available. + +## 0.0.1 (September 10, 2011) \{#september-10-2011-3} + +No release notes available. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/allow-non-admin-access-to-settings.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/allow-non-admin-access-to-settings.mdx new file mode 100644 index 00000000000..d60c5990b60 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/allow-non-admin-access-to-settings.mdx @@ -0,0 +1,68 @@ +--- +order: 100 +xref: allow-non-admin-access-to-settings +title: Allow Non Admin Access to Settings +description: Controls whether or not a non-administrator user can access the Settings Screen. NOTE - This feature will only work when using the licensed extension for Chocolatey and Chocolatey GUI. +--- +import Xref from '@components/Xref.astro'; + +When using Chocolatey GUI for Business a new feature is available in the Settings screen: + +![Allow non-admin access to Settings](/images/chocolatey-gui/allow_non_admin_access_to_settings.png "Allow non-admin access to Settings") + +Which controls whether or not a non-admin user has access to the Settings screen or not. + +By default, this setting is enabled, so that we don't introduce a breaking change in the way that the application has worked to date. However, at some point, this will likely be flipped to not allowing non-admin users to access the settings. + +When this setting is turned off, a non-admin user will no longer be able to access the Settings screen, as shown below: + +![Access to Settings screen removed](/images/chocolatey-gui/access_to_settings_removed.png "Access to Settings screen removed") + +> :choco-info: **NOTE** +> +> Regardless of this setting, an administrator user will always be able to access the Settings screen. + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'AllowNonAdminAccessToSettings'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'AllowNonAdminAccessToSettings'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'AllowNonAdminAccessToSettings'" --global + +chocolateyguicli feature disable --name="'AllowNonAdminAccessToSettings'" --global +``` + +## Default Value + +As of version 0.18.0 of Chocolatey GUI and Chocolatey GUI Licensed Extension, the default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-dark-mode.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-dark-mode.mdx new file mode 100644 index 00000000000..f63e6d52972 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-dark-mode.mdx @@ -0,0 +1,60 @@ +--- +order: 150 +xref: default-to-dark-mode +title: Default To Dark Mode +description: Allows control over whether dark mode should be used by default or not +--- +import Xref from '@components/Xref.astro'; + +By default, Chocolatey GUI uses a light mode for all of its user interface. As a result, you will see a screen similar to the following when first starting the application: + +![Default to Dark Mode Disabled](/images/chocolatey-gui/feature_default_to_dark_mode_disabled.png "Default to Dark Mode Disabled") + +It is possible to toggle between a light and dark mode for the application using the buttons at the top right hand corner of the application, but if you prefer to see the dark mode by default, then you can enable it with this feature. As a result, you will see something like the following when first starting the application: + +![Default to Dark Mode Enabled](/images/chocolatey-gui/feature_default_to_dark_mode_enabled.png "Default to Dark Mode Enabled") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'DefaultToDarkMode'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'DefaultToDarkMode'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'DefaultToDarkMode'" --global + +chocolateyguicli feature disable --name="'DefaultToDarkMode'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-local-source.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-local-source.mdx new file mode 100644 index 00000000000..c6626541f90 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-local-source.mdx @@ -0,0 +1,65 @@ +--- +order: 20 +xref: default-to-tile-view-for-local-source +title: Default to Tile View for Local Source +description: How to configure whether the tile or list view is used by default +--- +import Xref from '@components/Xref.astro'; + +By default (starting with version 0.18.0), Chocolatey GUI uses a tile view to show all of the packages that are currently installed locally on the +machine that is executing Chocolatey GUI. As a result, you will see a screen similar to the following when first +starting the application: + +![Default to Tile View for Local Source Disabled](/images/chocolatey-gui/feature_default_tile_view_local_disabled.png "Default to Tile View for Local Source Disabled") + +It is possible to toggle between the list view and a tile view for the packages that are installed locally using the +buttons at the top right hand corner of the application, but it you prefer to see the list view by default, then you +can enable it with this feature. As a result, you will see something like the following when first starting the +application: + +![Default to Tile View for Local Source Enabled](/images/chocolatey-gui/feature_default_tile_view_local_enabled.png "Default to Tile View for Local Source Enabled") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'DefaultToTileViewForLocalSource'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'DefaultToTileViewForLocalSource'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'DefaultToTileViewForLocalSource'" --global + +chocolateyguicli feature disable --name="'DefaultToTileViewForLocalSource'" --global +``` + +## Default Value + +As of version 0.18.0 of Chocolatey GUI, the default value for this feature is enabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.16.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-remote-source.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-remote-source.mdx new file mode 100644 index 00000000000..8c51ae35fca --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/default-to-tile-view-for-remote-source.mdx @@ -0,0 +1,65 @@ +--- +order: 30 +xref: default-to-tile-view-for-remote-source +title: Default to Tile View for Remote Source +description: How to configure whether the tile or list view is used by default +--- +import Xref from '@components/Xref.astro'; + +By default (starting with version 0.18.0), Chocolatey GUI uses a tile view to show all of the packages that are currently available on the remote +sources that have been configured. As a result, you will see a screen similar to the following when first +starting the application and clicking on a remote source: + +![Default to Tile View for Remote Source Disabled](/images/chocolatey-gui/feature_default_tile_view_remote_disabled.png "Default to Tile View for Remote Source Disabled") + +It is possible to toggle between the list view and a tile view for the packages that are available on a remote source +using the buttons at the top right hand corner of the application, but it you prefer to see the list view by default, +then you can enable it with this feature. As a result, you will see something like the following when first starting +the application and clicking on a remote source: + +![Default to Tile View for Remote Source Enabled](/images/chocolatey-gui/feature_default_tile_view_remote_enabled.png "Default to Tile View for Remote Source Enabled") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'DefaultToTileViewForRemoteSource'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'DefaultToTileViewForRemoteSource'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'DefaultToTileViewForRemoteSource'" --global + +chocolateyguicli feature disable --name="'DefaultToTileViewForRemoteSource'" --global +``` + +## Default Value + +As of version 0.18.0 of Chocolatey GUI, the default value for this feature is enabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.16.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/exclude-installed-packages.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/exclude-installed-packages.mdx new file mode 100644 index 00000000000..a5f12816d9f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/exclude-installed-packages.mdx @@ -0,0 +1,67 @@ +--- +order: 70 +xref: exclude-installed-packages +title: Exclude Installed Packages +description: Do not show packages that are already installed when viewing sources +--- +import Xref from '@components/Xref.astro'; + +By default, when viewing remote sources, such as the Chocolatey Community Repository, Chocolatey GUI will show you all +available packages, even if you already have them installed. Installed packages will be marked with a green banner, +indicating that they are currently installed. As a result, you may see something like the following: + +![Exclude Installed Packages Disabled](/images/chocolatey-gui/feature_exclude_installed_packages_disabled.png "Exclude Installed Packages Disabled") + +By enabling this feature, packages that are already installed will no longer be shown in the list of available packages, +as shown here: + +![Exclude Installed Packages Enabled](/images/chocolatey-gui/feature_exclude_installed_packages_enabled.png "Exclude Installed Packages Enabled") + +> :choco-info: **NOTE** +> +> When first enabling this feature, if the remote source was already open, it will be refresh to refresh the package list before the packages will be excluded. + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'ExcludeInstalledPackages'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'ExcludeInstalledPackages'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'ExcludeInstalledPackages'" --global + +chocolateyguicli feature disable --name="'ExcludeInstalledPackages'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-all-remote-chocolatey-sources.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-all-remote-chocolatey-sources.mdx new file mode 100644 index 00000000000..7f01b007dd9 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-all-remote-chocolatey-sources.mdx @@ -0,0 +1,71 @@ +--- +order: 140 +xref: hide-all-remote-chocolatey-sources +title: Hide All Remote Chocolatey Sources +description: Allow control over whether Chocolatey GUI should be switched into a read-only mode of operation +--- +import Xref from '@components/Xref.astro'; +import HidingSources from '@components/docs/HidingSources.mdx'; +import RequireChocolateyGuiLicensedExtensionNote from '@components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx'; +import RestartRequiredWarning from '@components/docs/RestartRequiredWarning.mdx'; + +There are times when you want to use Chocolatey GUI in a read-only mode, meaning that you can view what packages are currently installed, but to not allow access to install any other packages. When this is enabled, Chocolatey GUI would change from showing the following: + +![What Chocolatey GUI looks like before enabling the HideAllRemoteChocolateySources feature](/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_1.png "What Chocolatey GUI looks like before enabling the HideAllRemoteChocolateySources feature") + +to only showing a single "This PC" source: + +![What Chocolatey GUI looks like after enabling the HideAllRemoteChocolateySources feature](/images/chocolatey-gui/feature_hide_all_remote_chocolatey_sources_2.png "What Chocolatey GUI looks like after enabling the HideAllRemoteChocolateySources feature") + +Notice that the `ChocolateyInternal` and `chocolatey.licensed` sources are no longer displayed. + + + + + + + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'HideAllRemoteChocolateySources'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'HideAllRemoteChocolateySources'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'HideAllRemoteChocolateySources'" --global + +chocolateyguicli feature disable --name="'HideAllRemoteChocolateySources'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-package-download-count.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-package-download-count.mdx new file mode 100644 index 00000000000..35f20f97c7b --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-package-download-count.mdx @@ -0,0 +1,74 @@ +--- +order: 120 +xref: hide-package-download-count +title: Hide Package Download Count +description: Allows control over whether package download count is displayed on remote source views +--- +import Xref from '@components/Xref.astro'; + +By default, Chocolatey GUI will attempt to show the download statistics for a package on a remote feed. This can be +useful when making a decision about whether to install a package or not. For example, when viewing the Chocolatey +Community Repository feed, you will see the following: + +![Hide Package Download Count Disabled 1](/images/chocolatey-gui/feature_hide_package_download_count_disabled_1.png "Hide Package Download Count Disabled 1") + +However, when using a feed that doesn't support package download statistics, you can be shown the following which isn't +as useful: + +![Hide Package Download Count Disabled 2](/images/chocolatey-gui/feature_hide_package_download_count_disabled_2.png "Hide Package Download Count Disabled 2") + +By enabling this feature, you can turn off package download count for all sources, and as a result, you will see the +following: + +![Hide Package Download Count Enabled 1](/images/chocolatey-gui/feature_hide_package_download_count_enabled_1.png "Hide Package Download Count Enabled 1") + +![Hide Package Download Count Enabled 2](/images/chocolatey-gui/feature_hide_package_download_count_enabled_2.png "Hide Package Download Count Enabled 2") + +> :choco-info: **NOTE** +> +> It is currently not possible to configure showing/hiding the package download count for individual feeds + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'HidePackageDownloadCount'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'HidePackageDownloadCount'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'HidePackageDownloadCount'" --global + +chocolateyguicli feature disable --name="'HidePackageDownloadCount'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-this-pc-source.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-this-pc-source.mdx new file mode 100644 index 00000000000..925a153904c --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/hide-this-pc-source.mdx @@ -0,0 +1,66 @@ +--- +order: 160 +xref: hide-this-pc-source +title: Hide This PC Source +description: Allow control over whether Chocolatey GUI should show the local This PC source or not +--- +import Xref from '@components/Xref.astro'; +import HidingSources from '@components/docs/HidingSources.mdx'; +import RequireChocolateyGuiLicensedExtensionNote from '@components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx'; +import RestartRequiredWarning from '@components/docs/RestartRequiredWarning.mdx'; + +There are times when you want to simplify the usage of Chocolatey GUI for your end users, and only show the sources where packages can be installed from, rather than including a source which lists all of the currently installed packages. When this feature is enabled, Chocolatey GUI would change from showing the following: + +![Hide This PC Source Disabled](/images/chocolatey-gui/feature_hide_this_pc_source_disabled.png "Hide This PC Source Disabled") + +to only showing the available remote sources which are currently configured on the system: + +![Hide This PC Source Enabled](/images/chocolatey-gui/feature_hide_this_pc_source_enabled.png "Hide This PC Source Enabled") + +Notice that the "This PC" source is no longer available. + + + + + + + +## Resources + +Below is a short video which shows this feature in action: + +> :choco-info: **NOTE** +> +> Coming soon + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'HideThisPCSource'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'HideThisPCSource'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'HideThisPCSource'" --global + +chocolateyguicli feature disable --name="'HideThisPCSource'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.19.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI v0.19.0. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/index.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/index.mdx new file mode 100644 index 00000000000..735811912b8 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/index.mdx @@ -0,0 +1,8 @@ +--- +order: 10 +xref: gui-features +title: Features +description: The available feature options for Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-all-package-icon-downloads.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-all-package-icon-downloads.mdx new file mode 100644 index 00000000000..aace9e1cde6 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-all-package-icon-downloads.mdx @@ -0,0 +1,67 @@ +--- +order: 130 +xref: prevent-all-package-icon-downloads +title: Prevent All Package Icon Downloads +description: Allows control over whether an attempt is made to download icons associated with packages +--- +import Xref from '@components/Xref.astro'; +import RequireChocolateyGuiLicensedExtensionNote from '@components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx'; + +By default, when using the , , or the features, Chocolatey GUI will attempt to download the icon for the package from the URL that is defined within the nuspec file for the package. For the most part, this works without any problems, however, when being used within an air gapped network, with no internet access, the end result looks like this: + +![Showing what happens when Chocolatey GUI runs with no external internet access](/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_1.png "Showing what happens when Chocolatey GUI runs with no external internet access") + +With the PreventAllPackageIconDownloads feature enabled, no attempt will be made to download the icon associated with the package, and instead the default Chocolatey icon will be used for each package. The result being the following: + +![Showing what happens when Chocolatey GUI runs with no external internet access with PreventAllPackageIconDownloads enabled](/images/chocolatey-gui/feature_prevent_all_package_icon_downloads_2.png "Showing what happens when Chocolatey GUI runs with no external internet access with PreventAllPackageIconDownloads enabled") + + + +> :choco-info: **NOTE** +> +> If Chocolatey GUI has been run before enabling this feature, make sure to that may have been cached + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'PreventAllPackageIconDownloads'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'PreventAllPackageIconDownloads'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'PreventAllPackageIconDownloads'" --global + +chocolateyguicli feature disable --name="'PreventAllPackageIconDownloads'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-automated-outdated-packages-check.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-automated-outdated-packages-check.mdx new file mode 100644 index 00000000000..badf38ac2c6 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-automated-outdated-packages-check.mdx @@ -0,0 +1,64 @@ +--- +order: 60 +xref: prevent-automated-outdated-packages-check +title: Prevent Automated Outdated Packages Check +description: Allows control over whether Chocolatey GUI will automatically check for outdated packages installed locally +--- +import Xref from '@components/Xref.astro'; + +By default, when the Chocolatey GUI application starts up it will immediately check to see what packages are outdated, so that this information can be displayed within the application. When this check is happening, you will see the following progress bar being shown: + +![Showing the outdated packages check in action](/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_1.png "Showing the outdated packages check in action") + +Depending on the number of packages that you currently have installed, and the number of sources that you have configured, this check can take a long time. If you are not interested in having this check happen automatically, you can enable the PreventAutomatedOutdatedPackagesCheck feature. + +Once enabled, if you want to manually check the outdated status of packages that you have installed, you can still trigger this check using this button: + +![Showing where the manual check for outdated packages is located](/images/chocolatey-gui/feature_prevent_automated_outdated_packages_check_2.png "Showing where the manual check for outdated packages is located") + +In addition, Chocolatey GUI does cache the information about which packages are outdated. The length of time that this information is cached can be controlled via the option. + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'PreventAutomatedOutdatedPackagesCheck'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'PreventAutomatedOutdatedPackagesCheck'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'PreventAutomatedOutdatedPackagesCheck'" --global + +chocolateyguicli feature disable --name="'PreventAutomatedOutdatedPackagesCheck'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-preload.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-preload.mdx new file mode 100644 index 00000000000..2c4f4a0bd12 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-preload.mdx @@ -0,0 +1,58 @@ +--- +order: 50 +xref: prevent-preload +title: Prevent Preload +description: Allows control over whether packages are immediately fetched when navigating to a remote source view +--- +import Xref from '@components/Xref.astro'; + +By default, when navigating to a remote source (for example the Chocolatey Community Repository), Chocolatey GUI will fetch and display the first page of packages that can be installed. Depending on your use of Chocolatey GUI, you may want to immediately search for packages, rather than install from the first page of packages. If you enable the Prevent Preload feature, than the first pages of packages will not be fetched, and instead, you will be able to immediately search for a package that you want to install. + +When enabled, you will see the following when navigating to a remote source: + +![Prevent Preload is enabled, showing the ability to immediately search for packages](/images/chocolatey-gui/feature_prevent_preload.png "Prevent Preload is enabled, showing the ability to immediately search for packages") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'PreventPreload'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'PreventPreload'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'PreventPreload'" --global + +chocolateyguicli feature disable --name="'PreventPreload'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-usage-of-update-all-button.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-usage-of-update-all-button.mdx new file mode 100644 index 00000000000..5033bba2313 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/prevent-usage-of-update-all-button.mdx @@ -0,0 +1,63 @@ +--- +order: 170 +xref: prevent-usage-of-update-all-button +title: Prevent usage of Update All button +description: Allows control over whether the Update All button should be available or not +--- +import Xref from '@components/Xref.astro'; +import RequireChocolateyGuiLicensedExtensionNote from '@components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx'; +import RestartRequiredWarning from '@components/docs/RestartRequiredWarning.mdx'; + +Chocolatey GUI has always had the ability to run the equivalent of the `choco upgrade all` command, via the . However, there are times when you want to provide finer grain control of what packages are being updated at any given time. As such, this feature allowing removal of the Update All button from the Chocolatey GUI user interface. + +By default, the Update All button will be shown: + +![Show the update all button in the Chocolatey GUI UI](/images/chocolatey-gui/user_interface_main-window_action_update-all_2.png "Show the update all button in the Chocolatey GUI UI") + +however, once this feature is enabled, it will no longer be shown + +![Show the update all button removed in the Chocolatey GUI UI](/images/chocolatey-gui/user_interface_main-window_update-all-removed.png "Show the update all button removed in the Chocolatey GUI UI") + + + + + +## Resources + +Below is a short video which shows this feature in action: + +> :choco-info: **NOTE** +> +> Coming soon + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'PreventUsageOfUpdateAllButton'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'PreventUsageOfUpdateAllButton'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'PreventUsageOfUpdateAllButton'" --global + +chocolateyguicli feature disable --name="'PreventUsageOfUpdateAllButton'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.19.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI v0.19.0. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-additional-package-information.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-additional-package-information.mdx new file mode 100644 index 00000000000..7cfe2ed7acc --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-additional-package-information.mdx @@ -0,0 +1,72 @@ +--- +order: 90 +xref: show-additional-package-information +title: Show Additional Package Information +description: Show additional package information on Local and Remote views +--- +import Xref from '@components/Xref.astro'; + +By default, when using the list view for local and remote sources, a limited set of information is provided. This +information is the minimum amount of information that is required to make informed decisions about interacting with the +packages that are shown. As a result, when using Chocolatey GUI, you will see the following when using the local +source: + +![Show Additional Package Information Disabled 1](/images/chocolatey-gui/feature_show_additional_package_information_disabled_1.png "Show Additional Package Information Disabled 1") + +And the following when using a remote source: + +![Show Additional Package Information Disabled 2](/images/chocolatey-gui/feature_show_additional_package_information_disabled_2.png "Show Additional Package Information Disabled 2") + +By enabling this feature, you allow the addition of extra package information to be displayed. For example, in the +local source view, you will see additional columns for package id and whether or not it is a pre-release package: + +![Show Additional Package Information Enabled 1](/images/chocolatey-gui/feature_show_additional_package_information_enabled_1.png "Show Additional Package Information Enabled 1") + +And in the remote source view, it will be rendered as follows: + +![Show Additional Package Information Enabled 2](/images/chocolatey-gui/feature_show_additional_package_information_enabled_2.png "Show Additional Package Information Enabled 2") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'ShowAdditionalPackageInformation'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'ShowAdditionalPackageInformation'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'ShowAdditionalPackageInformation'" --global + +chocolateyguicli feature disable --name="'ShowAdditionalPackageInformation'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-aggregated-source-view.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-aggregated-source-view.mdx new file mode 100644 index 00000000000..6e8be985d12 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-aggregated-source-view.mdx @@ -0,0 +1,69 @@ +--- +order: 80 +xref: show-aggregated-source-view +title: Show Aggregated Source +description: Show additional source combining all sources in one place +--- +import Xref from '@components/Xref.astro'; + +By default, Chocolatey GUI shows a source view for every feed that is configured for Chocolatey. Clicking on each tab +will show all of the packages for that selected feed. As a result, the normal Chocolatey GUI view looks something like +the following: + +![Show Aggregated Source Disabled](/images/chocolatey-gui/feature_show_aggregated_source_disabled.png "Show Aggregated Source Disabled") + +By enabling this feature, it is possible to add an additional source view, which aggregates all the packages from all +configured sources, into a single view. Once enabled, you will see a new `All Sources` tab available for selection, +similar to the following: + +![Show Aggregated Source Enabled](/images/chocolatey-gui/feature_show_aggregated_source_enabled.png "Show Aggregated Source Enabled") + +> :choco-info: **NOTE** +> +>When first enabling this feature, it will be necessary to close and re-open Chocolatey GUI in order to see the new source view. + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'ShowAggregatedSourceView'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'ShowAggregatedSourceView'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'ShowAggregatedSourceView'" --global + +chocolateyguicli feature disable --name="'ShowAggregatedSourceView'" --global +``` + + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-console-output.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-console-output.mdx new file mode 100644 index 00000000000..5d301178ac7 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/show-console-output.mdx @@ -0,0 +1,65 @@ +--- +order: 10 +xref: show-console-output +title: Show Console Output +description: Shows output from the commands being executed when a job is running +--- +import Xref from '@components/Xref.astro'; + +By default, when Chocolatey GUI begins what is known to be an operation that can take a while, it will show a loading +modal window. When this modal is shown, there is the option to also show the console output for the operation that is +currently being executed. + +This is what you will see when an operation like this happens, and this feature is disabled: + +![Show Console Output Disabled](/images/chocolatey-gui/feature_show_console_output_disabled.png "Show Console Output Disabled") + +When this feature becomes enabled, you will be default be able to see the contents of the console output, without having +to first expand it: + +![Show Console Output Enabled](/images/chocolatey-gui/feature_show_console_output_enabled.png "Show Console Output Enabled") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'ShowConsoleOutput'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'ShowConsoleOutput'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'ShowConsoleOutput'" --global + +chocolateyguicli feature disable --name="'ShowConsoleOutput'" --global +``` + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.15.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-delayed-search.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-delayed-search.mdx new file mode 100644 index 00000000000..1b51434f065 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-delayed-search.mdx @@ -0,0 +1,57 @@ +--- +order: 40 +xref: use-delayed-search +title: Use Delayed Search +description: Enables live search, which returns results after a short delay without clicking the search button on remote sources +--- +import Xref from '@components/Xref.astro'; + +By default, when viewing any remote source in Chocolatey GUI (for example, the Chocolatey Community Repository), in order to start a search it is necessary to press the enter button (or to click the magnifying glass icon) after entering the search string. Some people prefer that the search is executed immediately after typing has completed, without the need to press the enter button. Enabling this feature toggles it so that pressing the entry key is no longer a requirement for the search to be performed. + +![Use Delayed Search Enabled](/images/chocolatey-gui/feature_use_delayed_search_enabled.png "Use Delayed Search Enabled") + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'UseDelayedSearch'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'UseDelayedSearch'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'UseDelayedSearch'" --global + +chocolateyguicli feature disable --name="'UseDelayedSearch'" --global +``` + + +## Default Value + +The default value for this feature is disabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.16.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-keyboard-bindings.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-keyboard-bindings.mdx new file mode 100644 index 00000000000..a8a8a3fe267 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/features/use-keyboard-bindings.mdx @@ -0,0 +1,66 @@ +--- +order: 110 +xref: use-keyboard-bindings +title: Use Keyboard Bindings +description: Allows keyboard bindings to be used to interact with different areas of the Chocolatey GUI User Interface +--- +import Xref from '@components/Xref.astro'; + +By default, Chocolatey GUI ships with some keyboard bindings that make navigating sources easier when using the +keyboard. In the screenshot below, it is possible to navigate to the `chocolatey.licensed` feed using `CTRL + 3` and +then back to the `This PC` feed using `CTRL + 1`. It is also possible to navigate to the `chocolatey` feed using +`CTRL + 2`. + +![Use Keyboard Bindings](/images/chocolatey-gui/feature_use_keyboard_bindings.png "Use Keyboard Bindings") + +Disabling this feature will stop these navigations from being possible using these keyboard shortcuts, but they can +still be navigated to using the mouse in the normal way. + +> :choco-info: **NOTE** +> +>Keyboard bindings are only supported for the first 9 sources. Trying to press `CTRL + 1 + 0` for navigating to a tenth source will not work. + +## Resources + +Below is a short video which shows this feature in action: + +

    +

    + +
    +
    +

    + +## Example + +This feature can be enabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature enable --name="'UseKeyboardBindings'" +``` + +This feature can be disabled, for the currently logged in user, by running the following command: + +```powershell +chocolateyguicli feature disable --name="'UseKeyboardBindings'" +``` + +Or, to enable/disable it globally at the machine level, run the following commands: + +```powershell +chocolateyguicli feature enable --name="'UseKeyboardBindings'" --global + +chocolateyguicli feature disable --name="'UseKeyboardBindings'" --global +``` + +## Default Value + +The default value for this feature is enabled. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/index.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/index.mdx new file mode 100644 index 00000000000..4800d65adf9 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/index.mdx @@ -0,0 +1,9 @@ +--- +order: 50 +xref: gui-configuration +title: Configuration +description: How to configure Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +There are two types of configuration which can be applied to Chocolatey GUI. The first is a setting (config) value, which could be a string, or a number, which the user can set. The other is a feature, which can either be turned on or off. Exposing these configuration options is done through the [config]() and [feature]() commands of the chocolateyguicli executable. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/default-source-name.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/default-source-name.mdx new file mode 100644 index 00000000000..249d42a5c2c --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/default-source-name.mdx @@ -0,0 +1,52 @@ +--- +order: 10 +xref: default-source-name +title: Default Source Name +description: Information on how to use the Default Source Name setting +--- +import Xref from '@components/Xref.astro'; +import RequireChocolateyGuiLicensedExtensionNote from '@components/docs/RequireChocolateyGuiLicensedExtensionNote.mdx'; +import RestartRequiredWarning from '@components/docs/RestartRequiredWarning.mdx'; + +By default, when Chocolatey GUI opens it will show the "This PC" source, showing all of the locally installed packages. Depending on your usage of Chocolatey GUI, it may make more sense to default to showing a different source when the application first loads. By setting this configuration option to the name of a configured source, Chocolatey GUI will show this by default when it first opens. If the value of the DefaultSourceName setting doesn't match the name of a configured source, then the "This PC" source will be shown. + + + + + +## Resources + +Below is a short video which shows this configuration setting in action: + +

    +

    + +
    +
    +

    + +## Example + +To set this configuration parameter, for the currently logged in user, you can run the following: + +```powershell +chocolateyguicli config set --name="'DefaultSourceName'" --value="'chocolatey'" +``` + +Or to set it globally at the machine level, run the following: + +```powershell +chocolateyguicli config set --name="'DefaultSourceName'" --value="'chocolatey'" --global +``` + +## Default Value + +The default value for this setting is an empty string. + +## Availability + +The ability to control this feature from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.18.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.18.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/index.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/index.mdx new file mode 100644 index 00000000000..8e9611e644f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/index.mdx @@ -0,0 +1,8 @@ +--- +order: 10 +xref: gui-configuration-settings +title: Settings +description: The available config options for Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/outdated-packages-cache-duration-in-minutes.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/outdated-packages-cache-duration-in-minutes.mdx new file mode 100644 index 00000000000..920208c783f --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/outdated-packages-cache-duration-in-minutes.mdx @@ -0,0 +1,54 @@ +--- +order: 20 +xref: outdated-packages-cache-duration-in-minutes +title: Outdated Packages Cache Duration in Minutes +description: Information on how to use the Outdated Packages Cache Duration setting +--- +import Xref from '@components/Xref.astro'; + +In an attempt to be as efficient as possible, Chocolatey GUI caches the information about which of the installed +packages are currently outdated. Instead of running the `choco outdated` command every time that information is +requested, the information is instead fetched from the local cache. The length of time that the outdated packages +information is kept can be controlled via this configuration parameter. The default is 60 minutes, which can be +increased as required. + +> :choco-info: **NOTE** +> +> Any time a package operation is completed, i.e. install/uninstall/upgrade, the outdated package information cache will be invalidated. + +## Resources + +Below is a short video which shows this configuration setting in action: + +

    +

    + +
    +
    +

    + +## Example + +To set this configuration parameter, for the currently logged in user, you can run the following: + +```powershell +chocolateyguicli config set --name="'OutdatedPackagesCacheDurationInMinutes'" --value="'120'" +``` + +Or to set it globally at the machine level, run the following: + +```powershell +chocolateyguicli config set --name="'OutdatedPackagesCacheDurationInMinutes'" --value="'120'" --global +``` + +## Default Value + +The default value for this configuration is 60 minutes. + +## Availability + +The ability to control this setting from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.17.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.17.0. diff --git a/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/use-language.mdx b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/use-language.mdx new file mode 100644 index 00000000000..0aa1c6cc8a0 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/configuration/settings/use-language.mdx @@ -0,0 +1,66 @@ +--- +order: 30 +xref: use-language +title: Use Language +description: Information on how to use the Use Language setting +--- +import Xref from '@components/Xref.astro'; + +By default, Chocolatey GUI will use the locale defined on your machine, to translate the various sections of the user +interface. However, there are times when you may want to use a locale other than the one defined on your machine. The +UseLanguage configuration setting allows the user to choose what language (from the list of currently ), +to use. + +> :choco-info: **NOTE** +> +> This configuration setting appears in a slightly different area of the Chocolatey GUI settings screen +> +> ![Showing the choosing of language within settings](/images/chocolatey-gui/user_interface_settings_language.png "Showing the choosing of language within settings") + +## Example + +To set this configuration parameter, for the currently logged in user, you can run the following: + +```powershell +chocolateyguicli config set --name="'UseLanguage'" --value="'de'" +``` + +Or to set it globally at the machine level, run the following: + +```powershell +chocolateyguicli config set --name="'UseLanguage'" --value="'de'" --global +``` + +See the list of currently for the value to use when setting +the language. + +## Available Languages + +Currently, the following languages can be selected: + +- `cs-CZ-` - čeština (Česko) (Czech (Czechia)) +- `de` - Deutsch (German) +- `en` - English (English) +- `en_US` - English (United States) (English (United States)) +- `es` - español (Spanish) +- `fr` - français (French) +- `nl` - Nederlands (Dutch) +- `nb` - norsk bokmål (Norwegian Bokmål) +- `pt` - português (Portuguese) +- `zh_CN` - 中文(中国) (Chinese (Simplified, China)) + +> :choco-info: **NOTE** +> +> Chocolatey GUI only uses languages that have over 60% of the languages strings translated. If your desired language +> isn't in the list above, then feel free to join the . + +## Default Value + +The default value for this configuration is the locale defined on your machine if it exists, falling back to English if there is no translation available. + +## Availability + +The ability to control this setting from the Chocolatey GUI Settings screen has existed since Chocolatey GUI v0.20.0. + +The ability to control this feature from the command line using `chocolateyguicli` has existed since Chocolatey GUI +v0.20.0. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/index.mdx b/src/content/docs/en-us/chocolatey-gui/setup/index.mdx new file mode 100644 index 00000000000..8424a7e2764 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/index.mdx @@ -0,0 +1,8 @@ +--- +order: 20 +xref: gui-setup +title: Setup +description: Information on how to install and setup Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/installation.mdx b/src/content/docs/en-us/chocolatey-gui/setup/installation.mdx new file mode 100644 index 00000000000..ffcb2433962 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/installation.mdx @@ -0,0 +1,72 @@ +--- +order: 10 +xref: gui-installation +title: Installation +description: Instructions on how to install Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The easiest way to install Chocolatey GUI is to use Chocolatey. Use the +following command to install the latest version of Chocolatey GUI: + +```powershell +choco install chocolateygui +``` + +## Upgrading Chocolatey GUI + +If you already have Chocolatey GUI installed, you can upgrade to the latest +version using the following command: + +```powershell +choco upgrade chocolateygui +``` + +## Installing Beta Versions of Chocolatey GUI + +Each time a commit is made into the Chocolatey GUI repository, a build is +performed, and the output is pushed to the Chocolatey GUI MyGet feed. If you +are interested in using the very latest version of Chocolatey GUI, you can use +the following command to install it: + +```powershell +choco upgrade chocolateygui --pre --source="'https://myget.org/f/chocolateygui'" +``` + + ## Package Parameters + +The following package parameters can be passed into the `choco install` or `choco upgrade` command to control how the installed version of Chocolatey GUI is configured. + +- `/Global` - Should the configuration change be applied globally, or for the current user +- `/AllowNonAdminAccessToSettings` - Controls whether or not a non-administrator user can access the Settings Screen. NOTE: This feature will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/DefaultSourceName` - The name of the source which should be shown by default when opening application. NOTE: This configuration setting will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/DefaultToDarkMode` - Enables/disables whether or not Chocolatey GUI defaults to using dark mode for the Chocolatey GUI User Interface - +- `/DefaultToTileViewForLocalSource` - Enables/disables whether or not Chocolatey GUI defaults to tile instead of list view for the local source view - +- `/DefaultToTileViewForRemoteSource` - Enables/disables whether or not Chocolatey GUI defaults to tile instead of list view for all remote source views - +- `/ExcludeInstalledPackages` - Enables/disables whether or not Chocolatey GUI shows packages that are already installed when viewing sources - +- `/HideAllRemoteChocolateySources` - Enable/disables whether or not all remote sources are hidden - essentially enabling a read-only view of installed packages. NOTE: This feature will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/HidePackageDownloadCount` - Allows keyboard bindings to be used to interact with different areas of the Chocolatey GUI User Interface - +- `/HideThisPCSource` - Enable/disables whether or not This PC source is hidden. NOTE: This feature will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/OutdatedPackagesCacheDurationInMinutes` - The length of time, in minutes, which Chocolatey GUI will wait before invalidating the cached result of outdated packages for the machine - +- `/PreventAllPackageIconDownloads` - Enables/disables whether Chocolatey GUI will attempt to download the icons for packages. NOTE: This feature will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/PreventAutomatedOutdatedPackagesCheck` - Prevents automated check for outdated packages on startup - +- `/PreventPreload` - Prevents preloading results with a blank search when opening the remote source view - +- `/PreventUsageOfUpdateAllButton` - Enables/disables whether the Update All button is visible. NOTE: This feature will only work with Chocolatey for Business and the Chocolatey GUI licensed extension installed - +- `/ShowAdditionalPackageInformation` - Show additional package information on Local and Remote views - +- `/ShowAggregatedSourceView` - Enables/disables whether or not Chocolatey GUI shows an additional source combining all sources into one location - +- `/ShowConsoleOutput` - Enables/disables whether or not Chocolatey GUI shows output from the commands being executed when a job is running - +- `/UseDelayedSearch` - Enables/disables whether or not Chocolatey GUI uses a live search, which returns results after a short delay without clicking the search button - +- `/UseKeyboardBindings` - Allows keyboard bindings to be used to interact with different areas of the Chocolatey GUI User Interface - +- `/UseLanguage` - The preferred language for Chocolatey GUI. Defaults to Windows System Locale - + +As an example, the following installation command could be used to enable ShowConsoleOutput to ensure UseDelayedSearch is disabled, and set the output cache to 120 minutes: + +``` +choco install chocolateygui --params="'/ShowConsoleOutput=$true /UseDelayedSearch=$false /OutdatedPackagesCacheDurationInMinutes=120'" +``` + +If you wanted to set these options globally so that all users on the machine got these values, run the following: + +``` +choco install chocolateygui --params="'/ShowConsoleOutput=$true /UseDelayedSearch=$false /OutdatedPackagesCacheDurationInMinutes=120 /Global'" +``` \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/setup/uninstallation.mdx b/src/content/docs/en-us/chocolatey-gui/setup/uninstallation.mdx new file mode 100644 index 00000000000..7aaf7066b8b --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/setup/uninstallation.mdx @@ -0,0 +1,13 @@ +--- +order: 20 +xref: gui-uninstallation +title: Uninstallation +description: Instructions on how to uninstall Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI can be easily uninstalled using the following command: + +```powershell +choco uninstall chocolateygui +``` \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/about/credits.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/about/credits.mdx new file mode 100644 index 00000000000..3e61050819b --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/about/credits.mdx @@ -0,0 +1,12 @@ +--- +order: 20 +xref: gui-credits +title: Credits +description: Information about tools, software, and frameworks that are used to create Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The credits screen provides information about the different tools, frameworks and open source software that is used to +make the Chocolatey GUI application, as well as information on the folks who work on creating it. + +![About Credits Screen](/images/chocolatey-gui/user_interface_about_credits.png "About Credits Screen") diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/about/history.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/about/history.mdx new file mode 100644 index 00000000000..87dc5d4b88c --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/about/history.mdx @@ -0,0 +1,12 @@ +--- +order: 10 +xref: gui-history +title: History +description: Information about the evolution of Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The history screen within Chocolatey GUI gives a brief history of the application, and how it has evolved over the +years. + +![About History Screen](/images/chocolatey-gui/user_interface_about_history.png "About History Screen") diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/about/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/about/index.mdx new file mode 100644 index 00000000000..7aa95babc27 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/about/index.mdx @@ -0,0 +1,10 @@ +--- +order: 30 +xref: gui-about +title: About +description: Find out information about the Chocolatey GUI application +--- +import Xref from '@components/Xref.astro'; + +The About screen is where you can find information about Chocolatey GUI, including the history of the project, information +about what 3rd party libraries are used by Chocolatey GUI, as well as the release notes for the current version. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/about/release-notes.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/about/release-notes.mdx new file mode 100644 index 00000000000..5b5b1d7880d --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/about/release-notes.mdx @@ -0,0 +1,12 @@ +--- +order: 30 +xref: gui-release-notes +title: Release Notes +description: Information about what has changed in the current release of Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The release notes screen provides information about the different bugs, features, improvements, etc. that have been made +in the current version of the Chocolatey GUI application. + +![About Release Notes Screen](/images/chocolatey-gui/user_interface_about_release_notes.png "About Release Notes Screen") diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/index.mdx new file mode 100644 index 00000000000..456b8d9b257 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/index.mdx @@ -0,0 +1,9 @@ +--- +order: 30 +xref: gui-user-interface +title: User Interface +description: How to use the Chocolatey GUI User Interface +--- +import Xref from '@components/Xref.astro'; + +The Chocolatey GUI interface is relatively simple, and this section of the documentation will walk through how to interact with the different sections. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/check-for-outdated.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/check-for-outdated.mdx new file mode 100644 index 00000000000..f7ebf477564 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/check-for-outdated.mdx @@ -0,0 +1,15 @@ +--- +order: 20 +xref: check-for-outdated +title: Check for outdated packages +description: Information on checking for outdated packages +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI, by default, will check for installed packages that are currently outdated (based on available sources) when the application first loads. However, this can be turned of using the feature, or there can be changes to packages outside of Chocolatey GUI. When these situations occur, you can manually invoke the check for outdated packages using the following button: + +![Show where the check for outdated packages button is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_check-for-outdated.png "Show where the check for outdated packages button is located within the User Interface") + +> :choco-info: **NOTE** +> +> This button exists when looking at both local and remote sources \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/darkmode.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/darkmode.mdx new file mode 100644 index 00000000000..ad8942bdf4a --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/darkmode.mdx @@ -0,0 +1,27 @@ +--- +order: 70 +xref: gui-darkmode +title: Toggle Light/Dark Mode +description: Information about changing between light and dark mode +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI provides the ability to toggle between light mode (the default selection) and a dark mode within the application. + +The following screenshot illustrates where the toggle button is located: + +![Show where the light/dark toggle is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_1.png "Show where the light/dark toggle is located within the User Interface") + +This is what the User Interface looks like when light mode is selected: + +![Show what the User Interface looks like when light mode is selected](/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_2.png "Show what the User Interface looks like when light mode view is selected") + +This is what the User Interface looks like when dark mode is selected: + +![Show what the User Interface looks like when dark mode is selected](/images/chocolatey-gui/user_interface_main-window_action_toggle_mode_3.png "Show what the User Interface looks like when dark mode is selected") + +If required, the can be modified to your personal liking. + +> :choco-info: **NOTE** +> +> This button exists when using the entire application \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/export.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/export.mdx new file mode 100644 index 00000000000..e63803e6016 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/export.mdx @@ -0,0 +1,33 @@ +--- +order: 50 +xref: gui-export +title: Export +description: Information about exporting the currently installed packages +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI provides the ability to export all the currently installed packages (including the version number) from the current machine. This information is exported into a *.config file, which can then be used to install all packages again, on another machine. + +For example, lets imagine that you wanted to completely reset your current machine, and re-install the operating system. You could use the export button to exported all the currently installed packages, then store the generated file somewhere safe, re-install the operating system, and then get back to the exact same place as you are now with the list of packages. + +The following screenshot illustrates where the Export button is located: + +![Show where the Export button is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_export_1.png "Show where the Export button is located within the User Interface") + +Once pushed, you will be prompted for the file name that you would like to use, and where you want the file saved: + +![Show the save file dialog that is opened when the Export button is clicked](/images/chocolatey-gui/user_interface_main-window_action_export_2.png "Show the save file dialog that is opened when the Export button is clicked") + +Once it is complete, you will have a file that looks like the following: + +![Show the contents of the file that is generated when the Export operation is completed](/images/chocolatey-gui/user_interface_main-window_action_export_3.png "Show the contents of the file that is generated when the Export operation is completed") + +It would then be possible to take this file onto another machine and then run the following choco command to re-install all the packages again: + +```powershell +choco install +``` + +> :choco-info: **NOTE** +> +> This button only exists when browsing the local source, i.e. `This PC` \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/index.mdx new file mode 100644 index 00000000000..1f5915d27b7 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/index.mdx @@ -0,0 +1,9 @@ +--- +order: 50 +xref: gui-main-window-actions +title: Actions +description: Information about the top level actions that can be performed in Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +There are several top level actions that can be performed from the Chocolatey GUI main window. Lets take a look at each of these, and see what they can do. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/refresh.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/refresh.mdx new file mode 100644 index 00000000000..af7112ed573 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/refresh.mdx @@ -0,0 +1,15 @@ +--- +order: 30 +xref: gui-refresh +title: Refresh +description: Information on refreshing the current packages list +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI, by default, will automatically check for the currently installed packages, and will fetch the first page of results when looking at remote sources, when navigating to a source when the application first loads. However, this functionality can be configured using the feature, or there can be changes to packages outside of Chocolatey GUI. When these situations occur, you can manually refresh the current list of packages using the following button: + +![Show where the refresh packages button is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_refresh-packages.png "Show where the refresh packages button is located within the User Interface") + +> :choco-info: **NOTE** +> +> This button exists when looking at both local and remote sources \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/search.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/search.mdx new file mode 100644 index 00000000000..78f68c34934 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/search.mdx @@ -0,0 +1,53 @@ +--- +order: 10 +xref: gui-search +title: Search +description: Information on how to search for Chocolatey packages +--- +import Xref from '@components/Xref.astro'; + +There are two search boxes within the Chocolatey GUI interface. The first is when looking at local packages (within the `This PC` section): + +![Show search box for local packages](/images/chocolatey-gui/user_interface_main-window_action_search_1.png "Show search box for remote packages") + +and the second is within any remote source view (for example the Chocolatey Community Repository): + +![Show search box for remote packages](/images/chocolatey-gui/user_interface_main-window_action_search_2.png "Show search box for remote packages") + +Essentially, these search boxes perform the same operation, but there are slight differences with how they operate. + +## Local Packages Search + +When searching for a package that is installed locally on your machine, all that is required is to type the search string into the box, and the results will be shown immediately. + +## Remote Packages Search + +By default, in order to start a search, it is necessary to first enter the search string and then either click the magnifying glass icon, or to press the enter key on your keyboard. + +![Show magnifying glass for initiating search](/images/chocolatey-gui/user_interface_main-window_action_search_3.png "Show magnifying glass for initiating search") + +If you want to begin the search immediately after you finish typing, you can activate the feature. + +## Additional package filtering + +In addition to the search string that you can provide when searching for a package, there are additional filters that you can apply to the search results. These differ between searching for local packages compared to remote packages. + +### Filtering local packages search + +When searching for local packages, it is possible to use the following additional filtering terms: + +- Match Word Exactly +- Show Only Packages with Updates + +![Show additional filtering options for local packages](/images/chocolatey-gui/user_interface_main-window_action_search_4.png "Show additional filtering options for local packages") + +### Filtering remote packages search + +When searching for remote packages, it is possible to use the following additional filtering terms: + +- All Versions +- Include Prerelease +- Match Word Exactly +- Popularity + +![Show additional filtering options for remote packages](/images/chocolatey-gui/user_interface_main-window_action_search_5.png "Show additional filtering options for remote packages") \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/tileview.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/tileview.mdx new file mode 100644 index 00000000000..cfeb61f1091 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/tileview.mdx @@ -0,0 +1,27 @@ +--- +order: 60 +xref: gui-tileview +title: Switch Tile/List View +description: Information about changing how packages are displayed +--- +import Xref from '@components/Xref.astro'; + +Chocolatey GUI provides the ability to toggle between tile view (the default selection) and a list view for both local and remote sources within the application. + +The following screenshot illustrates where the buttons to toggle between one view and the other are located: + +![Show where the tile/list view toggle is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_switch_display_1.png "Show where the tile/list view toggle is located within the User Interface") + +This is what the User Interface looks like when the tile view is selected: + +![Show what the User Interface looks like when tile view is selected](/images/chocolatey-gui/user_interface_main-window_action_switch_display_2.png "Show what the User Interface looks like when tile view is selected") + +This is what the User Interface looks like when the list view is selected: + +![Show what the User Interface looks like when list view is selected](/images/chocolatey-gui/user_interface_main-window_action_switch_display_3.png "Show what the User Interface looks like when list view is selected") + +If required, the and the can be modified to your personal liking. + +> :choco-info: **NOTE** +> +> This button exists when looking at both local and remote sources \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/update-all.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/update-all.mdx new file mode 100644 index 00000000000..ff49ad682ac --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/actions/update-all.mdx @@ -0,0 +1,23 @@ +--- +order: 40 +xref: gui-update-all +title: Update All +description: Information about updating all Chocolatey Packages +--- +import Xref from '@components/Xref.astro'; + +By default, when Chocolatey GUI first opens it will check for all currently outdated packages based on the currently configured sources (this can be configured via the feature). Once identified as outdated, you have the option of right clicking on an individual package to update it, or you can go into the details page for the package and click the update button that is located there. However, if you want to update all outdated packages at the same time, you can use the update all button: + +![Show where the update all button is located within the User Interface](/images/chocolatey-gui/user_interface_main-window_action_update-all_1.png "Show where the update all button is located within the User Interface") + +When there are no packages that are currently outdated, the button will be disabled and will show a message in the tooltip that this operation cannot currently be performed: + +![Show the update all button being disabled as no action can be taken](/images/chocolatey-gui/user_interface_main-window_action_update-all_2.png "Show the update all button being disabled as no action can be taken") + +> :choco-info: **NOTE** +> +> This button only exists when browsing the local source, i.e. `This PC` + +> :choco-info: **NOTE** +> +> If required, it is possible to remove the Update All button via the feature. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/index.mdx new file mode 100644 index 00000000000..17532e74640 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/index.mdx @@ -0,0 +1,19 @@ +--- +order: 10 +xref: gui-main-window +title: Main Window +description: The primary interface that is used within Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The primary user interface for Chocolatey GUI is split into a number of sections. + +![The primary user interface for Chocolatey GUI](/images/chocolatey-gui/user_interface_main-window_sections.png "The primary user interface for Chocolatey GUI") + +1. The top navigation menu, which allows you to navigate to the and +pages, and in addition to toggle whether or not to use the . +1. The main action bar, which allows you to , , , , , and to toggle between . +1. The `This PC` to the tab +1. One or more , based on current Chocolatey +1. Displays the current version number of Chocolatey GUI +1. Shows the current package list, based on the selected source (either local, or a remote one). Double clicking on a package, right clicking and selecting `Details` in the context menu, will take you to the . \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/local-source.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/local-source.mdx new file mode 100644 index 00000000000..4cb29137a5d --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/local-source.mdx @@ -0,0 +1,23 @@ +--- +order: 20 +xref: gui-local-source +title: Local Source +description: Information about displaying of locally installed packages +--- +import Xref from '@components/Xref.astro'; + +The "This PC" source, also known as a local source, is the first source that is shown by default when Chocolatey GUI first +opens, and it shows all the currently installed Chocolatey packages. It is the visual equivalent of running the `choco +list` command in Chocolatey CLI v2, and `choco list -lo` in Chocolatey CLI v1, and paging the results that are displayed. + +![The This PC Source showing currently installed Chocolatey packages](/images/chocolatey-gui/feature_hide_this_pc_source_disabled.png "The This PC Source showing currently installed Chocolatey packages") + +It is possible to show this view in both tile and list format, and this can be controlled through the , or +by setting the feature to the required setting. + +In addition, you may want to use the feature, to prevent Chocolatey GUI calculating what packages are outdated each time Chocolatey GUI opens. It is possible to directly trigger this check using the action. + +From the local source view, either by navigating to the , or by activating the context menu for the +required package, it is possible to perform one of the for a package. + +The local source view can be turned off using the feature. **NOTE:** This is a commercial feature that requires the use of the . \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/index.mdx new file mode 100644 index 00000000000..8a68b45a6a8 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/index.mdx @@ -0,0 +1,10 @@ +--- +order: 40 +xref: gui-package-details-actions +title: Actions +description: Information about top level actions that can be completed from Package Details screen +--- +import Xref from '@components/Xref.astro'; + +Depending on the current state of the selected package, i.e. is it installed, outdated, etc, different actions can be +performed on the package. This sections aims to explain the different actions that can be taken. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install-advanced.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install-advanced.mdx new file mode 100644 index 00000000000..d12f0c318e4 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install-advanced.mdx @@ -0,0 +1,28 @@ +--- +order: 20 +xref: gui-package-details-actions-install-advanced +title: Install Advanced +description: Information on how to use the Install Advanced action +--- +import Xref from '@components/Xref.astro'; + +During normal execution, Chocolatey GUI performs a standard installation of a package, specifying only the package version +and the Source to install from. For most installations, this is all that is required. + +There are times though when additional parameters need to be set for a package. + +For example, a package may have one or more package parameters, to allow for controlling whether desktop shortcuts are +created, or what entries should appear on the Windows path. In order to set these values so that they are passed when +installing the package, you have to make use of the Install Advanced window: + +![Modal window showing the ability to set install arguments when installing a package](/images/chocolatey-gui/user_interface_main-window_package-details_install-advanced.png "Modal window showing the ability to set install arguments when installing a package") + +All of the command line options (with the exception of the additional log file) that you can specify when running +choco.exe directly, can be set within this window. + +The settings are grouped into sections: + +- Install Options +- Advanced Options +- Dependency Options +- Checksum Option \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install.mdx new file mode 100644 index 00000000000..65380997815 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/install.mdx @@ -0,0 +1,12 @@ +--- +order: 30 +xref: gui-package-details-actions-install +title: Install +description: Information on how to use the Install action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/pin.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/pin.mdx new file mode 100644 index 00000000000..62278a9fc38 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/pin.mdx @@ -0,0 +1,12 @@ +--- +order: 40 +xref: gui-package-details-actions-pin +title: Pin +description: Information on how to use the Pin action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/reinstall.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/reinstall.mdx new file mode 100644 index 00000000000..bab75ff6086 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/reinstall.mdx @@ -0,0 +1,12 @@ +--- +order: 60 +xref: gui-package-details-actions-reinstall +title: Reinstall +description: Information on how to use the Reinstall action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/uninstall.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/uninstall.mdx new file mode 100644 index 00000000000..d775688761b --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/uninstall.mdx @@ -0,0 +1,12 @@ +--- +order: 70 +xref: gui-package-details-actions-uninstall +title: Uninstall +description: Information on how to use the Uninstall action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/unpin.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/unpin.mdx new file mode 100644 index 00000000000..8b2fdb8dcdf --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/unpin.mdx @@ -0,0 +1,12 @@ +--- +order: 50 +xref: gui-package-details-actions-unpin +title: Unpin +description: Information on how to use the Unpin action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/update.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/update.mdx new file mode 100644 index 00000000000..f09bc520c86 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/update.mdx @@ -0,0 +1,12 @@ +--- +order: 80 +xref: gui-package-details-actions-update +title: Update +description: Information on how to use the Update action +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/view-package-arguments.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/view-package-arguments.mdx new file mode 100644 index 00000000000..925f945fc4c --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/actions/view-package-arguments.mdx @@ -0,0 +1,25 @@ +--- +order: 10 +xref: gui-package-details-actions-view-package-arguments +title: View Package Arguments +description: Information on how to use the View Package Arguments action +--- +import Xref from '@components/Xref.astro'; + +Each time a package is installed, either via Chocolatey or Chocolatey GUI, the arguments that were passed into the +command are recorded, so that they can be re-used when performing an upgrade of the package. + +> :choco-warning: **WARNING** +> +> The useRememberedArgumentsForUpgrades feature of Chocolatey needs to be enabled for this ability to be used. + +It can be useful to view the remembered arguments that Chocolatey has stored for a given package version. + +Clicking the `View Package Arguments` button while on the package details page for a package will show a modal window +populated with the arguments. For example: + +![Modal window showing the remembered package arguments for the current package version](/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments.png "Modal window showing the remembered package arguments for the current package version") + +If there are no remembered arguments for the current package version, this will also be shown: + +![Modal window showing there were no remembered package arguments for the current package version](/images/chocolatey-gui/user_interface_main-window_package-details_view-package-arguments_empty.png "Modal window showing there were no remembered package arguments for the current package version") \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/index.mdx new file mode 100644 index 00000000000..97bfb8773bb --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/package-details/index.mdx @@ -0,0 +1,26 @@ +--- +order: 40 +xref: gui-package-details +title: Package Details +description: Information about displaying detailed information about a specific package +--- +import Xref from '@components/Xref.astro'; + +After either double clicking on a package, or choosing details from the context menu, from the , +the details for the selected package will be shown. This includes information such as: + +- Package Id +- Version +- Last update +- External links provided by the package maintainer +- Description +- Release notes +- Software Authors +- Package Maintainers (If available) +- Downloads for the version, and total downloads +- Size of the package +- Package Dependencies + +In addition, depending on the current state of the package, different can be performed on the package. + +![The package details user interface for Chocolatey GUI](/images/chocolatey-gui/user_interface_main-window_package-details.png "The package details user interface for Chocolatey GUI") \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/remote-source.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/remote-source.mdx new file mode 100644 index 00000000000..72b749db815 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/main-window/remote-source.mdx @@ -0,0 +1,27 @@ +--- +order: 30 +xref: gui-remote-source +title: Remote Source +description: Information about displaying available packages from remote sources +--- +import Xref from '@components/Xref.astro'; + +Any that is configured will show as a remote source in the Chocolatey GUI . When selected, either directly through the user interface, or via a , the available packages from that source will be fetched, and shown. + +It is the visual equivalent of running the `choco list --source https://community.chocolatey.org` command, and paging the results that are displayed. + +There are various features that can be used to configure how remote sources work, including: + +- +- +- + +![Remote Source showing packages from the Chocolatey Community Repository](/images/chocolatey-gui/feature_default_tile_view_remote_enabled.png "Remote Source showing packages from the Chocolatey Community Repository") + +It is possible to show this view in both tile and list format, and this can be controlled through the , or +by setting the feature to the required setting. + +From any remote source view, either by navigating to the , or by activating the context menu for the +required package, it is possible to perform one of the for a package. + +All remote sources can be turned off using the feature. **NOTE:** This is a commercial feature that requires the use of the . \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/index.mdx new file mode 100644 index 00000000000..eb7159803a5 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/index.mdx @@ -0,0 +1,9 @@ +--- +order: 40 +xref: gui-settings-actions +title: Actions +description: Information about top level actions that can be completed from Settings screen +--- +import Xref from '@components/Xref.astro'; + +Within the Chocolatey GUI Settings screen, there are some top level actions that can be completed for the application. These icon purging the different caches that are used. In addition to being able to trigger these from within Chocolatey GUI, it is also possible to use the chocolateyguicli command to accomplish the same thing. Information on this command can be found . \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-icons.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-icons.mdx new file mode 100644 index 00000000000..006b44e317d --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-icons.mdx @@ -0,0 +1,17 @@ +--- +order: 20 +xref: gui-purge-icons +title: Purge Icons +description: Information about purging icons +--- +import Xref from '@components/Xref.astro'; + +To prevent downloading the same application icon multiple times, Chocolatey GUI caches the icon that is found for each +package, both those that are installed locally, as well as those from remote sources. These are stored locally on disk +and will remain cached indefinitely. If/when required, you can click the `Purge Icons` button to completely clear the +icon cache, and it will begin to be built up again. + +![Settings Actions Purge Icons](/images/chocolatey-gui/user_interface_settings_actions_purge_icons.png "Settings Actions Purge Icons") + +In addition to purging the cache from within the Chocolatey GUI application, it is also possible to do this using the +`chocolateyguicli` executable. More information on doing this can be found . diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-outdated-packages.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-outdated-packages.mdx new file mode 100644 index 00000000000..34bbad022b6 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/actions/purge-outdated-packages.mdx @@ -0,0 +1,19 @@ +--- +order: 10 +xref: gui-purge-outdated-packages +title: Purge Outdated Packages +description: Information about purging outdated packages +--- +import Xref from '@components/Xref.astro'; + +In order to prevent requesting the same information again and again from Chocolatey, Chocolatey GUI caches information +about the outdated packages which are currently installed on the machine. It uses this information to display an +outdated banner on the package within the Chocolatey GUI application. By default, this cache is kept for 60 minutes, +and you can change this configuration value if required. If, for whatever reason, you need to purge this cache, you +can do so using the `Purge Outdated Packages` button. When a Chocolatey operation such as `install`, `upgrade`, or +`uninstall` is performed, the Outdated Packages cache will be invalidated. + +![Settings Actions Purge Outdated Packages](/images/chocolatey-gui/user_interface_settings_actions_purge_outdated_packages.png "Settings Actions Purge Outdated Packages") + +In addition to purging the cache from within the Chocolatey GUI application, it is also possible to do this using the +`chocolateyguicli` executable. More information on doing this can be found . diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey-gui.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey-gui.mdx new file mode 100644 index 00000000000..9dc11c58c09 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey-gui.mdx @@ -0,0 +1,29 @@ +--- +order: 10 +xref: settings-gui +title: Chocolatey GUI +description: Settings for Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; +import AvailableFeatures from '@components/docs/AvailableFeatures.mdx'; +import AvailableSettings from '@components/docs/AvailableSettings.mdx'; + +The Chocolatey GUI Settings screen allows the user to toggle on and off the various features that the application +supports, as well as to set values for the specific configuration values that exist within the application. Normally, +once changed, the feature or configuration value changes takes immediate effect, but it may require an application +restart to take effect. + +There are search boxes that allow you to type the name of a feature, or a setting, and the list will be filtered down +to only match entries with the search phrase in either the display name or the configuration name. + +![Settings Chocolatey GUI](/images/chocolatey-gui/user_interface_settings_chocolatey_gui.png "Settings Chocolatey GUI") + +For more information about the individual features and settings, see the corresponding section below: + +## Features + + + +## Settings + + diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey.mdx new file mode 100644 index 00000000000..4313d23df16 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/chocolatey.mdx @@ -0,0 +1,19 @@ +--- +order: 20 +xref: settings-chocolatey +title: Chocolatey +description: Settings for Chocolatey +--- +import Xref from '@components/Xref.astro'; + +The Chocolatey Settings screen allow the user to toggle on and off the various features that Chocolatey supports, as +well as to set values for the specific configuration values that exist for Chocolatey. + +There are search boxes that allow you to type the name of a feature, or a setting, and the list will be filtered down +to only match entries with the search phrase in either the display name or the configuration name. + +![Settings Chocolatey](/images/chocolatey-gui/user_interface_settings_chocolatey.png "Settings Chocolatey") + +Changing the values in this screen is the same as directly calling the `choco feature` or `choco config` commands. For +more information about exactly what these settings are, and what they can be used for, see the +[Chocolatey documentation](https://chocolatey.org/docs/chocolatey-configuration). diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/index.mdx new file mode 100644 index 00000000000..09cf5d2d7ce --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/index.mdx @@ -0,0 +1,10 @@ +--- +order: 20 +xref: gui-settings +title: Settings +description: Modify the settings for Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +The Settings screen is where you can view and modify the different configuration options for both Chocolatey GUI as well +as Chocolatey. \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/add.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/add.mdx new file mode 100644 index 00000000000..89587c08d2a --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/add.mdx @@ -0,0 +1,37 @@ +--- +order: 10 +xref: gui-add-source +title: Add Source +description: Information on how to add a source using Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +To add a new source through Chocolatey GUI simply click the `NEW` button. This will clear out all the fields: + +- Id +- Source +- Username +- Certificate +- Priority +- Is Disabled +- Is Self Service +- Is Proxy Bypassed +- Visible to Admins Only + +ready to be populated for the new source. + +![Showing the user interface when adding a new source](/images/chocolatey-gui/user_interface_settings_sources_add.png "Showing the user interface when adding a new source") + +Fill in all these details, and once completed, click the `SAVE` button. The new source will then appear in the Sources section at the top of the screen. + +## Resources + +Below is a short video which shows how to add a source: + +

    +

    + +
    +
    +

    diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/delete.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/delete.mdx new file mode 100644 index 00000000000..82b0610a25d --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/delete.mdx @@ -0,0 +1,25 @@ +--- +order: 30 +xref: gui-delete-source +title: Delete Source +description: Information on how to delete a source using Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +To remove a source select it in the `Sources` section at the top of the screen and then click the `REMOVE` button. + +![Showing the user interface when removing a source](/images/chocolatey-gui/user_interface_settings_sources_remove.png "Showing the user interface when removing a source") + +The source will be removed and the `Sources` section will be updated with the remaining sources. + +## Resources + +Below is a short video which shows how to delete a source: + +

    +

    + +
    +
    +

    diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/edit.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/edit.mdx new file mode 100644 index 00000000000..fc0b8789b44 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/edit.mdx @@ -0,0 +1,41 @@ +--- +order: 20 +xref: gui-edit-source +title: Edit Source +description: Information on how to edit a source using Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +To edit an existing source through Chocolatey GUI simply click on the source in the `Sources` section. The details of this source will then be populated in the lower half of the screen, and all of these fields can then be edited: + +- Id +- Source +- Username +- Certificate +- Priority +- Is Disabled +- Is Self Service +- Is Proxy Bypassed +- Visible to Admins Only + +![Showing the user interface when editing an existing source](/images/chocolatey-gui/user_interface_settings_sources_edit_1.png "Showing the user interface when editing an existing source") + +Update all these details, and once completed, click the `SAVE` button. The updated source will then refresh in the Sources section at the top of the screen. + +> :choco-info: **NOTE** +> +> If attempting to edit the built-in `chocolatey.licensed` source, only certain fields are allowed to be modified, and this will be reflected within the user interface +> +> ![Showing the user interface when attempting to edit chocolatey.licensed source](/images/chocolatey-gui/user_interface_settings_sources_edit_2.png "Showing the user interface when attempting to edit chocolatey.licensed source") + +## Resources + +Below is a short video which shows how to edit a source: + +

    +

    + +
    +
    +

    diff --git a/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/index.mdx b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/index.mdx new file mode 100644 index 00000000000..5552fd8230e --- /dev/null +++ b/src/content/docs/en-us/chocolatey-gui/user-interface/settings/sources/index.mdx @@ -0,0 +1,11 @@ +--- +order: 30 +xref: gui-sources +title: Sources +description: Configure the sources used by Chocolatey GUI +--- +import Xref from '@components/Xref.astro'; + +Within the Sources section of Settings screen, it is possible to view, add, edit and delete the different sources that are used by both Chocolatey GUI and Chocolatey. + +![Showing the Sources screen within settings](/images/chocolatey-gui/user_interface_settings_sources.png "Showing the Sources screen within settings") \ No newline at end of file diff --git a/src/content/docs/en-us/chocolatey-install-ps1.mdx b/src/content/docs/en-us/chocolatey-install-ps1.mdx new file mode 100644 index 00000000000..51baf47caae --- /dev/null +++ b/src/content/docs/en-us/chocolatey-install-ps1.mdx @@ -0,0 +1,38 @@ +--- +order: 71 +xref: chocolatey-install-ps1 +title: ChocolateyInstall PowerShell Script +description: Information about the chocolateyinstall.ps1 file which is used to by Chocolatey to install the package contents +showInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +Chocolatey uses PowerShell as a package install provider and will look for this file in the package. If it finds it, it will execute the contents of the file, attaching the helper modules. Check out the for more information on each of the helpers you can include. + +It really is just PowerShell, so you can use regular PowerShell here and it should run fine. + +> :choco-info: **NOTE** +> +> Please maintain compatibility with Posh v2. Not every OS we support is on Posh v2 (nor comes OOB with Posh v3+). It's best to work with the widest compatibility of systems out there. + +## When is the script triggered? + +If present in a package, the `ChocolateyInstall.ps1` script will be triggered at the following points: + +* When a package is installed for the first time, after the package contents have been extracted. +* In an scenario, the install script for the new package will be run after any `chocolateyBeforeModify.ps1` script associated with the previous version of the package. + +### Example? + +This is what it takes to install [StExBar](https://community.chocolatey.org/packages/stexbar): + +```powershell +$name = 'StExBar' +$url = 'http://stexbar.googlecode.com/files/StExBar-1.8.3.msi' +$url64 = 'http://stexbar.googlecode.com/files/StExBar64-1.8.3.msi' +$silent = '/quiet' + +Install-ChocolateyPackage $name 'msi' $silent $url $url64 +``` + +The Install-ChocolateyPackage helper uses the url, msi, and silent args to download and silently install and update StExBar. diff --git a/src/content/docs/en-us/chocolatey-story.mdx b/src/content/docs/en-us/chocolatey-story.mdx new file mode 100644 index 00000000000..ef6064be4ab --- /dev/null +++ b/src/content/docs/en-us/chocolatey-story.mdx @@ -0,0 +1,22 @@ +--- +order: 72 +xref: chocolatey-story +title: Story of Bob and Richard +description: Background information about where the idea for Chocolatey came from +showInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +Let’s start with a story. Two guys, Bob and Richard (whose names have been changed to protect the innocent) need to get their computers ready to do some development work with [Git](https://git-scm.com/). Neither Bob or Richard have worked with Git before. This is a story about the process they each go through to get Git. + +Richard goes off to research. After a while he learns the tool he wants to install for Windows is Git for Windows. He searches, downloads the latest version and goes to install it. He realizes he downloaded the wrong architecture and starts over. He may not have his settings set up properly. So then he spends time trying to figure out what his settings should be. After a process of maybe a whole morning, he finally has Git installed and hopes he is set up properly. And Richard only knows about Git and not any other tools that may have helped him with using Git. + +Bob has recently installed this tool called Chocolatey. He heads out to the community repository at [community.chocolatey.org](https://community.chocolatey.org/packages) and searches for Git. He learns that there are several cool tools for working with Git on Windows. He decides that he wants to use Git Extensions for helping him visualize some of the Git work. He opens a command line, types `choco install gitextensions` and hits Enter. Git Extensions has a dependency on Git for Windows, so Chocolatey downloads and installs it silently on his machine. It configures Git for proper Windows usage. Then Chocolatey downloads and silently installs Git Extensions on his machine. In less than ten minutes Bob is ready to go and has some of the best tools for working with Git available to him. + +Did Bob get lucky? No. It’s just that Bob didn’t have to really make that many decisions. He decided he wanted a tool. Then Chocolatey did all of the work, made all of the decisions, got the dependent applications, and even configured his machine properly. He has little left to do to finish setting up the machine for access to [GitHub](https://github.com). + +The moral of the story? Richard took 3-4 hours to get somewhat up to speed. Bob came fully up to speed in less than ten minutes. Don’t be a Richard. + +References + +* [https://lostechies.com/jimmybogard/2012/02/01/improving-the-git-windows-experience-downloads/](https://lostechies.com/jimmybogard/2012/02/01/improving-the-git-windows-experience-downloads/) diff --git a/src/content/docs/en-us/chocolatey-vs-ninite.mdx b/src/content/docs/en-us/chocolatey-vs-ninite.mdx new file mode 100644 index 00000000000..e13bacc3b16 --- /dev/null +++ b/src/content/docs/en-us/chocolatey-vs-ninite.mdx @@ -0,0 +1,123 @@ +--- +order: 73 +xref: chocolatey-vs-ninite +title: Chocolatey vs Ninite +description: A comparison between Chocolatey and Ninite +showInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +A lot of folks out there are always wanting to point out that there is Ninite when someone mentions Chocolatey. That is fine, Ninite works but it only has like 90+ things you can install. They are limited by what Ninite can rebundle and redistribute. Both are solid solutions in their own right, but you need to understand the needs and what the two solutions provide to really make a choice on them. + +## Package Management Approach + +### Ninite + +- Main purpose: Ninite is an installer that keeps off the crapware. +- Keeps everything centralized. +- Has a tight integration with products as the Ninite staff is the only one who updates packages. +- Guarantees success with installs since they control every aspect of the packages. +- Does not take contributions. +- All GUI based unless you pay for Pro version. +- Update apps simply by running the installer again. +- Only use case is for folks who have access to install applications on their machines. +- Only works with software installers. +- Closed source, but free. +- Paid options for CLI. + +### Chocolatey + +- Main purpose: Chocolatey is a global PowerShell execution engine that knows about a packaging format. +- Decentralized with a central community package repository. +- Multiple sources including private sources. +- Packages on [https://community.chocolatey.org/packages](https://community.chocolatey.org/packages) (the Chocolatey Community Package Repository) are created by the community and reviewed by moderators. +- Packages can embed software, use UNC paths or download software from another location (like the official distribution locations). +- Allows for community contributions. +- Allows for pay for apps to be included as packages. +- CLI focused, although there is a GUI (ChocolateyGUI). +- Easily scriptable which allows for adding setup scripts to things like source control. +- Update apps simply by running `cup packagename` or `choco upgrade all`. +- Integration with other package managers (Ruby Gems, Python PIP, WebPI, Windows Features, CygWin, etc). +- Able to be used without needing administrative permissions (portable packages are non-admin). +- Flexible, packages can work with native installers, set configuration, registry, do other tasks or any combination. +- Open source and free. +- Paid options [available](https://chocolatey.org/compare). + +#### Packaging solution needs (that brought about Chocolatey in the first place) + +- Good CLI that is simple to use +- A central repository that takes packages contributions from the community (and is being maintained) +- Ability to use additional/multiple sources +- Meta packages that can chain dependencies +- Virtual packages +- Packages should be easy to create / maintain +- Packages should be concise and be able to be created without worrying about distribution rights +- Unattended installs +- Installation of multiple packages with one command +- Script setup of environments +- A tool that enforces more security automatically + +## Chocolatey and Ninite : Compare and Contrast + +### Interfaces: + +- Ninite - choose apps from a website, download installer just for those apps. Pay for the pro version and use the command line. +- Chocolatey - open a command line. Install app with `choco install packagename `. Lather rinse repeat. + +### Packages: + +- Ninite - closed, only items available are what Ninite staff choose to make available. +- Chocolatey - community packages on a central server +- Chocolatey (internal use) - create packages on your own internal repository server + +### Package sources: + +- Ninite - one at Ninite.com +- Chocolatey - central community package repository at for options. +- Chocolatey can also install from - choco install bash --source cygwin | choco install gemcutter --source ruby | choco install sphynx --source python | choco install IISExpress --source webpi + +### Creating packages: + +- Ninite - no +- Chocolatey - yes and quite simple. Run `choco new test` and look at the output - keep in mind that many times it takes complex tasks for managing software installation down to 1 PowerShell function call. Consider windirstat is: `Install-ChocolateyPackage 'windirstat' 'exe' '/S' 'https://windirstat.info/wds_current_setup.exe' -Checksum 123456 -ChecksumType 'sha256'` +- Chocolatey is building on technologies you may already know: + - PowerShell - take full advantage of PowerShell. + - Unattended installations / Silent installation +- Extend Chocolatey easily with PowerShell modules called . +- Use to point Chocolatey to an installer and have it auto-detect and generate a full software deployment. +- Use to internalize existing community packages quickly. + +### Available packages: + +- Ninite - Handled by Ninite staff, so there's less chance of anything being broken. +- Chocolatey (community repository) - Handled by the community, reviewed by moderators. Possibility of breakages unless using . +- Chocolatey (internal repositories) - Handled by you, embedding software or using internal links you control. Zero chance of breakages that you don't control. + +### Package updates: + +- Ninite and Chocolatey community repository both can suffer from keeping packages up to date. +- Chocolatey (internal use) - good to go + +### Package dependencies: + +- Ninite - not really +- Chocolatey - Yes, dependencies are easy! Install Git Extensions, it makes sure Git is also installed. + +### Versioning/upgrades: + +- Ninite - sort of, you just rerun the installer every once in awhile +- Chocolatey - Yes. Consider `choco upgrade ` to upgrade a piece of software. Also consider `choco upgrade all`/`cup all` as a Windows Update for all of your 3rd party software. + +## Conclusion + +Chocolatey internal use is the best solution for an organization that has a low tolerance for breakages. There are no issues, you have a secure solution with complete control. You are building on top of technologies you know with a small amount of learning for packaging. Because it is PowerShell, you are not limited to just installers, and you can add additional logic before and after installations, and you are not limited to just "installing" software with packaging. + +Ninite is a solid solution if you don't mind not being able to script it and only install the applications that it has listed on the Ninite page. You are, however, possibly guaranteed that you have everything you need to install sheerly by having the Ninite Installer. In that way it may be better than using Chocolatey's community repository, which most packages require access to the internet to download installers that do not have distribution rights with them (Ninite may not incur this extra point of failure, but is quite limited in its offerings). Chocolatey community repository with of those downloads. + +Chocolatey community repository has over 4,000 more packages than Ninite and a community that is driving to continually make it better. If you need to get to older versions of packages, many of the packages on the community repository allow for this. What Chocolatey community repository may lack in the possible guarantee that Ninite provides, it makes up for in features and options. Chocolatey can provide packages for non-free products, have multiple sources and folks can script the installations. Chocolatey is more than just an installer and with that does not require administrative privileges to use. + +Both Ninite and Chocolatey community repository solutions suffer from the issue of having the most up-to-date packages available, it's just that Chocolatey is more transparent about it. + +When it comes to internal use and creating and hosting your own (or internalizing existing) packages, nothing else holds a candle to Chocolatey. When you step up to [Chocolatey for Business](https://chocolatey.org/compare), you get access to features that allow an organization to really excel quickly. + +Whether you use Chocolatey or Ninite, consider that the two answer the same question differently and that is okay. They can live in harmony with each other and at some point Chocolatey may offer Ninite as package source. diff --git a/src/content/docs/en-us/community-repository/api.mdx b/src/content/docs/en-us/community-repository/api.mdx new file mode 100644 index 00000000000..20ba3ca93d3 --- /dev/null +++ b/src/content/docs/en-us/community-repository/api.mdx @@ -0,0 +1,117 @@ +--- +order: 20 +xref: ccr-api +title: API Querying +description: Information about querying the Chocolatey Community Repository API. +--- +import Xref from '@components/Xref.astro'; + +The Chocolatey Community Repository provides an API to allow package queries to be made, and results to be provided. +We hope to be able to answer your questions on what is supported and what is not supported, and on the acceptable ways that you can query the repository. + +## API Protocol + +> :choco-info: **NOTE** +> +> Chocolatey CLI and `chocolatey.lib` versions 1.x and earlier, used NuGet v2 OData Core libraries. + +The Chocolatey Community Repository uses the v2 OData protocol for queries, utilizing the NuGet v2 OData specification, where it is defined. Unfortunately, NuGet v2 OData specification is only loosely defined so one OData endpoint _may_ respond with different results to another, if it responds at all. + +Chocolatey CLI and `chocolatey.lib` use the NuGet v2 OData Client libraries to query, and process requests from, the Chocolatey Community Repository. + +## Supported API Query Tools + +We only support the following tools to query the Chocolatey Community Repository API: + +* +* [`chocolatey.lib`](https://www.nuget.org/packages/chocolatey.lib) + +While you may create your own queries, and get results, this is not supported and may break in the future. Your own queries working today, are not guaranteed to work in the future. To guard against this happening, only use the supported methods above, to query the Chocolatey Community Repository. + +### Chocolatey CLI Machine Readable Output + +To get machine-readable output when querying the Chocolatey Community Repository using Chocolatey CLI, use the `--limit-output` command line option. See our documentation for more information on . + +For example, to search for all packages containing the word `kitty`: + +```powershell +PS> choco search kitty +Chocolatey v2.2.2 +kitty 0.76.1.13 [Approved] +kitty.portable 0.67.0 [Approved] +superputty 1.5.0 [Approved] +superputty.install 1.5.0 [Approved] +superputty.portable 1.5.0 [Approved] +5 packages found. +``` + +For the same query, but with machine-readable output: + +```powershell +PS> choco search kitty --limit-output +kitty|0.76.1.13 +kitty.portable|0.67.0 +superputty|1.5.0 +superputty.install|1.5.0 +superputty.portable|1.5.0 +``` + +You can easily parse the output to get a PowerShell object: + +```powershell +PS> choco search kitty --limit-output | ConvertFrom-CSV -Delimiter '|' -Header 'Name','Version' + +Name Version +---- ------- +kitty 0.76.1.13 +kitty.portable 0.67.0 +superputty 1.5.0 +superputty.install 1.5.0 +superputty.portable 1.5.0 +``` + +## Querying + +While we only support querying the Chocolatey Community Repository with [these tools](#supported-api-query-tools), there will be people who create their own queries. +We don't recommend this, but want to ensure if you are doing it, you do it safely. + +### Item Limit + +The total number of items returned from any query is limited to 10,000. This also affects paging. Attempting to retrieve item 10,001 will return an error of HTTP Status Code `406 - Not Acceptable`. + +Note that this affects both manual queries and queries made through Chocolatey CLI, Chocolatey GUI, and `chocolatey.lib`. + +This will be unlikely to affect the vast majority of users and will be limited to customers or community members who are retrieving a list of all packages, or paging through all packages, rather than searching for specific ones. If you have a legitimate need to regularly retrieve a full list of packages, please reach out to us on [Community Chat](https://ch0.co/community). + +### Using the `orderby` Parameter + +The following `orderby` parameters can be used to sort the results before they are returned: + +* `DownloadCount` +* `Published` +* `Id` +* `Title` +* `Version` + +If an unsupported `orderby` parameter is used, an HTTP Status Code `406 - Not Acceptable` response will be returned. + +An optional direction, `asc` for ascending, or `desc` for descending can be used with `orderby` parameters, for example `orderby=Version desc`. + +### Filtering + +Filtering should only be done using a [supported tool](#supported-api-query-tools) as there are too many filters and options to list here. + +And herein lies the problem. + +Because there are so many filters and options, an attempt is made to parse them and return results. +However, because of the complex nature of the queries, it may return an empty result, nothing or an HTTP Status Code `406 - Not Acceptable`. + +Any filter that is used more than once in the query, will return an HTTP Status Code `406 - Not Acceptable`. + +### `GetUpdates` Endpoint + +The `GetUpdates` endpoint is not supported and any call to it will return an HTTP Status code of `410 - Gone`. + +## Questions? + +If you are using a [supported tool](#supported-api-query-tools) and have questions about queries, please reach out to us on [Community Chat](https://ch0.co/community). diff --git a/src/content/docs/en-us/community-repository/community-packages-disclaimer.mdx b/src/content/docs/en-us/community-repository/community-packages-disclaimer.mdx new file mode 100644 index 00000000000..97a5db1b1d0 --- /dev/null +++ b/src/content/docs/en-us/community-repository/community-packages-disclaimer.mdx @@ -0,0 +1,165 @@ +--- +order: 10 +xref: community-packages-disclaimer +title: community.chocolatey.org Packages Disclaimer +description: When you should, and shouldn't, use community.chocolatey.org +--- +import Xref from '@components/Xref.astro'; + +**Bottom line** - As an individual using Chocolatey, you are more likely okay if something breaks when setting up your personal machines - the Community Package Repository is typically fine for you. When it comes to using Chocolatey in an organizational context, you want reliability, control, and trust. You can gain trust over some packages on the community repository, and possibly some reliability if the binaries are included in the package. However there is a limiting factor with a public repository - distribution rights. This creates a large failure point that organizations just don't have when they are hosting their own internal packages. + +## Organizations + +### Summary + +As an organization, you want 100% reliability (or at least that potential), and you may want full trust and control as well. This is something you can get with internally hosted packages, and you are unlikely to achieve from use of the Community Package Repository. If your use of Chocolatey is for an organization/business, you likely have a low tolerance for production breakages and/or low trust for the greater internet. You likely would not want to give control of your infrastructure over to community members and volunteers. Organizational use of the community repository is not recommended. + +### Reliability + +Chocolatey is the best option for software management, as long as you are using package repository sources you can rely on. + +A huge thing in Windows ecosystem is copyright law and how it plays into distribution rights. Most software in POSIX-land (Linux) is open source friendly, which has friendly redistribitution rights (redist). So you can embed that software directly in the package and publicly offer it. In Windows that is not the case - an organization like Microsoft would get very upset if the Office 365 packages on the public Community Package Repository actually contained the Office 365 binaries. That creates an enormous failure point that is outside of the package's control when it needs to download files at install time (that dependency on internet-available files that are hoped to always be available, but in practice they are not). + +You can build a 100% reliable pipeline/workflow within the Chocolatey framework, just not with the community package repository. Building a reliable pipeline is huge. If you are a Windows admin wanting to trust a framework like Chocolatey, you are not going to use the Community Package Repository. Not when your reputation/job is on the line for picking the best options. + +> :choco-info: **NOTE** +> +> You can also achieve reliability when reusing community packages, as long as you them. **Internalizing is not the same thing as caching the nupkg files like Artifactory, Cloudsmith, Nexus, ProGet, etc can do.** + +### Trust / Control +Windows admins typically need to do everything internally with no outside internet access. There is quite a bit more hush-hush, non-use of publicly available things without bringing it internal for absolute control and trust. There is a huge (semi-healthy, but maybe even unhealthy) lack of trust for anything reaching out to the internet. I'm not saying this is exclusive to Windows admins, but it is very much the norm. So using the community package repository is a non-starter for these kinds of folks. + +There are options for organizations to be able to reuse packaging from the community repository but make the package 100% offline and reliable. Please look at those options on the pricing page if you are interested. + +### Distro-provided Repositories + +There is another psychology aspect to this - Debian/RPM are nearly the ONLY way you install software on those machines, so it is expected that you would go that route. There are organizations using POSIX environments (typically RedHat) where it is becoming more typical that they pull those repositories local as well so they can trust everything will always work and be reliable. + +However Windows doesn't have a distro-provided repo. Chocolatey Software does not support use of the community repo for organizational use that doesn't also benefit the community (providing and maintaining packages). Reliability plays a huge part in that. If something breaks within the context of a package, then Chocolatey gets blamed (even though it is not Chocolatey's fault). + +## Excessive Use + +**Please note that individuals (even organizations) using the community repository are unlikely to hit excessive use numbers under normal usage scenarios.** + +> :choco-info: **NOTE** +> +> If you do find you have been blocked / rate-limited, having commercial licenses will not have any effect the policies with the community package repository. These policies were put into place to ensure stability and availability for the entire community, not to try to get folks to pay for licensing. + +See [rate limiting](#rate-limiting) below if you are seeing 429 errors (too many requests). + +Another aspect to keep in mind is that the community package repository is meant for the community. Perceived abuses of the community package repository that affect it in a detrimental way for the rest of the community will not be allowed. By abusive, it **may** mean more than **100 installs per hour on average over an internally determined amount of time** (it could be more, could be less) - this is not queries, this is **installs, upgrades** where actual package downloads are occurring. Let's say that is 30 days - that would mean 72,000+ package downloads over 30 days. When that is seen, our community team will make attempts to warn folks if we have known contacts (keep in mind it's highly unlikely we will have your contact information), and implement a temporary block to ensure your usage does not affect the community in a detrimental way. Many times this is due to a misconfiguration and can be corrected quickly. + +**Blocks are meant to be temporary bans, but require you to act to remedy the situation.** If you have been blocked, please see the next sections for corrective actions. + +> :choco-info: **NOTE** +> +> If you or your organization feels you will need to go over this limit with good reason and need whitelisted, please reach out at https://chocolatey.org/contact, choose "Blocked IP Address". As we have limited information, please include your name, email address, phone number, and the IP addresses you believe are blocked so we can contact you and verify if there is a ban. Once you have resolved any issues on your side, we can lift the ban. + +### How To Avoid Excessive Use + +To avoid excessive use, please see our . Installation of Chocolatey itself and everything else should be from your internal repository and not directly from the community package repository. There are even ways to automate caching (see below) / (caching and internalizing are entirely different concepts) packages so you still get a pretty good hands off experience. + +If you are not able to take advantage of packages, you can still cache them locally (using package repository solutions like Artifactory, Cloudsmith, Nexus, ProGet, MyGet, etc), which will reduce your direct usage of the community repository. + +> :choco-info: **NOTE** +> +> Caching doesn't make the packages you are using from the community repository any more reliable, they may still need to download things from the internet at runtime - but it doesn't put you in a worse place than you already are at because you are already using the community repository directly which has issues identified in this document. If you want to achieve reliability when reusing community packages, you would need to . + +For caching of packages, something can be quickly implemented in 15-30 minutes to get your organization unblocked (and avoid rate limiting) while you look into implementing the rest of the (which takes about 1-2 hours). With 15-30 minutes, you can implement a ) packages from the community repository (`https://community.chocolatey.org/api/v2`). This provides the same experience you get in using the community repository now but with more availability and no rate limiting! + +### What To Do When You Are Blocked For Excessive Use + +> :choco-info: **NOTE** +> +> A block will not automatically expire, you will need to contact our team to resolve the block. Rate Limiting on the other hand does automatically expire after one hour. Please see [rate limiting](#rate-limiting) below. + +If you have found that you have gone over the limit and have been warned/blocked, please reach out at https://chocolatey.org/contact (send message to "Blocked IP Address" in the drop down - you may need to do this from a different IP address) or go to our [Community Chat](https://ch0.co/community) to contact the community team. As we have limited information (only an IP address), please include your name, email address, phone number, and the IP addresses you believe are blocked so we can contact you and verify if there is a block. + +See the section above on avoiding excessive use - the expectation is that organizations would not use the community repository directly. As part of addressing any misconfigurations you might have, you will also need to see about addressing the previous section on "How To Avoid Excessive Use". + +Once you have resolved any issues on your side, we can lift the block. A block will be reimplemented later if we find excessive use again. + +### Rate Limiting + +> :choco-info: **NOTE** +> +> Purchasing licenses will not have any effect on rate limiting of the community package repository. Please read carefully below to understand why this was put in place and steps you can take to reduce issues if you run into it. HINT: It's not an attempt to get you to pay for commercial editions. + +As a measure to increase site stability and prevent excessive use, the Chocolatey website uses rate limiting on requests for the community repository. Rate limiting was introduced in November 2018. Most folks typically won't hit rate limits unless they are automatically tagged for excessive use. If you do trigger the rate limit, you will see a `(429) Too Many Requests`. When attempting to install Chocolatey you will see the following: + +![Exception calling "DownloadFile" with "2" arguments: The remote server returned an error: 429 Too Many Requests](/images/cloudflare_ratelimiting_choco_install.png) + +It will look like the following using choco.exe: + +![The remote server returned an error: 429 Too Many Requests](/images/cloudflare_ratelimiting_choco.png) + +If you go to a package page and attempt to use the download link in the left menu, you will see the following: + +![Error 1015, You are being rate limited](/images/cloudflare_ratelimiting.png) + +You will start to see `429 Too Many Requests` if you have triggered the rate limit. Currently the rate limit will be in place for one hour. If you trigger it again, it will then be set for another hour. + +* Error 1015 + +> :choco-info: **NOTE** +> +> Please note that individuals using the community repository are unlikely to hit rate limiting under normal usage scenarios. + +**Details:** +* Installations/downloads of Chocolatey itself (chocolatey.nupkg) are rate limited at about 5 per minute per IP address - temporary ban expires after 1 hour. +* All other packages are rate limited at about 20 per minute per IP address - temporary ban expires after 1 hour. + + +> :choco-info: **NOTE** +> +> Rate Limiting defaults are subject to change with or without notice as we find a good happy medium that ensures ease of use and stability for our community. + +### What To Do When You Are Rate Limited + +> :choco-info: **NOTE** +> +> A rate limit will automatically expire after an hour, but if you hit the limit again, it will block for another hour. + +If you have found that you have been rate limited, please see [How To Avoid Excessive Use](#how-to-avoid-excessive-use). Implementing best practices for organizational use will limit chances of being rate limited again in the future. + +* Individual users being rate limited should reach out as per the next section and let us know as we are constantly adjusting limits to find a happy medium and need to have as much data to work with as possible. In addition to providing the requested information, make sure to also mention you are "individual use" and provide details on what caused the rate limiting. We may ask you to provide logs for further inspection. +* Organizational use will be asked to set up best practices for Chocolatey deployments. + +#### Special Requests on Rate Limiting + +If you have special needs and are being rate limited, please reach out to us as in special instances, we can whitelist your IP address for a small period of time. Do the following: + +> :choco-warning: **WARNING** +> +> Rate limits are temporary and expire within an hour, but will trigger again if you go over the limits. You may not need to file a special request if you can determine alternative means of use or if you [implement best practices](#how-to-avoid-excessive-use). + +* Go to https://chocolatey.org/contact. +* Select **Blocked IP Address** in "Send message to" drop down (this is important to get it routed to the right folks). +* :exclamation: **IMPORTANT**: Mention you are being rate limited, include your IP address. +* :exclamation:**IMPORTANT**: Note what special need your organization has in the message as well. +* You will typically receive a response somewhat quickly with options for you to implement. These are considered [best practices](#how-to-avoid-excessive-use) and can typically be implemented within 15-30 minutes. +* Our team will evaluate your request within a few business days and make a determination if your need qualifies for whitelisting. If so, the team will typically put in a temporary one time 7 day whitelist for you to [implement best practices](#how-to-avoid-excessive-use). + +> :choco-info: **NOTE** +> +> These are subjective, and special requests ONLY. Please ensure you [implement best practices](#how-to-avoid-excessive-use) so that you are not rate limited. + +See the section above on avoiding excessive use - the expectation is that organizations would not use the community repository directly. As part of addressing any misconfigurations you might have, you will also need to see about addressing the previous section on "How To Avoid Excessive Use". + +## Community Provided Packages Are Not Supported + +The packages contained at https://community.chocolatey.org/packages (the community repository) are collectively known as the Community Feed or Community Repository. Packages found on the community repository may not be supported by the original software vendor. If you have an issue with a package, contact the package maintainers through the community repository package page, Do not contact the software vendor directly. It bears repeating, DO NOT contact the software vendor directly. + +The packages you find on the community repository are completely unsupported. By using the packages on the community repository, you assume all risk for any issues or damages that may occur. The packages found in the community repository are built, moderated, and maintained by the community. While the packages are moderated by community moderators to help ensure safety and reliability (at the time of moderation), package maintainers and moderators assume no support nor liability for the packages. Neither package moderators nor package maintainers will be held liable for any issues, downtime, or damages that may occur from your use of the packages on the community feed. It is also not the responsibility of the package maintainers and/or package moderators to ensure that the package works in all scenarios. They are volunteers and thus are unable to support you and/or your business needs. + +Support is not guaranteed by package maintainers, but should you encounter issues, please work directly with the maintainers to get the package(s) corrected. Do NOT contact the software vendor directly. + +Transferring a package to another repository (even internal) with or without changes does not change the support level by the maintainers of Chocolatey, by the moderators nor maintainers, and not by Chocolatey Software, Inc. + +## Put It Another Way + +Due to software distribution rights, many of the packages contained on the community repository must download actual software from official distribution points, thus creating a dependency on those internet locations not changing (and from time to time they do, thus breaking a package until it is updated). This introduces a failure point for the community repository that is not found with internal packages. When hosting your own internal packages you would not be subject to software distribution rights, so you could embed the software directly in the package or pull from an internal share location, thus guaranteeing a reliable and repeatable software management process. + +For folks in the community that are not using Chocolatey for production purposes, with an understanding of the disclaimers set forth here, it is fine to use the community repository. For organizations that have a low tolerance for breakages and require a higher level of reliability, security, trust, and control, a self-hosted Chocolatey server is the recommended option. This guarantees that your installs, upgrades, and uninstalls will always work every time. This gives you complete control over what software gets installed. Also because you are vetting newer versions, you control when those newer versions are available for upgrade. Please see for more information. + +{/* */} diff --git a/src/content/docs/en-us/community-repository/faq.mdx b/src/content/docs/en-us/community-repository/faq.mdx new file mode 100644 index 00000000000..ca1cce3a61e --- /dev/null +++ b/src/content/docs/en-us/community-repository/faq.mdx @@ -0,0 +1,146 @@ +--- +order: 90 +xref: ccr-faq +title: Chocolatey Community Repository FAQ +description: Chocolatey Community Repository Frequently Asked Questions +--- +import Xref from '@components/Xref.astro'; + +### How Do I Ask Questions About a Package? + +If you have a question about the _package_, please follow **both** these steps: + +1. [Contact the package Maintainers](#how-do-i-contact-the-package-maintainers). Some Maintainers have opted-out of receiving email, so this option may not be available. +1. [Find the package source](#how-do-i-find-the-package-source) and if the repository supports it, raise a discussion. The majority of Maintainers have the package source on a platform such as GitHub which allows issues and discussions to be created, if enabled. + +![Package Source link on the Chocolatey Community Repository package page](/images/triage-packagesource.jpg) + +### How Do I Ask Questions About the Package Software? + +If you have questions about the _software_ the package installs, please contact the Software Vendor/Author. Maintainers do not provide support for the software that is packaged. + +If you want to ask questions about the _package_, see [here](#how-do-i-ask-questions-about-a-package). + +### How Do I Contact the Package Maintainers? + +You may want to contact the package maintainers with package questions, or to report a broken or outdated package. On the [Chocolatey Community Repository](https://community.chocolatey.org/packages) package page, click the **Contact Maintainers** link. + +![Contact Maintainers link on the Chocolatey Community Repository package page](/images/triage-maintainers.jpg) + +If your question is about the software installed by the package, please contact the Software Vendor or Author directly as package maintainers cannot provide software support. The exception is if the package Maintainer is also the Software Vendor/Author. You can find out who the package maintainers are on the [Chocolatey Community Repository](https://community.chocolatey.org/packages) package page. + +![Package Maintainers profile links on the Chocolatey Community Repository](/images/triage-maintainerlinks.jpg) + +### How Do I Contact the Site Admins? + +You should contact the Site Admins if: + +* You have read this FAQ and your question is not answered. + +You should not contact the Site Admins to: + +* . +* . +* Marketing or sales communications. +* [Ask for package support](#how-do-i-ask-questions-about-a-package). +* [Ask for support on the packaged software](#how-do-i-ask-questions-about-the-package-software). +* [Ask for Chocolatey product support](https://chocolatey.org/support). + +To contact the Site Admins, click the **Contact Site Admins** link to contact the site Administrators. Please include as much information as possible including dates and times. The Site Administrators will then follow up with you. + +![Contact Site Admins link on the Chocolatey Community Repository package page](/images/triage-siteadmins.jpg) + +### How Do I Create Chocolatey Packages? + +It's easy to . + +### How Do I Find the Package Source? + +On the [Chocolatey Community Repository](https://community.chocolatey.org/packages) package page, click the **Package Source** link, if it's available. + +![Package Source link on the Chocolatey Community Repository](/images/triage-packagesource.jpg) + +Not all Maintainers provide a publicly accessible package source. If the **Package Source** link is missing, you also could try to find a link to the package sources in the profiles of the Maintainers. + +![Package Maintainers profile links on the Chocolatey Community Repository](/images/triage-maintainerlinks.jpg) +![Package Maintainer profile on the Chocolatey Community Repository with GitHub repository link](/images/triage-maintainerrepository.jpg) + +### How Do I Inspect the Contents of a Chocolatey Package? + +> :choco-info: **NOTE** +> +> Packages submitted before 2014 do not have files listed under the **Files** section. + +The contents of every Chocolatey package is available to be inspected both on the Chocolatey Community Repository package page under the **Files** section. + +![Chocolatey Community Repository package files section with chocolateyInstall.ps1 PowerShell script expanded](/images/moderation-10.jpg) + +You can also download the actual package and inspect the contents. On the left menu there is a **Download** button where you can download and rename the `.nupkg` file extension to `.zip`, extract it and see the contents. + +![Download package button on the Chocolatey Community Repository](/images/triage-download.jpg) + +### How Do I See All Versions Of a Package + +Packages can have multiple version, both stable and prerelease. All of these versions are listed on the package page and can be found by scrolling down the page to the **Version History** section and clicking the link. + +![Version History section of the package page on the Chocolatey Community Repository](/images/packagepage-versionhistory.jpg) + +Only a limited number are shown initially. If there are more version available, click the **Show Additional Versions** button to view them all. + +### How Do I See the Package Source Code? + +See [this FAQ question](#how-do-i-find-the-package-source). + +### How To Report An Abusive Package + +> :choco-info: **NOTE** +> +> Do not use the **Report Abuse** form to submit reports of: +> +> * . +> * . +> * Marketing or sales communications. +> * [Package support](#how-do-i-ask-questions-about-a-package). +> * [Support on the packaged software](#how-do-i-ask-questions-about-the-package-software). +> * [Chocolatey product support or help](https://chocolatey.org/support). + +We take package abuse very seriously. But what is package abuse, or an abusive package? + +There are many definitions of what could make a package, or the software it installs, abusive. An abusive package could be: + +* A package that installs software that contains malware, adware, or potentially unwanted applications (PUA). +* A package that violates . + +If a package is abusive, please report it by clicking on the **Report Abuse** link on the package page, fill out and submit the form. The Site Administrators will follow up with you. + +![How to report abuse on the Chocolatey Community Repository](/images/triage-reportabuse.jpg) + +### Why do I get a 500 Internal Server Error when trying to push my package? + +If you receive a `500 Internal Server Error` when pushing a package, you may have a malformed package that the server was unable to process. +One such case is documented in a [GitHub issue](https://github.com/chocolatey/home/issues/303). + +Make sure that none of the `` entries in the `nuspec` file of your package have name collisions with other files or folders being packed. +This is usually rare but can be encountered more commonly if you are trying to pack files which don't have a file extension. +For example, if you have `` entries that may look like this, you will need to change the name of the file or folder in the package to avoid collision: + +```xml + + +``` + +There are two possible solutions for this particular case: + +```xml + + + + + + + +``` + +See an [issue we raised on the NuGet repository](https://github.com/NuGet/Home/issues/13273) for more information on the NuGet bug which can cause this kind of malformed package. + +If you receive a `500: Internal Server Error` that is not related to this specific case, please [file an issue on GitHub](https://github.com/chocolatey/home) so we can investigate the issue. diff --git a/src/content/docs/en-us/community-repository/index.mdx b/src/content/docs/en-us/community-repository/index.mdx new file mode 100644 index 00000000000..cd183246857 --- /dev/null +++ b/src/content/docs/en-us/community-repository/index.mdx @@ -0,0 +1,8 @@ +--- +order: 80 +xref: chocolatey-community-repository +title: Chocolatey Community Repository (CCR) +description: This is the default location where Chocolatey will install packages from +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/maintainers/deprecate-a-chocolatey-package.mdx b/src/content/docs/en-us/community-repository/maintainers/deprecate-a-chocolatey-package.mdx new file mode 100644 index 00000000000..6d31325eeb6 --- /dev/null +++ b/src/content/docs/en-us/community-repository/maintainers/deprecate-a-chocolatey-package.mdx @@ -0,0 +1,33 @@ +--- +order: 30 +xref: deprecate-a-package +title: Deprecate a Package +description: How to deprecate a Chocolatey package +--- +import Xref from '@components/Xref.astro'; + +## The Problem +From time to time, a previously approved Chocolatey Package needs to be deprecated. This could be for a number of reasons: + +* It was created in error. +* It has been superseded by another package. +* It is an older package that no longer follows the . +* Its package id has been changed to something that better fits with the . + +All versions of this package could simply be from chocolatey.org, meaning that they could no longer be installed, however, this solution is not ideal. Any user who previously installed this package, and added it as part of an installation script, would get an error the next time that they tried to install it, and this is far from ideal. + +When a package needs to be deprecated, it needs to be handled in such a way that existing users will continue to be able to use the old package id, but take advantage of the replacement package, if there is one. + +## The Solution +When deprecating a Chocolatey Package, the following steps should be followed: + +* Create a **** of the deprecated Chocolatey Package. +* Prepend **[Deprecated]** to the **title** of the package (e.g. `[Deprecated] Software Title` +* Update the package **description**: Why is the package being deprecated? +* Add a **[dependency](http://docs.nuget.org/docs/reference/nuspec-reference#Specifying_Dependencies) on the other package** (if the package is being superseded). +* **Remove all files** except the `.nuspec` from the Chocolatey Package. +* Replace `...` section in `.nuspec` with `` tag to prevent any file from being included with the package. +* **Remove the iconUrl**. +* **** from the package gallery, **except** the final deprecated version. The final deprecated version is required so that there is an update path to the new package. + +By following this process, any existing users who try to update the old package will automatically get the new package, as it will be installed as a dependency. diff --git a/src/content/docs/en-us/community-repository/maintainers/index.mdx b/src/content/docs/en-us/community-repository/maintainers/index.mdx new file mode 100644 index 00000000000..bfca72de0dd --- /dev/null +++ b/src/content/docs/en-us/community-repository/maintainers/index.mdx @@ -0,0 +1,8 @@ +--- +order: 40 +xref: maintainers +title: Maintainers +description: Information for maintainers of packages on the Chocolatey Community Repository +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/maintainers/list-unlist-a-chocolatey-package.mdx b/src/content/docs/en-us/community-repository/maintainers/list-unlist-a-chocolatey-package.mdx new file mode 100644 index 00000000000..72d8014dd9c --- /dev/null +++ b/src/content/docs/en-us/community-repository/maintainers/list-unlist-a-chocolatey-package.mdx @@ -0,0 +1,40 @@ +--- +order: 30 +xref: list-unlist-a-package +title: List / Unlist a Package +description: How to list or unlist a Chocolatey package +--- +import Xref from '@components/Xref.astro'; + +## The Problem + +From time to time, the visibility of a previously approved Chocolatey package version needs to be changed. This could be for a number of reasons, for example: + +* The package version was uploaded in error. +* The installer or embedded files are no longer available. + +Leaving a package as listed could mean that any user who tries to install or upgrade this package might get an error, and this is far from ideal. + +## The Solution + +You can change the visibility of an individual Chocolatey package version by following these steps: + +1. Navigate to the package page, scroll down, and expand, **Version History**. If a package is listed, and visible on the Chocolatey Community Repository it will say **yes**. If a package is unlisted, it will say **no**. + +1. Under the **Listed** column, click **yes** next to the version you want to unlist, or **no** next to the version you want to list. + + ![Example of a package visibility on the Chocolatey Community Repository](/images/maintainers/unlist-package-status-listed.png) + +1. To unlist the package version, untick the box next to **List..**. To list the package version, ensure the box is ticked. Click **Save Changes** to update the package visibility. + + ![Example of unlisted a package from the Chocolatey Community Repository](/images/maintainers/unlist-package.png) + +1. Check the visibility of the package has been updated by expanding **Version History** again. + + ![Example of unlisted a package from the Chocolatey Community Repository](/images/maintainers/unlist-package-status-unlisted.png) + +## FAQ + +### Can I list or unlist all versions of a package at once? + +At this time you cannot list or unlist all versions of a package at once. You must list or unlist individual package versions. diff --git a/src/content/docs/en-us/community-repository/maintainers/package-maintainer-handover.mdx b/src/content/docs/en-us/community-repository/maintainers/package-maintainer-handover.mdx new file mode 100644 index 00000000000..4f1a13e85dd --- /dev/null +++ b/src/content/docs/en-us/community-repository/maintainers/package-maintainer-handover.mdx @@ -0,0 +1,41 @@ +--- +order: 20 +xref: package-maintainer-handover +title: Take Over Package Maintenance Exclusively +description: Package maintainer handover +--- +import Xref from '@components/Xref.astro'; + +# Package Maintainer Handover + +> :choco-info: **NOTE** +> +> This process comes after the . If you are a **software vendor** wanting to maintain your own software's packages, please see . + + +When a package maintainer is deemed no longer maintaining a package, a new maintainer or maintainers can assist and/or takeover. This is done through the . + +Once an admin makes you a maintainer you will need to click on the link in your email to confirm. + +Once that is done you have several steps: + +* Obtain the source for the package. Look at the packageSourceUrl to see if it is filled out or not. + + ![Package source link](/images/maintainer-handover/package-source-link.png) + +* Look for the maintainer's profile to see if they have a GitHub repository for their packages. + + ![maintainer profile with github repository link](/images/maintainer-handover/github-repository-link.png) + +* If you don't find it there, attempt to find it on GitHub with some google-fu. +* If all else fails, download the package from the website (use the Download link on the left side). +* Use unzip to unpack the package and remove the files that are only used in packaging. +* Put that in your GitHub repository for packages. +* Ensure you have a link to that repository in your Chocolatey profile. +* Commit the package as is prior to any changes. If you are moving it over from another repository, just copy the current files/folders related to that package into your repository. +* Now make your changes/fixes/updates. Commit those changes as necessary. +* One thing to update is any links to the old repository such as images and/or maintainers. +* Also add/update `` to point to your repository. +* Build the package and test locally. +* Push the package with the updates/fixes. +* If brought in from another repository, be sure to send a Pull Request to that repository to have the package removed from there (or at the very least file an issue). Link the new location in that request for others who might be searching. diff --git a/src/content/docs/en-us/community-repository/moderation/index.mdx b/src/content/docs/en-us/community-repository/moderation/index.mdx new file mode 100644 index 00000000000..abbf8aa8ea2 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/index.mdx @@ -0,0 +1,273 @@ +--- +order: 50 +xref: moderation +title: Moderation +description: Information about the package moderation used on the Chocolatey Community Repository +--- +import Xref from '@components/Xref.astro'; + +The community feed, which is found at https://community.chocolatey.org/packages, is a moderated feed. That means all new versions of packages are human reviewed prior to approval to check for safety, quality, and correctness. See for more details. There are also , which only go through automated moderation review and bypass human review as they are coming from trusted sources and/or the software vendors themselves. + +By safety - we check that the package scripts do not do anything devious and that you get the software that the package indicates you are getting. Please note that the underlying software may contain crapware/malware (although it is usually not installed when allowing Chocolatey to install silently). This is not checked for currently, but we have plans for checking this in licensed versions of Chocolatey because a feature doing that is not free for us to provide. + +## Definitions + +* package - The Chocolatey/NuGet package +* software - The underlying software that the package assists in installing +* installer - The native installer, usually packaged as MSI, NSIS, InstallShield, Wise, Squirrel, or some other flavor. +* the validator - The checks the quality of a package based on requirements, guidelines and suggestions for creating packages for Chocolatey’s community feed. We like to think of the validator as unit testing. It is validating that everything is as it should be and meets the minimum requirements for a package on the community feed. +* the verifier - The checks the correctness (that the package actually works), that it installs and uninstalls correctly, has the right dependencies to ensure it is installed properly and can be installed silently. The verifier runs against both submitted packages and existing packages (checking every two weeks that a package can still install and sending notice when it fails). We like to think of the verifier as integration testing. It’s testing all the parts and ensuring everything is good. + +## Requirements and Guidelines + +While probably the most comprehensive, this list may not be fully up-to-date. This should serve as a most general understanding, knowing that the may be checking for newer things than are written here and that reviewers/moderators may find newer things to check from time to time. + +> :choco-info: **NOTE** +> +> Moderators tend to get somewhat picky about properly stating the license, authors (software vendors), and copyright attributions. They are very important to protect both maintainers and the software vendors. + +> :choco-info: **NOTE** +> +> This is still written based on a reviewer reading it, this will get cleaned up more over time to better explain it from a non-reviewer perspective. + +### Existing Packages + +This section provides the requirements for packages that have had at least one released version approved or exempted. This includes any packages that existed prior to moderation being turned on (possibly an Unknown status). + +#### Requirements + +Requirements represent the minimum quality of a package that is acceptable. When a package version has failed requirements, the package version requires fixing and/or response by the maintainer. Provided a Requirement has flagged correctly, it **must** be fixed before the package version can be approved. The exact same version should be uploaded during moderation review. + +* ProjectUrl - it's required for the community feed +* The authors field (software author/vendor) is not being used for the maintainers field (exception: when the maintainer is also the author) +* The copyright is used appropriately. Look at anything you can find that states the copyright. +* If there is a license available, it **must** be included in the licenseUrl. +* Is the title appropriate? +* At least something written in the description. It should be sufficient to explain the software. +* The description should explicitly mention if this package installs trial software or software that needs a license present, or both. +* The tags field is not being abused - note this doesn't mean they are missing tags you believe they should have (that is a guideline). +* Tags do not include "chocolatey" (with the exception of the chocolatey packages) +* When using an `iconUrl`, GitHub raw links are not allowed; linking through a CDN like jsDelivr, Statically, or Githack is required. +* When using an `iconUrl`, the icon needs to be hosted at a location that the package maintainer has control over. In most cases this is the package source repository, but can be the software website if the software author is also the package maintainer. +* Look over the package files + * If binaries are included in the package, does the maintainer have distribution rights? If they have explicit permission, a copy of that in PDF should be in the package contents. + * **Install/Uninstall scripts:** + * Do the scripts try to do anything malicious? This is almost always immediate grounds for banning the maintainer and deleting their packages. + * Do the scripts set good defaults for silent args? + * Is there anything there that would not work with POSH v2? + * If it is a download, is it getting it from the proper location? Use the project site (projectUrl) to determine where the download for the file is coming from and it should match the one in the package files. If not there needs to be a really, really good reason for not doing so. + * Does the download version match the package version? + * Does the download include both x86 and x64 urls if available? + * Flag the use of any of the following: $nugetChocolateyPath, $nugetPath,$nugetExePath, $nugetLibPath, $chocInstallVariableName, $nugetExe + * Does the PowerShell script try to use any choco commands? e.g. choco install/upgrade/uninstall? + * Does the package try to do anything that an existing Chocolatey function already covers? The maintainers would need a really good reason for diverging from that. + * If the package is a portable package (downloads a zip file or non-install archive, many times carries the .portable name), does it try to put that in Program Files? This is a no no because Program Files requires admin permissions to write to and is typically the place for natively installed software. +* Does the package install correctly? +* Does the package uninstall correctly? (this means the package, not the underlying software. We'd like to have that as well but it's more a guideline at the moment than a requirement. Patience, we will get there). +* Brand New Packages **ONLY** (no approved or existing version in history, prereleases do not count) + * Package Id naming - if the naming doesn't follow our conventions, it is grounds for rejecting immediately with the suggestion they resubmit with suggested name. Note that they may have had prereleases already, and it's still okay to move forward with the rejected status as long as the name of the name of package hasn't been previously approved. See + * suggest the id split if over 25 chars with no "-" in the id + * flag on "." in name (unless .portable/.install) + +#### Guidelines + +Guidelines are strong suggestions that improve the quality of a package version. These are considered something to fix for next time to increase the quality of the package. Over time Guidelines can become Requirements. A package version can be approved without addressing Guideline comments but will reduce the quality of the package. + +* Trial software should include the #trial tag. (will become a requirement in Feb 2016) +* Software that requires a license should include a tag #license. (will become a requirement in Feb 2016) +* LicenseUrl is nearly a requirement. The only reason it sits in guidelines is that not all software has a url out there containing its license information. We request that in those cases they point to the url for the FOSS license of the software, if they have an open license. +* Usage of the `iconUrl` is very strongly encouraged, however, the addition of a `iconUrl` is a guideline and something to note for a maintainer to fix up next time. Some software doesn't have a proper icon, in which case an `iconUrl` should not be added. See the requirements section for the requirements if a `iconUrl` is included. +* Suggest description get really filled out and they take full advantage of the use of markdown. +* Summary is important, but it doesn't show up on the package page. +* Tags could always use suggestions to add. +* Look over the package files + * **Install / Uninstall Scripts:** + * Be familiar with things that have been deprecated and add a gentle reminder about those things for them to clean up. + * Are the commented lines from the template in there? Those should be cleaned up. It is not required to remove all comments, some comments are helpful. It’s a bit subjective on what is helpful and what is noise. +* Something in the releaseNotes section would be great. + +## Package Review Process + +When reviewing new and existing packages, a reviewer/moderator will have a few things left for review after the verifier and validator have verified a package. + +### Moderation Workflow + +#### First Time Go Workflow + +When a good package is submitted, the normal flow of moderation works roughly like this: + +1. A maintainer submits a package. That puts the package in a "Pending" status (Pending automated review checks). +1. If automated reviews don't require changes, the package moves to a "Ready" status. (Ready for Reviewer) +1. If a moderator doesn't find any required changes, they move the package to an "Approved" status. + +#### Full Workflow + +The full normal workflow is like this: + +1. A maintainer submits a package. That puts the package in a "Pending" status (Pending automated review checks). +1. If automated reviews don't require changes, the package moves to a "Ready" status. (Ready for Reviewer) +1. If any of the automated review checks flag a package, the package moves to a "Waiting" status. (Waiting for maintainer to take corrective action) +1. The package will sit in the Waiting status until a maintainer resubmits the package (starts the process from step one) or responds ("Responded"). Responses are typically questions, comments or requests for exempting from the verifier. (Maintainer responded, waiting for review/Maintainer update) +1. If the package is in "Responded", it moves up the queue and waits for a reviewer to go over the response and process it accordingly. +1. If a package is resubmitted, it doesn't go into a Ready status. It moves to an "Updated" status at the top of the queue. (Maintainer updated, waiting for reviewer) +1. If a moderator asks for required changes, the package moves to a "Waiting" status. (back to step 4) +1. If a moderator doesn't find any required changes, they move the package to an "Approved" status. + +#### Trusted Package Workflow + +This is the trusted package workflow: + +1. A maintainer submits a trusted package. That puts the package in a "Pending" status (Pending automated review checks). +1. If automated reviews don't require changes, the package moves to an "Approved" status. +1. If any of the automated review checks flag a package, the package moves to a "Waiting" status. (Waiting for maintainer to take corrective action) +1. The package will sit in the Waiting status until a maintainer resubmits the package (starts the process from step one) or responds ("Responded"). Responses are typically questions, comments or requests for exempting from the verifier. (Maintainer responded, waiting for review/Maintainer update) +1. If the package is in "Responded", it moves up the queue and waits for a reviewer to go over the response and process it accordingly. +1. If a package is resubmitted, it doesn't go into a Ready status. It moves to an "Updated" status at the top of the queue. (Maintainer updated, waiting for reviewer) +1. If the package passes automated review, the package moves to an "Approved" status. +1. If a moderator asks for required changes, the package moves to a "Waiting" status. (back to step 4) +1. If a moderator must manually override the approval, they move the package to an "Approved" status. + +### Maintainer Process + +**FYI:** Ensure that you can receive emails from Chocolatey.org so that you will receive email notifications when a package review is updated. + +The process of moderation review is an interactive process for both maintainers and moderators. As a maintainer you submit packages and they are reviewed to be sure they meet a minimum quality and correctness to be published on Chocolatey.org. It's an important distinction that while almost all valid packages are approved, a package can be rejected for a variety of reasons. + +Packages go through three automated checks: validation, verification, and cleanup. There is about a 30 minute lag time from submission until automatic review kicks off - this allows the CDN to recheck and pull a newer version of the package up (in the case of resubmission), so that the package version being verified is the one you submitted and not a stale copy. + +When you receive emails that require you to take action, you should review what is requested and make the changes. If a package is flagged and needs changes based on requirements, the process is for you to make the required changes and resubmit the **exact** same version. The faster you respond to the review process, the faster your package can get approved. + +The cleanup automated check, aka the cleaner, checks packages that have been in a 'waiting' (waiting for maintainer to take action) status with no action/response within 20 days and follows up with a final reminder. If after 15 more days nothing has been done, the package will automatically be rejected on non-response. We feel that 35 days prior to automatic close is ample time for a maintainer to move the ball forward (even one going on holiday). If a package gets rejected, it doesn't mean that we don't value your contributions, just that we can not continue to hold packages versions in a waiting status that have possibly been abandoned. The rejected status is also reversible in case a maintainer wants to pick it back up within a year. + +Moderators give you the benefit of the doubt and will work with you to help you get a package to an approved status. (This also includes the older review process based on email before the site allowed you to comment). + +### Reviewer / Moderator Process + +Typically a package goes into the moderation queue when submitted.You can get to that by signing in and going to the packages page like you normally would. + +1. You should see a new drop down near the top that allows you to change your view. This is the moderation queue. + + ![Moderation Queue Dropdown](/images/moderation-1.jpg) + +1. You will see items arranged in order based on reviewed and resubmitted at the top, items ready for review in order based on when they were submitted, and at the end of the queue, you will see items that are waiting for maintainer response. + + ![Moderation Queue](/images/moderation/moderation-queue.png) + +1. You grab a package and head in and review it based on the following items in the requirements and guidelines. +1. Ensure package tests have ran. It will have both comments in the review and a colored ball up next to the title of the package. A package status box is present at the top of each package page with test results. The left side of the ball next to the package title represents verification testing, while the right side represents validation testing (see image below). Color of ball sections indicate: + - **Green** if it is ready for review and approval. + - **Yellow** if still pending verification/validation (has not yet run). + - **Red** if it failed verification/validation. The maintainer needs to fix or respond. If you find a package needs to skip verification, please contact an admin to do so. If you see a network issue from the log, you can rerun verification (see how in the next step). + - **Grey** if a package skips verification/validation for some reason (which will be listed by the admin that flagged the package to skip testing). If possible, you will need to run the install/uninstall yourself. + + ![Package Testing Results](/images/moderation-4.jpg) + +1. Check over the verifier logs to be sure everything looks good (follow the link from the button). If necessary, you can rerun the verifier. + + ![Rerun](/images/moderation-5.jpg) + +1. Go over the review log - shows history and review information so far. Note that when the validator runs it leaves comments. Look for it to have done the automated part of the requirements/guidelines checks. If it has not, you are responsible to check all [requirements/guidelines](#requirements-and-guidelines) (see [Requirements and Guidelines](#requirements-and-guidelines) above). + + ![Review Notes](/images/moderation-6.jpg) + +1. Look at the notes section from the latest run of the validator to see if there are additional flagging follow ups from the validator. +1. Check over the package based on [moderator review](#moderator-review) (below). +1. Review the previous comments if there are any. + + ![Review previous comments for other package versions](/images/moderation/moderation-previous-comments.png) + +1. Look through the package files + + ![Package Files](/images/moderation-10.jpg) + +1. Leave comments in the review box ("Add to Review Comments" section) if you have any. Note that you can use markdown here. + + ![Review box](/images/moderation-11.jpg) + +1. If you are approving the package, change Package Status to Approved. If you are Rejecting a package, change the status to Rejected. Otherwise leave the status as is (likely in Submitted). +1. If you are making a comment or doing another action, but don't want to flag/hold the package for the maintainer to take action, uncheck the "require maintainer to make changes?" box. This is not required to be unchecked if you are approving the package. + + ![Require maintainers to make changes?](/images/moderation-13.jpg) + +1. If you are doing an action that doesn't need to notify the maintainer, uncheck "Send Maintainer email?". +1. Click Save. You should get a message that the message was sent successfully. +1. The maintainers receive an email noting the comments. They will follow up on the package page with their comments. +1. Once the package is updated, it will show up in the top of the queue. At that time, please review it and make sure the maintainers made all changes requested. + +#### Moderator Review + +You can only ever require a maintainer to make changes if there are findings from the requirements section. Guidelines are strong suggestions that will improve the quality of the package, but consider that a quality over time. A maintainer is NOT required to make changes based on guidelines/suggestions. This deserves to be said twice: **"A moderator cannot hold up a package based on guidelines/suggestions *alone*"**. + +The validator checks quite a few items () and leaves a few for you to check. Ensure you have looked over the notes that it has left. + +With the exception of included binaries, a review that doesn't flag should take under a minute. If you are holding a package, you can refer the maintainer to this link to save time: https://docs.chocolatey.org/en-us/community-repository/moderation + +##### Requirements + +Always be explicit that you are waiting on the maintainer to fix and resubmit the same version of the package so you can move the review process along. + +* Is the title appropriate? +* The description should explicitly mention if this package installs trial software or software that needs a license present, or both. +* The authors field (software author) is not being used for the maintainers field (exception: when the maintainer is also the author) +* The tags field is not being abused - note this doesn't mean they are missing tags you believe they should have (that is a guideline). +* Binaries + * If binaries are included in the package, does the maintainer have distribution rights? If they require explicit permission, a copy of that in PDF form should be in the package contents. + * Find the checksum of the official binaries and verify they match the included binaries (listed on the package page). +* Automation scripts (the `ps1`/`psm1` files such as `chocolateyInstall.ps1`) + * Do the scripts try to do anything malicious? This is almost always immediate grounds for banning the maintainer and deleting their packages. + * Do the scripts set good defaults for silent args? A package should almost ALWAYS install completely silently by default. If a maintainer makes the argument that it is so folks can choose what to pass, remind them this already exists through install arguments (CommandsInstall#options-and-switches) and if they want to add package parameters (How-To-Parse-PackageParameters-Argument), they can also do that (and add them to the description). + * Is there anything in the scripts that would not work with POSH v2? (We are working on making this automatically checked by the validator - see https://github.com/chocolatey/home/issues/34) + * If the package downloads anything, is it getting downloads from the proper location? Follow the projectUrl to the project site to see where it is downloading from - it should match the scripts. If not there needs to be a really, really good reason for not doing so. + * Does the download version match the package version? + * Does the download include both x86 and x64 urls if available? +* Not a package duplicating another existing package +* Brand New Packages **ONLY** (no approved or existing version in history, prereleases do not count) + * Package Id naming - if the naming doesn't follow our conventions, it is grounds for rejecting immediately with the suggestion they resubmit with suggested name. Note that they may have had prereleases already, and it's still okay to move forward with the rejected status as long as the name of the name of package hasn't been previously approved. See + * suggest the id split if over 25 chars with no "-" in the id + * flag on "." in name (unless .portable/.install) + +##### Guidelines + +If a package is only flagging on guidelines, be sure to move forward on approval (this means no requirements flagged by you or the validator checks). + +* Trial software should include the #trial tag. (will become a requirement in Feb 2016) +* Software that requires a license should include a tag #license. (will become a requirement in Feb 2016) +* Tags could always use suggestions to add. +* Automation scripts (the `ps1`/`psm1` files such as `chocolateyInstall.ps1`) + * Do any scripts try to do anything that an existing Chocolatey function already covers? The maintainers would need a really good reason for diverging from that. + +## Roles + +* Maintainer - A person that maintains packages. Maintainers are usually subject to the review process. +* Reviewer - Able to review packages but not approve/reject them +* Moderator - Able to set/remove package maintainers, review packages, approve/reject them, able to unlist packages. +* Administrator - Has access to administrative sections of the site. Can perform all functions that a moderator can perform. + +#### Becoming a Maintainer + +To become a package maintainer, you must have an account on https://community.chocolatey.org and have at least one package on the site. + +#### Becoming a Reviewer + +TBD + +#### Becoming a Moderator + +There is no set process for becoming a moderator yet. Usually it is having many approved packages and understanding the process of creating Chocolatey packages. Eventually it will be something you earn through your reputation on the site. + +* Make awesome packages +* Work on the Disqus threads and mailing list. +* Have a desire to better the quality of Chocolatey +* Know a little PowerShell. More is better but yeah. +* Be friendly and customer service-oriented + +#### Becoming an Admin + +This is not an achievable status. + +### New Reviewers / Moderators + +* Understand the package creation process and the current recommendations, written at . +* Become familiar with the package guidelines and all of the different Chocolatey functions available. +* Join the [chocolatey-moderators at google groups dot com](https://groups.google.com/forum/#!forum/chocolatey-moderators) mailing list. This is necessary for communication with other moderators and receiving messages regarding changes in moderation. +* Join our [Community Chat](https://ch0.co/community) and hang out. diff --git a/src/content/docs/en-us/community-repository/moderation/package-cacher.mdx b/src/content/docs/en-us/community-repository/moderation/package-cacher.mdx new file mode 100644 index 00000000000..fe2639a7ce7 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-cacher.mdx @@ -0,0 +1,11 @@ +--- +order: 50 +xref: package-cacher-service +title: Package Cacher Moderation Service +description: Information on the Package Cacher Moderation Service +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-cleaner.mdx b/src/content/docs/en-us/community-repository/moderation/package-cleaner.mdx new file mode 100644 index 00000000000..85219f35969 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-cleaner.mdx @@ -0,0 +1,11 @@ +--- +order: 40 +xref: package-cleaner-service +title: Package Cleaner Moderation Service +description: Information on the Package Cleaner Moderation Service +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-scanner.mdx b/src/content/docs/en-us/community-repository/moderation/package-scanner.mdx new file mode 100644 index 00000000000..99d2e089fec --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-scanner.mdx @@ -0,0 +1,11 @@ +--- +order: 30 +xref: package-scanner-service +title: Package Scanner Moderation Service +description: Information on the Package Scanner Moderation Service +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/index.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/index.mdx new file mode 100644 index 00000000000..b85e1b56c23 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/index.mdx @@ -0,0 +1,16 @@ +--- +order: 10 +xref: package-validator +title: Package Validator Moderation Service +description: Information on the Package Validator Moderation Service +--- +import Xref from '@components/Xref.astro'; + +Here you will find a collection of more information and resources for when things fail validation. A comprehensive set of how items are reviewed is found at . + +> :choco-info: **NOTE** +> +> If you find you are getting flagged for many of these items, you should consider using choco new to generate and adapt updated templates that have all of the latest recommendations. + +What is the validator? +The validator is a service that checks the quality of a package based on requirements, guidelines and suggestions for creating packages for Chocolatey’s community feed. We like to think of the validator as unit testing. It is validating that everything is as it should be and meets the minimum requirements for a package on the community feed. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0001.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0001.mdx new file mode 100644 index 00000000000..5d4e6fcc6cb --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0001.mdx @@ -0,0 +1,23 @@ +--- +order: 1 +xref: cpmr0001 +title: CPMR0001 - Copyright Character Count Below 4 (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0001 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec, there is a `` field. Usually a copyright contains year (or range of years) and a company. Since a year takes up four characters by itself, the validator has detected that you are not using the copyright field correctly. + +## Recommended Solution + +Please update the copyright field so that it is using at least 4 characters. + +## Reasoning + +Usually the year alone takes up four characters, so properly setting a copyright would include years and name of company. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0002.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0002.mdx new file mode 100644 index 00000000000..d6785d73467 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0002.mdx @@ -0,0 +1,22 @@ +--- +order: 2 +xref: cpmr0002 +title: CPMR0002 - Description Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0002 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +The description explains the underlying software. Without any information, folks may not know what they are installing. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0003.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0003.mdx new file mode 100644 index 00000000000..b4239ee2924 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0003.mdx @@ -0,0 +1,23 @@ +--- +order: 3 +xref: cpmr0003 +title: CPMR0003 - Install Script Named Incorrectly (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0003 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +Your script is named incorrectly and will need to be renamed. A script named `chocolateyInstall.ps1` was not found in your package, but another script ending in `install.ps1` was found. + +## Recommended Solution + +The install script should be named `chocolateyInstall.ps1` and be found in the tools folder. + +## Reasoning + +Chocolatey looks for a known/named script. Without it, Chocolatey can't run PowerShell automation. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0004.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0004.mdx new file mode 100644 index 00000000000..2fc070a4a36 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0004.mdx @@ -0,0 +1,28 @@ +--- +order: 4 +xref: cpmr0004 +title: CPMR0004 - Do Not Package Internal Files (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0004 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +You have repackaged an existing package that you unpacked without removing some of the packaging files from the original. + +## Recommended Solution + +Please remove the following files: + +* [Content_Types].xml +* Files ending in .psmdcp +* Files ending .rels +* _rels directory and its contents + +## Reasoning + +The package will have issues if these are included again. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0005.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0005.mdx new file mode 100644 index 00000000000..08b5fff56cd --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0005.mdx @@ -0,0 +1,29 @@ +--- +order: 5 +xref: cpmr0005 +title: CPMR0005 - LICENSE.txt file missing when binaries included (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0005 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the package, you have included binaries that you may have the right to distribute, but you have not included the license of the software to verify that. + +## Recommended Solution + +Please add the a file named LICENSE.txt. You can see the format for that file if you call `choco new test` and look at the generated file in `test\tools\LICENSE.txt` + +This check also looks for `LICENSE`, `LICENSE.md`, `NOTICE.txt`, `NOTICE`, and `NOTICE.md`. Casing doesn't matter for validation. + +## Reasoning + +It is not enough to point to the License Url in the package (although make sure you do that to if one exists), as the contents of the Url could change or go away over time. The contents of the package are permanent and folks need to understand the licensing that applies with the included binaries. It also a protection for you, the package maintainer, to ensure the legitimacy of having distribution rights for the software that you packaged at the time you packaged when it may need to be verified 5 years down the line. + +> :choco-info: **NOTE** +> +> If you received special permission to distribute, explain that in the LICENSE file and note the name of the permission file that is also included with the packaging. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0006.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0006.mdx new file mode 100644 index 00000000000..968866d0694 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0006.mdx @@ -0,0 +1,25 @@ +--- +order: 6 +xref: cpmr0006 +title: CPMR0006 - VERIFICATION.txt file missing when binaries included (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0006 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the package, you have included binaries but have not given moderators and the community a way to verify the files are legitimate. + +## Recommended Solution + +Please add a file named VERIFICATION.txt. You can see the format for that file if you call `choco new test` (upgrade to the latest version of Chocolatey first) and look at the generated file in `test\tools\VERIFICATION.txt` + +This check also looks for `VERIFICATION` and `VERIFICATION.md`. Casing doesn't matter for validation. + +## Reasoning + +If you include binaries in the package, even if you are the software vendor, you need to include a VERIFICATION.txt file. This allows moderators and the community build trust in using the package. A verification file tells folks how to verify the files are legitimate with specific instructions on verifying with the official location. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0007.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0007.mdx new file mode 100644 index 00000000000..d70a802c0fa --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0007.mdx @@ -0,0 +1,23 @@ +--- +order: 7 +xref: cpmr0007 +title: CPMR0007 - License Url Missing / License Acceptance is True (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0007 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +If you want to require license acceptance, you must include the license url. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0008.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0008.mdx new file mode 100644 index 00000000000..634ed52a7ac --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0008.mdx @@ -0,0 +1,25 @@ +--- +order: 8 +xref: cpmr0008 +title: CPMR0008 - Portable Package Uses Program Files (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0008 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0009.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0009.mdx new file mode 100644 index 00000000000..e0f70333d16 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0009.mdx @@ -0,0 +1,23 @@ +--- +order: 9 +xref: cpmr0009 +title: CPMR0009 - ProjectUrl Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0009 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +This is also known as the software site. Without this information, folks do not have anything to go on besides the package. On the community feed we want to ensure that folks have places to go for more information, the software site is a requirement. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0010.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0010.mdx new file mode 100644 index 00000000000..3b27410f88a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0010.mdx @@ -0,0 +1,31 @@ +--- +order: 10 +xref: cpmr0010 +title: CPMR0010 - Script Contains Choco Commands (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0010 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In automation scripts (`.ps1`/`.psm1`), the package has used a chocolatey command that should not be used. Rather a dependency should be taken on a package. + + * cinst + * choco install + * choco upgrade + +> :choco-info: **NOTE** +> +> The search can also hit a false positive if it finds any of the above words in the package's automation scripts. + +## Recommended Solution + +Please add dependencies to the nuspec. + +## Reasoning + +Calling Chocolatey commands when running Chocolatey is considered an anti-pattern, and it hides dependency required for other packages, which should be expressed. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0011.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0011.mdx new file mode 100644 index 00000000000..3152df4946a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0011.mdx @@ -0,0 +1,25 @@ +--- +order: 11 +xref: cpmr0011 +title: CPMR0011 - Script Imports Chocolatey Module (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0011 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0012.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0012.mdx new file mode 100644 index 00000000000..811234e0a6d --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0012.mdx @@ -0,0 +1,25 @@ +--- +order: 12 +xref: cpmr0012 +title: CPMR0012 - Script Uses Internal Variables (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0012 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0013.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0013.mdx new file mode 100644 index 00000000000..062d2fe30c7 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0013.mdx @@ -0,0 +1,25 @@ +--- +order: 13 +xref: cpmr0013 +title: CPMR0013 - Source Control Files Are Packaged (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0013 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the package, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0014.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0014.mdx new file mode 100644 index 00000000000..3cc0a941026 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0014.mdx @@ -0,0 +1,23 @@ +--- +order: 14 +xref: cpmr0014 +title: CPMR0014 - Tags Have Commas (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0014 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec in the `` element, the verifier found that the tags were separated with commas. They should only be separated with spaces. + +## Recommended Solution + +Please remove the commas from the `` element. + +## Reasoning + +We could just fix this on Chocolatey.org, but tags are used in other places besides just Chocolatey.org, and they are expected to be space separated. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0015.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0015.mdx new file mode 100644 index 00000000000..93dc0dfc012 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0015.mdx @@ -0,0 +1,25 @@ +--- +order: 15 +xref: cpmr0015 +title: CPMR0015 - Uninstall Script Named Incorrectly (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0015 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0016.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0016.mdx new file mode 100644 index 00000000000..5e28e913c45 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0016.mdx @@ -0,0 +1,40 @@ +--- +order: 16 +xref: cpmr0016 +title: CPMR0016 - Script Contains Usage of Installation Arguments (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0016 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In an automation script (`.ps1`/`.psm1`), the use of `chocolateyInstallArguments` was found. + +## Recommended Solution + +The package should instead use package parameters - see and an example package to review for how to add information to the description would be the [Git package](https://community.chocolatey.org/packages/git). + +## Reasoning + +InstallArguments is meant to be a transparent variable that is passed right to a Chocolatey install helper function. If it is called in the script it could be misused or changed. Therefore we don't allow it in scripts. + +Another pattern: + +```powershell +$installArguments = $env:chocolateyInstallArguments +if ([string]::IsNullOrEmpty($installArguments )) { + $installArguments = " /Q /IAcceptSQLServerLicenseTerms /ACTION=install /INSTANCEID=SQLEXPRESS /INSTANCENAME=SQLEXPRESS /UPDATEENABLED=FALSE " +} +``` + +This behavior is unnecessary as Chocolatey already does this in the background. All you need to do in the script is set the install arguments. + +```powershell +$installArguments = " /Q /IAcceptSQLServerLicenseTerms /ACTION=install /INSTANCEID=SQLEXPRESS /INSTANCENAME=SQLEXPRESS /UPDATEENABLED=FALSE " +``` + +The consumer will decide to override install arguments or append to the current set with `--install-arguments`/`--ia` and `--override-arguments`/`-o`, see the diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0017.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0017.mdx new file mode 100644 index 00000000000..992f8b6cd9f --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0017.mdx @@ -0,0 +1,25 @@ +--- +order: 17 +xref: cpmr0017 +title: CPMR0017 - Deprecated Packages Must Have A Dependency (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0017 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0018.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0018.mdx new file mode 100644 index 00000000000..8c41224a792 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0018.mdx @@ -0,0 +1,25 @@ +--- +order: 18 +xref: cpmr0018 +title: CPMR0018 - Install Script Shouldn't Call Uninstall Script (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0018 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0019.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0019.mdx new file mode 100644 index 00000000000..c445f27e2b0 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0019.mdx @@ -0,0 +1,23 @@ +--- +order: 19 +xref: cpmr0019 +title: CPMR0019 - Nuspec Contains Templated Values (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0019 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec, templates values that were added by Chocolatey CLI have been left in the file. These values are not considered to be valid information, and only a placeholder for what users can make use of. + +## Recommended Solution + +Any templated values given by Chocolatey CLI should be replaced with an appropriate value for the Software the Package is responsible for, or removed if no proper information is available. + +## Reasoning + +As these are informations given to users, having such invalid placeholders in the nuspec file only serves to confuse users and cause packages to be considered of bad quality. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0020.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0020.mdx new file mode 100644 index 00000000000..120d707e00a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0020.mdx @@ -0,0 +1,25 @@ +--- +order: 20 +xref: cpmr0020 +title: CPMR0020 - Nuspec Contains Email (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0020 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0021.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0021.mdx new file mode 100644 index 00000000000..21861033358 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0021.mdx @@ -0,0 +1,25 @@ +--- +order: 21 +xref: cpmr0021 +title: CPMR0021 - Operating System Index Files are packaged (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0021 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0022.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0022.mdx new file mode 100644 index 00000000000..6e902e55841 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0022.mdx @@ -0,0 +1,25 @@ +--- +order: 22 +xref: cpmr0022 +title: CPMR0022 - Comments Are Not Cleaned Up (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0022 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0023.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0023.mdx new file mode 100644 index 00000000000..49e5e12b075 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0023.mdx @@ -0,0 +1,23 @@ +--- +order: 23 +xref: cpmr0023 +title: CPMR0023 - Tags Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0023 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +Tags aid in categorization of packages and underlying software. Tags should be relevant to the software that is being installed. It will give folks more options when searching for particular software on the site and may turn up in results it may have not otherwise came up in. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0024.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0024.mdx new file mode 100644 index 00000000000..99d91a25a72 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0024.mdx @@ -0,0 +1,25 @@ +--- +order: 24 +xref: cpmr0024 +title: CPMR0024 - Prerelease information shouldn't be included as part of Package Id (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0024 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0025.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0025.mdx new file mode 100644 index 00000000000..cdfca5437d8 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0025.mdx @@ -0,0 +1,25 @@ +--- +order: 25 +xref: cpmr0025 +title: CPMR0025 - Source Control Ignore Files Are Packaged (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0025 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0026.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0026.mdx new file mode 100644 index 00000000000..d1effac1d29 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0026.mdx @@ -0,0 +1,25 @@ +--- +order: 26 +xref: cpmr0026 +title: CPMR0026 - Description Character Count Above 4000 (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0026 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0027.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0027.mdx new file mode 100644 index 00000000000..e7140709407 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0027.mdx @@ -0,0 +1,27 @@ +--- +order: 27 +xref: cpmr0027 +title: CPMR0027 - Checksum Should Be Used (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0027 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-warning: **WARNING** +> +> This rule has not yet been implemented in package-validator. There is an [open issue](https://github.com/chocolatey/home/issues/31) that is tracking this addition. + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0028.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0028.mdx new file mode 100644 index 00000000000..7f83220115a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0028.mdx @@ -0,0 +1,46 @@ +--- +order: 28 +xref: cpmr0028 +title: CPMR0028 - Scripts Do Not Download Software From FossHub (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0028 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +In automation scripts (`.ps1`/`.psm1`), the package has attempted to download software from FossHub. FossHub has expressed a desire for this not to happen. They offset the costs of bandwidth with ad revenue and cannot make up for those bandwidth costs when a script does the downloading instead of a human who visits the page to download the software. + +## Recommended Solution(s) + +### Option 1 - Alternative Official Locations + +Look for an alternative download location that is legitimate. + +### Option 2 - Embed if Software Vendor's License Allows (Recommended) + +Please check the licensing for the software to determine if it allows embedding the software directly in the package. This is redistribution rights that the vendor will grant directly or through the license for the software. Many open sources licenses allow redistribution without modification. + +Should you decide to embed, you will also need to include both a +VERIFICATION.txt and a LICENSE.txt file. To see what those look like, please run `choco new test` with a recent version of Chocolatey. + +Chocolatey packages on the community repository can be up to 150MB. + +### Option 3 - No Package for that Software on the Community Repository + +If there is no alternate location and the software vendor does not grant the right to embed, indirectly through licensing or directly through communication with them, then the package is not able to be hosted on the community site. + +## Reasoning + +Recently (02 DEC 2016), we learned that FossHub had a desire not to have packages download software from their site because it was causing them significant financial distress based on not being able to make up for the bandwidth costs with ad revenue. They have every right to make this request and the Chocolatey community has a due diligence to respect this. + +Many maintainers on the Chocolatey community side tend to err on the side of legal protection by downloading the software from the official distribution location (aka FossHub and other hosting locations), whether or not it is necessary - sometimes the licensing from software allows for redistribution. While not doing anything technically illegal by disambiguating the download location, it may violate FossHub's terms of use. While this is not technically a good steward on the community's part, violating terms of use is the lesser of issues compared to illegally redistributing software (redistribution without permission has a legal recourse). + +Since it is by far easier to just default to what provides the most protection, even if a software license allows otherwise, this is what folks were doing. It's the least common denominator. Right or wrong, it's human psychology. + +> :choco-info: **NOTE** +> +> We don't condone the way the message was conveyed nor the way that FossHub attacked Chocolatey when a community member simply asked for an alternative download location on the Audacity forums. Folks in the Chocolatey community should respect the wishes of FossHub and also refrain from name calling or other things that would reflect poorly on the community in general. I implore you to look past their methods of communicating the situation and only the message that has been conveyed - "Please help us keep our costs down by not using scripts to download software from our site." diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0029.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0029.mdx new file mode 100644 index 00000000000..47f752dafb9 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0029.mdx @@ -0,0 +1,25 @@ +--- +order: 29 +xref: cpmr0029 +title: CPMR0029 - Package Id Does Not End With .config (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0029 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0030.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0030.mdx new file mode 100644 index 00000000000..395ecd1c135 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0030.mdx @@ -0,0 +1,36 @@ +--- +order: 30 +xref: cpmr0030 +title: CPMR0030 - Description Contains Invalid Markdown Heading (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0030 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +## Issue + +The Description element of the package nuspec file contains invalid Markdown headings. For example, you may have this: + +``` +###This is my heading +``` +instead of: + +``` +### This is my heading +``` + +## Recommended Solution + +Please update the description element of the nuspec file to contain valid Markdown Headings. More information can be found [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#headers). + +## Reasoning + +The Chocolatey Community Repository uses the Markdig Library for parsing/rendering Markdown content. When invalid headings are used, the result looks like the following: + +![Example of invalid markdown from nuspec description rendering on the website](/images/moderation/invalid-markdown-rendering.png) + +A prior version of the Chocolatey Community Repository did support this way for writing headings, but it is not part of the official Markdown specification, and as such, we don't want any further invalid headings making their way into the repository. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0031.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0031.mdx new file mode 100644 index 00000000000..742289b59a7 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0031.mdx @@ -0,0 +1,43 @@ +--- +order: 31 +xref: cpmr0031 +title: CPMR0031 - Invalid URL (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0031 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + + + +## Issue + +In the nuspec, one of the URLs provided is invalid. Usually this means that the URL does not actually go to a website. + +The following URL's, if invalid, will be marked as a Note. + +* bugTrackerUrl - Note +* docsUrl - Note +* iconUrl - Note +* licenseUrl - Note +* mailingListUrl - Note +* packageSourceUrl - Note +* projectSourceUrl - Note +* projectUrl - Note +* wikiUrl - Note + +> :choco-info: **NOTE** +> +> Within the Description and ReleaseNotes elements, all URL's contained within them will be validated. + +## Recommended Solution + +Please update the incorrect field(s) so that it results in a valid URL. + +## Reasoning + +We expect that the URLs actually go to an existing URL + +## Troubleshooting + +We have worked through a number of issues where valid URL were actually being flagged as invalid. If you believe that a valid URL within your nuspec file is being flagged as invalid, please reply on the package moderation page, and a moderator can help investigate. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0032.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0032.mdx new file mode 100644 index 00000000000..6c76adbefb9 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0032.mdx @@ -0,0 +1,27 @@ +--- +order: 32 +xref: cpmr0032 +title: CPMR0032 - Description Character Count Below 30 (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0032 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) +## Issue + +In the nuspec the description is less than the required amount of characters. + +## Recommended Solution + +Update the description for the package to include a description that has more than 30 characters. + +## Reasoning + +It is not enough to just add a few words to the description. +The description should be sufficient enough to explain what the software that is packaged is, and why people should use the software. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0033.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0033.mdx new file mode 100644 index 00000000000..209a97af576 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0033.mdx @@ -0,0 +1,23 @@ +--- +order: 33 +xref: cpmr0033 +title: CPMR0033 - IconUrl Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0033 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +The nuspec is missing (or has commented out) the `iconUrl`, which points to an icon image for the underlying software the package is based on. If there is an existing icon/logo for the software, it should be included with the package. + +## Recommended Solution + +Add `url_here` to the nuspec following the . If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +We really want to see the IconUrl being used. It adds to the quality of the package when it has an icon to show. It is best to provide the icon from a source you control such as your GitHub repository, however GitHub raw is not intended to serve as a CDN. So please use a static CDN service. For further information on how to setup your icon with a CDN URL, please see . It's not as intuitive as you might hope. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0034.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0034.mdx new file mode 100644 index 00000000000..b696779bae6 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0034.mdx @@ -0,0 +1,32 @@ +--- +order: 34 +xref: cpmr0034 +title: CPMR0034 - Use of SourceForge (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0034 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In an automation script (`.ps1`/`.psm1`), the use of sourceforge was found for downloading software. It is not recommended to use SourceForge if an alternative, official distribution location is available. Unfortunately, some software is only available on SourceForge so this is a Guideline and not a Requirement. + +> :choco-info: **NOTE** +> +> You may not be able to change this and this is okay. + +> :choco-info: **NOTE** +> +> The search can also hit a false positive if it finds any of the following words in your automation scripts (`ps1`/`psm1`): +> * sourceforge + +## Recommended Solution + +Please find another official distribution point to download from if there is one. + +## Reasoning + +We've found that SourceForge has had some practices in recent times that are at odds with how we want to get software installed (malware free). Usually when installing silently, software doesn't also try to install crapware on a machine. This is not always so with the sourceforge wrapper that comes along with some of these downloads. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0035.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0035.mdx new file mode 100644 index 00000000000..e1e713136af --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0035.mdx @@ -0,0 +1,29 @@ +--- +order: 35 +xref: cpmr0035 +title: CPMR0035 - Use of Get-BinRoot (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0035 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Replace all uses of the cmdlet `Get-BinRoot` to use `Get-ToolsLocation` instead. + +## Reasoning + +The PowerShell cmdlet is badly named, and was replaced with a new cmdlet called `Get-ToolsLocation` instead. +The cmdlet is also deprecated in version 1.0.0 of Chocolatey and will be removed in version 2.0.0 so any calls +to the cmdlet should no longer be made. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0036.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0036.mdx new file mode 100644 index 00000000000..8c4dafe8e1b --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0036.mdx @@ -0,0 +1,25 @@ +--- +order: 36 +xref: cpmr0036 +title: CPMR0036 - Install-BinFile With No Remove-BinFile (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0036 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0037.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0037.mdx new file mode 100644 index 00000000000..437faa66fb1 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0037.mdx @@ -0,0 +1,34 @@ +--- +order: 37 +xref: cpmr0037 +title: CPMR0037 - Custom Action In Install With No Uninstall (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0037 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In automation scripts (`.ps1`/`.psm1`), the package has used one of the below items without also including a `chocolateyUninstall.ps1` to remove any thing changed by those items. + + * Install-ChocolateyPath + * Install-ChocolateyEnvironmentVariable + * Install-ChocolateyExplorerMenuItem + * Install-ChocolateyShortcut + * Install-ChocolateyFileAssociation + * Install-BinFile / Generate-BinFile / Add-BinFile + +> :choco-info: **NOTE** +> +> The search can also hit a false positive if it finds any of the above words in the package's automation scripts. + +## Recommended Solution + +Please add a `chocolateyUninstall.ps1` and reverse any install actions in the uninstall. + +## Reasoning + +The above items put the computer/machine they are installing to in a certain state. When the package is removed or uninstalled, the underlying changes to the machine should go away as well. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0038.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0038.mdx new file mode 100644 index 00000000000..b08496161fc --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0038.mdx @@ -0,0 +1,25 @@ +--- +order: 38 +xref: cpmr0038 +title: CPMR0038 - LicenseUrl Matches ProjectUrl (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0038 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0039.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0039.mdx new file mode 100644 index 00000000000..dffcc1f6c84 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0039.mdx @@ -0,0 +1,23 @@ +--- +order: 39 +xref: cpmr0039 +title: CPMR0039 - LicenseUrl Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0039 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +It is strongly encouraged to let folks know what licensing the particular underlying software from installing the package will carry so that decisions can be made ahead of time if it fits within the parameters of what the user can use depending on the setting they are in. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0040.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0040.mdx new file mode 100644 index 00000000000..46d2e0f2261 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0040.mdx @@ -0,0 +1,23 @@ +--- +order: 40 +xref: cpmr0040 +title: CPMR0040 - PackageSourceUrl Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0040 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, a `` was not found to exist. This is the url to the chocolatey package repository, not the software (unless they are the same). + +## Recommended Solution + +Please add `packageSourceUrl`, pointing to the url where the Chocolatey package source resides. You must use `choco pack` with at least version [0.9.9.7](https://docs.chocolatey.org/en-us/choco/release-notes#june-20-2015) (see [#205](https://github.com/chocolatey/choco/issues/205)) to do this. Using NuGet or `nuget.exe` will error on this element. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +`packageSourceUrl` allows potential collaborators to easily find your package source so they can provide fixes. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0041.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0041.mdx new file mode 100644 index 00000000000..0893088af81 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0041.mdx @@ -0,0 +1,25 @@ +--- +order: 41 +xref: cpmr0041 +title: CPMR0041 - ProjectSourceUrl Matches ProjectUrl (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0041 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0042.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0042.mdx new file mode 100644 index 00000000000..940e882b24f --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0042.mdx @@ -0,0 +1,23 @@ +--- +order: 42 +xref: cpmr0042 +title: CPMR0042 - ReleaseNotes Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0042 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that as a comparison to your current package (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +The release notes field gives folks a way of knowing what has changed between versions of the software (and sometimes related to packaging changes). diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0043.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0043.mdx new file mode 100644 index 00000000000..77f26f9ea1d --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0043.mdx @@ -0,0 +1,25 @@ +--- +order: 43 +xref: cpmr0043 +title: CPMR0043 - Script Is Too Long (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0043 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0044.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0044.mdx new file mode 100644 index 00000000000..0765250d633 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0044.mdx @@ -0,0 +1,25 @@ +--- +order: 44 +xref: cpmr0044 +title: CPMR0044 - Script Contains Install-ChocolateyDesktopLink (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0044 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0045.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0045.mdx new file mode 100644 index 00000000000..a122e7e3cde --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0045.mdx @@ -0,0 +1,25 @@ +--- +order: 45 +xref: cpmr0045 +title: CPMR0045 - Script Contains Write-Chocolatey* Method (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0045 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0046.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0046.mdx new file mode 100644 index 00000000000..86143c70a35 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0046.mdx @@ -0,0 +1,25 @@ +--- +order: 46 +xref: cpmr0046 +title: CPMR0046 - Script Contains Start-Process (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0046 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0047.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0047.mdx new file mode 100644 index 00000000000..250e5ec6730 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0047.mdx @@ -0,0 +1,23 @@ +--- +order: 47 +xref: cpmr0047 +title: CPMR0047 - Summary Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0047 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +The summary gives a high level explanation that is a sentence explaining what the software is. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0048.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0048.mdx new file mode 100644 index 00000000000..7f1b8977398 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0048.mdx @@ -0,0 +1,23 @@ +--- +order: 48 +xref: cpmr0048 +title: CPMR0048 - Tags Contain Chocolatey (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0048 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, there is a `` element that contains `chocolatey` as one of the values. + +## Recommended Solution + +Please update the nuspec to remove `chocolatey` from the list of tags. + +## Reasoning + +Tags are about the underlying software. If that software has little or nothing to do with Chocolatey, there is no reason to carry the `chocolatey` tag. The `chocolatey` tag is specifically for things that are about Chocolatey and its framework, not about packages that can be installed with Chocolatey. If the purpose was for packages that are Chocolatey compatible, every package on https://community.chocolatey.org/packages would contain `chocolatey` for a tag and thus reduce the usefulness of the tag. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0049.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0049.mdx new file mode 100644 index 00000000000..e23fc9e1cbd --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0049.mdx @@ -0,0 +1,23 @@ +--- +order: 49 +xref: cpmr0049 +title: CPMR0049 - Title Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0049 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + + + +## Issue + +In the nuspec, there is a `` element. It was found to be missing or empty in the package. + +## Recommended Solution + +Please update the nuspec to include a `<title />` element that is non-empty. If your nuspec file is missing this field, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +A title is a more description version of your package id - where your package id may be something like `jjb` - the title would be `Jenkins Job Builder`. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0050.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0050.mdx new file mode 100644 index 00000000000..717c65ab9d6 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0050.mdx @@ -0,0 +1,27 @@ +--- +order: 50 +xref: cpmr0050 +title: CPMR0050 - Title Matches Id (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0050 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-warning: **WARNING** +> +> There was a bug where it was not taking case into account. We've fixed the bug, but you may end up here - https://github.com/chocolatey/home/issues/32 + +## Issue + +In the nuspec, the id of the package `<id />` was found to match exactly with `<title />`. + +## Recommended Solution + +In the nuspec, ensure the `<id />` is completely lowercase (e.g. "`thispackage`") and the `<title />` uses title case (e.g. "`This Package`"). + +## Reasoning + +In general, the id should be lowercase ("`thispackage`") and a title should have title case ("`ThisPackage`"). The names may match, but what we are generally searching for is whether someone has ran the template generation and then forgotten to update the title in the nuspec to something more appropriate. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0051.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0051.mdx new file mode 100644 index 00000000000..23273e8798b --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0051.mdx @@ -0,0 +1,27 @@ +--- +order: 51 +xref: cpmr0051 +title: CPMR0051 - More Than 3 Installation Scripts (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0051 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning + +If a package is doing all kinds of complicated things, that could be better served as an enhancement to Chocolatey helpers to reduce the amount of work necessary by a given package. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0052.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0052.mdx new file mode 100644 index 00000000000..b016bbdc479 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0052.mdx @@ -0,0 +1,29 @@ +--- +order: 52 +xref: cpmr0052 +title: CPMR0052 - Dependency With No Version (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0052 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-warning: **WARNING** +> +> There is a bug with this check - https://github.com/chocolatey/home/issues/33 + +If you have implemented the recommended fixes, you should see this go away on checks after this has been corrected. + +## Issue + +In the nuspec, you have a dependency on another package without at the very least a minimum version. + +## Recommended Solution + +Version-less dependencies are not recommended now that choco will resolve the latest version of a package. Please add at the very least the minimum version (also known as the lower bound) of the package you depend on. Note how version ranges work, see http://docs.nuget.org/Create/versioning#Specifying-Version-Ranges-in-.nuspec-Files + +## Reasoning + +At a point in history, NuGet would always get the oldest version of a package that would meet the version range that was specified. When you didn't specify a version, it would get the latest possible version. Once choco 0.9.9+ came out, it flipped NuGet to always getting the most recent version of a package that satisfied a dependency. It's considered incorrect to not at the very least specify a minimum version that would meet a dependency. This way it is more explicit. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0053.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0053.mdx new file mode 100644 index 00000000000..c9d3b130c7e --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0053.mdx @@ -0,0 +1,25 @@ +--- +order: 53 +xref: cpmr0053 +title: CPMR0053 - Deprecated Package Title Should Start With [Deprecated] (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0053 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0054.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0054.mdx new file mode 100644 index 00000000000..12ba5b4ab56 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0054.mdx @@ -0,0 +1,25 @@ +--- +order: 54 +xref: cpmr0054 +title: CPMR0054 - Nuspec File Should Be UTF-8 (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0054 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0055.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0055.mdx new file mode 100644 index 00000000000..58be8e4ea01 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0055.mdx @@ -0,0 +1,27 @@ +--- +order: 55 +xref: cpmr0055 +title: CPMR0055 - Script Uses Custom Downloaders (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0055 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +0.9.10 supports passing headers to Get-ChocolateyWebFile and other methods that download. + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0056.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0056.mdx new file mode 100644 index 00000000000..aa712f45bcd --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0056.mdx @@ -0,0 +1,36 @@ +--- +order: 56 +xref: cpmr0056 +title: CPMR0056 - Invalid URL (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0056 +ruleType: Guideline +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleGuideline from '@components/docs/PackageValidatorRuleGuideline.mdx'; + +<PackageValidatorRuleGuideline /> + +## Issue + +In the nuspec, one of the URLs provided is invalid. Usually this means that the URL does not actually go to a website. + +The following URL's, if invalid, will be marked as a Guideline (would be good if it could be fixed). + +* description - Guideline +* releaseNotes - Guideline + +> :choco-info: **NOTE** +> +> Within the Description and ReleaseNotes elements, all URL's contained within them will be validated. + +## Recommended Solution + +Please update the incorrect field(s) so that it results in a valid URL. + +## Reasoning + +We expect that the URLs actually go to an existing URL + +## Troubleshooting + +We have worked through a number of issues where valid URL were actually being flagged as invalid. If you believe that a valid URL within your nuspec file is being flagged as invalid, please reply on the package moderation page, and a moderator can help investigate. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0057.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0057.mdx new file mode 100644 index 00000000000..1ae108b6370 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0057.mdx @@ -0,0 +1,37 @@ +--- +order: 57 +xref: cpmr0057 +title: CPMR0057 - Nuspec Enhancements Missing (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0057 +ruleType: Suggestion +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleSuggestion from '@components/docs/PackageValidatorRuleSuggestion.mdx'; + +<PackageValidatorRuleSuggestion /> + +## Issue + +The nuspec is missing the recent enhancements that give consumers information related to the underlying software. + +## Recommended Solution + +Please update the nuspec to contain one or more of the following: + + * `docsUrl` - points to the location of the wiki or docs of the software + * `mailingListUrl` - points to the forum or email list group for the software + * `bugTrackerUrl` - points to the location where issues and tickets can be accessed + * `packageSourceUrl` - points to the location of your chocolatey package files in source (e.g. `https://github.com/chocolatey-community/chocolatey-packages`) + * `projectSourceUrl` - points to the location of the underlying software source + +> :choco-info: **NOTE** +> +> You must use `choco pack` with at least version [0.9.9.7](https://docs.chocolatey.org/en-us/choco/release-notes#june-20-2015) (see [#205](https://github.com/chocolatey/choco/issues/205)) to use these elements. Using NuGet or `nuget.exe` will error on this element. + +> :choco-info: **NOTE** +> +> If your nuspec file is missing these fields, you should run `choco new testpkg` and look at the output from that (ensure you have the [latest version of Chocolatey](https://community.chocolatey.org/packages?q=id%3Achocolatey)). + +## Reasoning + +This provides folks with more information related to the software itself and gives folks a quick location reference to start from when attempting to find more information related to a project. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0058.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0058.mdx new file mode 100644 index 00000000000..b1890f3daad --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0058.mdx @@ -0,0 +1,25 @@ +--- +order: 58 +xref: cpmr0058 +title: CPMR0058 - Use PNG or SVG for package icons (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0058 +ruleType: Suggestion +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleSuggestion from '@components/docs/PackageValidatorRuleSuggestion.mdx'; + +<PackageValidatorRuleSuggestion /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0059.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0059.mdx new file mode 100644 index 00000000000..7d8fa9b6c13 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0059.mdx @@ -0,0 +1,27 @@ +--- +order: 59 +xref: cpmr0059 +title: CPMR0059 - Don't Use Get-WmiObject For Finding Installed Packages (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0059 +ruleType: Suggestion +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleSuggestion from '@components/docs/PackageValidatorRuleSuggestion.mdx'; + +<PackageValidatorRuleSuggestion /> + +## Issue + +In an automation script (`.ps1`/`.psm1`), you used `Win32_Product`. This can cause serious performance issues and have an adverse affect on Windows. + +## Recommended Solution + +Instead do a registry search under Uninstaller to see if the application is installed. + +## Reasoning + +"Win32_Product" forces Windows Installer to reconfigure every application installed through MSI (see Windows event log). Depending on installed applications it may take more than 30 minutes to execute a request. + +* http://gregramsey.net/2012/02/20/win32_product-is-evil/ +* https://sdmsoftware.com/group-policy-blog/wmi/why-win32_product-is-bad-news/ +* http://csi-windows.com/toolkit/win32product-replacement diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0060.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0060.mdx new file mode 100644 index 00000000000..910d402f09f --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0060.mdx @@ -0,0 +1,39 @@ +--- +order: 60 +xref: cpmr0060 +title: CPMR0060 - Binaries Included (package) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0060 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +## Issue + +In the package, you have included binaries that match one of the following extensions: + +* exe +* msi +* msu +* msp +* dll +* 7z +* zip +* gz +* tar +* rar +* sfx +* iso +* dmg +* so +* jar + +## Recommended Solution + +Please remove the binaries or update the package with a <Xref title="license file" value="cpmr0005" /> and a <Xref title="verification file" value="cpmr0006" />. + +## Reasoning + +If you include binaries in the package, even if you are the software vendor, you need to include confirmation of the right to distribute and verification that the files are legitimate. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0061.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0061.mdx new file mode 100644 index 00000000000..487a7484f12 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0061.mdx @@ -0,0 +1,25 @@ +--- +order: 61 +xref: cpmr0061 +title: CPMR0061 - Id Contains "." (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0061 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +## Issue + +The package id includes dots and has not been found to be an `*.install`/`*.portable` package. + +## Recommended Solution + +If this is a new package that has never been approved, moderators will review and reject the package for one that will be pushed with a new id that meets the <Xref title="package naming guidelines" value="create-packages" anchor="naming-your-package" />. + +If this is an already existing package, there is really nothing you can do at this time aside from deprecate the current package in favor of a newly created one. Please see <Xref title="deprecating a package" value="deprecate-a-package" /> + +## Reasoning + +Naming should be consistent for packages on the community feed so it's easy to understand. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0062.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0062.mdx new file mode 100644 index 00000000000..ddcf5d6bb9a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0062.mdx @@ -0,0 +1,25 @@ +--- +order: 62 +xref: cpmr0062 +title: CPMR0062 - Chocolatey Dependency (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0062 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0063.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0063.mdx new file mode 100644 index 00000000000..c4485dabb7e --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0063.mdx @@ -0,0 +1,25 @@ +--- +order: 63 +xref: cpmr0063 +title: CPMR0063 - Usage of WScript (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0063 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0064.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0064.mdx new file mode 100644 index 00000000000..8e98325ca49 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0064.mdx @@ -0,0 +1,25 @@ +--- +order: 64 +xref: cpmr0064 +title: CPMR0064 - Usage of .CreateShortcut (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0064 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0065.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0065.mdx new file mode 100644 index 00000000000..73fcccb29cf --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0065.mdx @@ -0,0 +1,25 @@ +--- +order: 65 +xref: cpmr0065 +title: CPMR0065 - Usage of Rundll32 (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0065 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0066.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0066.mdx new file mode 100644 index 00000000000..bb3a241743a --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0066.mdx @@ -0,0 +1,25 @@ +--- +order: 66 +xref: cpmr0066 +title: CPMR0066 - Usage of msiexec (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0066 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In an automation script (`.ps1`/`.psm1`), + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0067.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0067.mdx new file mode 100644 index 00000000000..85ff6a016e8 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0067.mdx @@ -0,0 +1,25 @@ +--- +order: 67 +xref: cpmr0067 +title: CPMR0067 - notSilent tag is being used (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0067 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0068.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0068.mdx new file mode 100644 index 00000000000..7480ed4e3dc --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0068.mdx @@ -0,0 +1,25 @@ +--- +order: 68 +xref: cpmr0068 +title: CPMR0068 - Author Does Not Match Maintainer (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0068 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0069.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0069.mdx new file mode 100644 index 00000000000..4cec3e1e041 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0069.mdx @@ -0,0 +1,25 @@ +--- +order: 69 +xref: cpmr0069 +title: CPMR0069 - Package Id is too long, and doesn't contain dashes (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0069 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +## Issue + +The package id is longer than 20 characters but does not include dashes (`-`) to break up the words to make it readable. + +## Recommended Solution + +If this is a new package that has never been approved, moderators will review and reject the package for one that will be pushed with a new id that meets the <Xref title="package naming guidelines" value="create-packages" anchor="naming-your-package" />. + +If this is an already existing package, there is really nothing you can do at this time aside from deprecate the current package in favor of a newly created one. Please see <Xref title="deprecating a package" value="deprecate-a-package" /> + +## Reasoning + +A name for a package id should be easily understandable. When it becomes really long with no breaks, it makes it hard to understand on first view where each word is. Consider that when folks see a package id, it will be in lowercase, e.g. `this-package-id` is easier to digest than `thispackageid`. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0070.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0070.mdx new file mode 100644 index 00000000000..aa753457105 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0070.mdx @@ -0,0 +1,25 @@ +--- +order: 70 +xref: cpmr0070 +title: CPMR0070 - Package Id uses underscores (nuspec) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0070 +ruleType: Note +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleNote from '@components/docs/PackageValidatorRuleNote.mdx'; + +<PackageValidatorRuleNote /> + +> :choco-info: **NOTE** +> +> This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Community Chat](https://ch0.co/community) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0071.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0071.mdx new file mode 100644 index 00000000000..d3188529753 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0071.mdx @@ -0,0 +1,24 @@ +--- +order: 71 +xref: cpmr0071 +title: CPMR0071 - Script uses commercial cmdlets (script) +description: Information on how to remediate the Chocolatey Package Moderation Rule 0071 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + +<PackageValidatorRuleRequirement /> + +## Issue + +In an automation script (`.ps1`/`.psm1`), one or more calls to a licensed function that is only available in licensed editions of Chocolatey, is being used. + +## Recommended Solution + +Please do not use licensed features when creating packages that you will submit to the Chocolatey Community Repository. Update all automation scripts to use functions that are available in open-source Chocolatey. + +## Reasoning + +Packages created with licensed features should not be made available in the Chocolatey Community Repository and are intended for use by organizations hosting their own internal package repository. +All packages submitted to the Chocolatey Community Repository are for the community and should work on all editions of Chocolatey. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0072.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0072.mdx new file mode 100644 index 00000000000..3b495752c88 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0072.mdx @@ -0,0 +1,42 @@ +--- +order: 72 +xref: cpmr0072 +title: CPMR0072 - Usage of Private Environment Variables +description: Information on how to remediate the Chocolatey Package Moderation Rule 0072 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + +<PackageValidatorRuleRequirement /> + +## Issue + +In an automation script (`.ps1`/`.psm1`) the scripts make use of either reading or writing private environment variables that should only be used by Chocolatey CLI helpers and not the automation scripts themselves. + +## Recommended Solution + +Remove any use of the following environment variables in the automation scripts. + +- `chocolateyToolsLocation` +- `chocolateyBinRoot` +- `chocolatey_bin_root` +- `chocolateyPackageFolder` +- `packageFolder` +- `chocolateyChecksum32` +- `chocolateyChecksum64` +- `chocolateyChecksumType32` +- `chocolateyChecksumType64` +- `downloadCacheAvailable` + +### Chocolatey Tools Location + +Any usages of the `chocolateyToolsLocation`, `chocolateyBinRoot`, or `chocolatey_bin_root` can be replaced with a call to <Xref title="Get-ToolsLocation" value="get-toolslocation" />. The `Get-ToolsLocation` helper is a wrapper that will provide the same information as directly reading the environment variable, but it also ensures that the variable is created if it did not previously exist. + +### Chocolatey Package Folder + +Replace usages of `chocolateyPackageFolder` or `packageFolder` with `Get-ChocolateyPath -PathType 'PackagePath'`. See the documentation for <Xref title="Get-ChocolateyPath" value="get-chocolateypath" /> for more information on the helper. + +## Reasoning + +The variables are used by the Chocolatey CLI helpers by including additional support and should not be used by the automation scripts themselves. diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0073.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0073.mdx new file mode 100644 index 00000000000..dd9a1ec7342 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/cpmr0073.mdx @@ -0,0 +1,34 @@ +--- +order: 73 +xref: cpmr0073 +title: CPMR0073 - Script do not validate downloaded files +description: Information on how to remediate the Chocolatey Package Moderation Rule 0073 +ruleType: Requirement +--- +import Xref from '@components/Xref.astro'; +import PackageValidatorRuleRequirement from '@components/docs/PackageValidatorRuleRequirement.mdx'; + +<PackageValidatorRuleRequirement /> + +## Issue + +In an automation script (`.ps1`/`.psm1`), one or more calls that downloads files from a remote location are used without verifying the checksums of these files. + +The following helper functions are currently being validated by this rule, with possibly more being added in the future. + +- <Xref title="`Install-ChocolateyPackage`" value="install-chocolateypackage" /> - If the `Url` parameter is used, the associated `Checksum` parameter is additionally set (For 64bit this would be `Url64` / `Url64bit` and `Checksum64`). +- <Xref title="`Install-ChocolateyZipPackage`" value="install-chocolateyzippackage" /> - If the `Url` parameter is used, the associated `Checksum` parameter is additionally set (For 64bit this would be `Url64` / `Url64bit` and `Checksum64`). +- <Xref title="`Get-ChocolateyWebFile`" value="get-chocolateywebfile" /> - If the `Url` parameter is used, the associated `Checksum` parameter is additionally set (For 64bit this would be `Url64` / `Url64bit` and `Checksum64`). +- <Xref title="`Install-ChocolateyPowershellCommand`" value="install-chocolateypowershellcommand" /> - If the `Url` parameter is used, the associated `Checksum` parameter is additionally set (For 64bit this would be `Url64` / `Url64bit` and `Checksum64`). +- <Xref title="`Install-ChocolateyVsixPackage`" value="install-chocolateyvsixpackage" /> - If the `VsixUrl` / `Url` parameter is used, the associated `Checksum` parameter is additionally set. +- <Xref title="`Get-WebFile`" value="get-webfile" /> - A low-level download of a single file that should generally be avoided unless necessary, requires an additional call to `Get-ChecksumValid` using the same file name specified for the output. +- <Xref title="`Get-FtpFile`" value="get-ftpfile" /> - A low-level download of a single file that should generally be avoided unless necessary, requires an additional call to `Get-ChecksumValid` using the same file name specified for the output. + +## Recommended Solution + +Update all calls to helper functions that download files from a remote location to include the use of their respective `Checksum` property, or make a call to `Get-ChecksumValid` if no such parameter exists. + +## Reasoning + +All packages on the Chocolatey Community Repository should aim to be as safe and resilient as possible. +Adding a checksum when downloading remote files helps with the security that the file is the same as the maintainer created the package for, and it has not been changed during the request. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/moderation/package-validator/rules/index.mdx b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/index.mdx new file mode 100644 index 00000000000..338d9adbca0 --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-validator/rules/index.mdx @@ -0,0 +1,40 @@ +--- +order: 10 +xref: package-validator-rules +title: Package Validator Rules +description: Information on the Package Validator rules +hideChildPages: true +--- +import Xref from '@components/Xref.astro'; +import Children from '@components/Children.astro'; + +There are 4 different types of Package Validator rules: + +- [Requirements](#requirements) +- [Guidelines](#guidelines) +- [Suggestions](#suggestions) +- [Notes](#notes) + +## Requirements + +Requirements represent the minimum quality of a package that is acceptable. When a package version has failed requirements, the package version requires fixing and/or response by the maintainer. Provided a Requirement has flagged correctly, it must be fixed before the package version can be approved. The exact same version should be uploaded during moderation review. + +<Children filter="ruleType" value="Requirement" /> + +## Guidelines + +Guidelines are strong suggestions that improve the quality of a package version. These are considered something to fix for next time to increase the quality of the package. Over time Guidelines can become Requirements. A package version can be approved without addressing Guideline comments but will reduce the quality of the package. + +<Children filter="ruleType" value="Guideline" /> + +## Suggestions + +Suggestions are either newly introduced items that will later become Guidelines or items that don't carry enough weight to become a Guideline. Either way, they should be considered. A package version can be approved without addressing Suggestion comments. + +<Children filter="ruleType" value="Suggestion" /> + +## Notes + +Notes typically flag things for both you and the reviewer to go over. Sometimes this is the use of things that may or may not be necessary given the constraints of what you are trying to do and/or are harder for automation to flag for other reasons. Items found in Notes might be Requirements depending on the context. A package version can be approved without addressing Note comments. + +<Children filter="ruleType" value="Note" /> diff --git a/src/content/docs/en-us/community-repository/moderation/package-verifier.mdx b/src/content/docs/en-us/community-repository/moderation/package-verifier.mdx new file mode 100644 index 00000000000..2571fd45c3e --- /dev/null +++ b/src/content/docs/en-us/community-repository/moderation/package-verifier.mdx @@ -0,0 +1,78 @@ +--- +order: 20 +xref: package-verifier-service +title: Package Verifier Moderation Service +description: Information on the Package Verifier Moderation Service +--- +import Xref from '@components/Xref.astro'; + +Here you will find a collection of more information and resources for when things fail verification. + +## What is the verifier? + +The verifier is a service that checks the correctness (that the package actually works), that it installs and uninstalls correctly, has the right dependencies to ensure it is installed properly and can be installed silently. The verifier runs against both submitted packages and existing packages (checking every two weeks that a package can still install and sending notice when it fails). We like to think of the verifier as integration testing. It’s testing all the parts and ensuring everything is good. On the [community feed](https://chocolatey.org), you can see the current status of a package based on a little colored ball next to the title. If the ball is green or red, the ball is a link to the results (only on the package page, not in the list screen). + +* Green means good. The ball is a link to the results +* Orange if still pending verification (has not yet run). +* Red means it failed verification for some reason. The ball is a link to the results. +* Grey means unknown or excluded from verification (if excluded, a reason will be listed on the package page). + +## Specifications + +> :choco-info: **NOTE** +> +> We currently run against only one system. This was chosen as it will install almost all Chocolatey packages. We will be adding multiple systems in the future. + +The systems we run against: +* Windows Server 2012 R2 x64 + * It's a completely stock machine, no Windows updates applied. No hotfixes. Imagine that you took the image and ran it without applying any Windows updates. + * Has very limited things installed (bitvise sshd, git, notepad++, 7zip) + * The Printer Spooler Service is stopped and disabled. This can cause problems for packages that deal with software that relates to anything to do with printing, i.e. printing of PDF files. + + +## How can I bypass the verifier? + +If your package needs to be exempted, please contact the site admins on the package page of the package that needs the bypass. + +## How does the verifier work? + +### Prerequisites + +The verifier has the following prerequisites for it to work: + +* VirtualBox installed (4.3.x series - the verifier box has 4.3.28 installed) +* Vagrant installed (right now 1.7.4 is recommended) +* Vagrant sahara plugin installed +* Vagrant box `win2012r2x64` available +* A Windows machine that can run 64bit virtual boxes. Usually a physical machine can do this. Others require vt-x + +### What the verifier does at a high level + +1. Checks for packages ready to be tested. +1. Runs vagrant controlling a clean windows box to test. Limits the execution of the install/uninstall commands to 20 minutes each. +1. Submits the results to a GitHub gist. +1. Submits those results with pass/fail back to https://chocolatey.org. + +#### Vagrant Testing + +> :choco-info: **NOTE** +> +> You can repeat the testing of the verifier at https://github.com/chocolatey/chocolatey-test-environment + +##### Box Prep +* Copy `PrepareMachine.ps1` to `VagrantAction.ps1` +* Run `vagrant up` +* Run `vagrant sandbox on` + +##### Steps For Each Package +* Run `vagrant sandbox rollback` +* Copy `ChocolateyAction.ps1` to `VagrantAction.ps1` - replace `{{action}}` with `install`, `{{package}}`, and `{{version}}` and forcex86. +* Run `vagrant provision` - capture output (this is the install 32bit log), note the exit code. +* Copy `ChocolateyAction.ps1` to `VagrantAction.ps1` - replace `{{action}}` with `upgrade`, `{{package}}`, and `{{version}}` and forcex86. +* Run `vagrant provision` - capture output (this is the upgrade log), note the exit code. +* Run `vagrant sandbox rollback` +* Copy `ChocolateyAction.ps1` to `VagrantAction.ps1` - replace `{{action}}` with `install`, `{{package}}`, and `{{version}}`. +* Run `vagrant provision` - capture output (this is the install log), note the exit code. +* Copy `ChocolateyAction.ps1` to `VagrantAction.ps1` - replace `{{action}}` with `uninstall`, `{{package}}`, and `{{version}}`. +* Run `vagrant provision` - capture output (this is the uninstall log), note the exit code. +* Run `vagrant sandbox rollback` to set the machine ready. diff --git a/src/content/docs/en-us/community-repository/script-builder.mdx b/src/content/docs/en-us/community-repository/script-builder.mdx new file mode 100644 index 00000000000..185cd913c30 --- /dev/null +++ b/src/content/docs/en-us/community-repository/script-builder.mdx @@ -0,0 +1,82 @@ +--- +order: 25 +xref: script-builder +title: Script Builder +description: Features and benefits of Script Builder +--- +import Xref from '@components/Xref.astro'; + +Script Builder allows you to bulk install Chocolatey packages in just a few clicks by providing clear, step-by-step instructions, on how to get packages into your environment quickly and easily using generated scripts. Just add packages to the builder and choose your integration method to get started. + +> :choco-info: **NOTE** +> +> Packages selected in Script Builder, the [internal repository url](#internal-repository-url) provided, and your selected integration method are saved within the browser on your computer and will not be available on other computers. + +## Adding and removing packages + +> :choco-info: **NOTE** +> +> Package versions are always included in generated scripts. In a future release, a toggle will be provided to remove version numbers. + +Packages can be added or removed from Script Builder virtually anywhere: + +1. From the main list of packages. + ![Add package from list of packages](/images/script-builder/sb-add-list.jpg) + +1. From the individual package page. + ![Add package from the package details page](/images/script-builder/sb-add-package-page.jpg) + +1. And even from the version history table on the individual package page. Multiple versions of the same package cannot be added to Script Builder. + ![Add package from the version history table](/images/script-builder/sb-add-version.jpg) + +## Specifics for Individual Use + +When using Script Builder for individual use, follow these steps: + +1. Review your packages. +1. Verify your chosen integration method. +1. Choose to copy the installation script or download as a `.config` file. + +![Script Builder individual use](/images/script-builder/sb-individual.gif) + +## Specifics for Organizational Use + +> :choco-warning: **WARNING** +> +> The organizational use of the Chocolatey Community Repository is not recommended. Please see how to setup <Xref title="Chocolatey for internal / organizational use" value="organizational-deployment-guide" />. + +When using Script Builder for an organization, follow these steps: + +1. Review your packages. +1. Verify your chosen [integration method](#integration-methods). Choose from a generic PowerShell, Ansible, Chef, PowerShell DSC, or Puppet script. +1. Enter your [internal repository url](#internal-repository-url). +1. Get the [packages into your environment](#environment-setup). +1. Copy the installation scripts and configuration scripts. + +![Script Builder organizational use](/images/script-builder/sb-organization.gif) + +### Integration Methods + +Currently, Script Builder provides installation and configuration scripts as a generic PowerShell script as well as Ansible, Chef, PowerShell DSC, and Puppet. + +### Internal Repository Url + +The Internal Repository Url is the location of your internal package repository. Read over <Xref title="How To Set Up an Internal Repository" value="host-packages" /> for options and more information on using Artifactory Pro, Nexus, and ProGet. + +> :choco-danger: **IMPORTANT** +> +> An Internal Repository Url is required and you will not be able to proceed with further steps in Script Builder until one is supplied. + +![Internal Repository Url](/images/script-builder/sb-internal-url.jpg) + +### Environment Setup + +Script Builder provides the instructions on how to get your selected packages into your specific environment. + +> :choco-info: **NOTE** +> +> When choosing to bulk download packages from this step, your browser may block multiple pop-ups, resulting in only 1 package being downloaded. To avoid this, be sure to add community.chocolatey.org to your list of approved sites to allow pop-ups and redirects. + +## We want your feedback! + +Have you found an issue or wish there was a specific feature included in Script Builder? Help us out and [file an issue on GitHub](https://github.com/chocolatey/home/issues). \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/users/index.mdx b/src/content/docs/en-us/community-repository/users/index.mdx new file mode 100644 index 00000000000..2e5e38d3887 --- /dev/null +++ b/src/content/docs/en-us/community-repository/users/index.mdx @@ -0,0 +1,9 @@ +--- +order: 30 +xref: users +title: Users +description: Information for the consumers of packages from the Chocolatey Community Repository +--- +import Xref from '@components/Xref.astro'; + +If you are a user of, or a consumer of packages from, the Chocolatey Community Repository, then the information below will help you understand more about the repository, the packages available and the processes we use. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/users/package-request.mdx b/src/content/docs/en-us/community-repository/users/package-request.mdx new file mode 100644 index 00000000000..e2b0d1db2d4 --- /dev/null +++ b/src/content/docs/en-us/community-repository/users/package-request.mdx @@ -0,0 +1,29 @@ +--- +order: 40 +xref: package-request +title: How To Request a New Package +description: How to request a new package for the Chocolatey Community Repository. +--- +import Xref from '@components/Xref.astro'; + +If you are looking for a package to be added to the [Chocolatey Community Repository](https://community.chocolatey.org/packages) then there are a few options. + +## I Want To Create a Package For the Chocolatey Community Repository + +It's easy to <Xref title="create and maintain packages" value="create-packages" />. + +## I Want Somebody Else To Create a Package For the Chocolatey Community Repository + +> :choco-info: **NOTE** +> +> A few things to note: +> +> * Chocolatey Software does not create or maintain packages on the Chocolatey Community Repository. +> * Many members of the Chocolatey Team are also long-term members of the Chocolatey Community and maintain packages in their own time. +> * Packages on the Chocolatey Community Repository are created and maintained by volunteer Maintainers in their spare time, or by <Xref title="Software Vendors or Authors" value="software-vendor" />. +> * There is no obligation on _any_ Maintainer to pick up the package request and create a package. +> * The best way to get the package you want, is to <Xref title="join the Community, to create and maintain it yourself" value="create-packages" />. + +When it comes to community packages, we really want packages to be created by those who are using the software. So when you are asking for others to add packages, please consider that it may be better for you to keep the package up to date than someone else who may not be invested in ensuring it stays updated. + +Raise a **Request For Package (RFP)** request on the [Chocolatey Package Requests](https://github.com/chocolatey/chocolatey-package-requests) repository. A Repository Administrator will review the request and make it available for Maintainers to pick up. diff --git a/src/content/docs/en-us/community-repository/users/package-triage-process.mdx b/src/content/docs/en-us/community-repository/users/package-triage-process.mdx new file mode 100644 index 00000000000..703dcf857b7 --- /dev/null +++ b/src/content/docs/en-us/community-repository/users/package-triage-process.mdx @@ -0,0 +1,67 @@ +--- +order: 20 +xref: package-triage-process +title: Package Triage Process +description: The package triage process for Chocolatey Community Repository packages. +--- +import Xref from '@components/Xref.astro'; + +The [Chocolatey Community Repository](https://community.chocolatey.org/packages) has a collection of packages provided and maintained by the Community. You may have come across a package and found you have questions, or you have found it outdated or broken. You will find help with this below. + +> :choco-info: **NOTE** +> +> If you are a **Software Vendor/Author** wanting to maintain your software's packages, please see the <Xref title="Software Vendor/Author information on the Chocolatey Community Repository" value="software-vendor" />. + +## Package Is Outdated? + +Be sure of: + +1. If the package contains stable releases, the newer version is a stable release and not a prerelease (such as alpha or beta). +1. The newer version that is available, is for Windows. Sometimes the release of the Windows version may lag behind availability on other platforms. +1. Check the description on the package page of the [Chocolatey Community Repository](https://community.chocolatey.org/packages) for a timescale of when to contact the maintainer for outdated packages. Many maintainers add this information there. If there is no timescale, ensure it has been at least 2 days since the new release. +1. The <Xref title="package doesn't already have a newer version in moderation" value="ccr-faq" anchor="how-do-i-see-all-versions-of-a-package" />. The maintainer(s) may already be actively working towards getting a newer version up on the Chocolatey Community Repository. + +If you are sure of the above list, please follow the [Package Triage Process](#the-triage-process). + +## Package is Broken? + +![red ball failing testing verification](/images/triage-broken.jpg) + +If the ball is red, the maintainer has already been informed. + +Package maintainers are unlikely to provide fixes to versions of packages that are not the latest. If the broken package is the <Xref title="latest available" value="ccr-faq" anchor="how-do-i-see-all-versions-of-a-package" />, please follow the [Package Triage Process](#the-triage-process). + +## The Triage Process + +> :choco-info: **WARNING** +> +> If the maintainer of the package is in the list below, you do not need to follow these steps. Instead, please contact the <Xref title="Site Admins" value="ccr-faq" anchor="how-do-i-contact-the-site-admins" /> if you wish to become the Maintainer of the package, or raise a <Xref title="Request For Maintainer (RFM) package request" value="package-request" /> if you do not. +> +> * needs_new_maintainer +> * dtgm +> * adgellida + +If a package needs to be fixed or updated. Here are the steps to follow: + +1. The first steps are: + 1. <Xref title="Contact the package Maintainers" value="ccr-faq" anchor="how-do-i-contact-the-package-maintainers" />. + 1. Find the <Xref title="package source" value="ccr-faq" anchor="how-do-i-find-the-package-source" /> and if it is a source code repository: + * [Raise a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) if the repository allows it, and the package is broken, and you want to help fix it. + * [Raise an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue) if the repository allows it, and you want to report the package as broken or outdated. + * <Xref title="Ask a question about the package" value="ccr-faq" anchor="how-do-i-ask-questions-about-a-package" />. +1. Wait 7 days for a response from the Maintainers. +1. If the Maintainers have not responded, there are two options: + 1. If you wish to become a Maintainer of the package, please <Xref title="contact the Site Admins" value="ccr-faq" anchor="how-do-i-contact-the-site-admins" />. The Site Admins will follow up with you directly. If the Site Admins add you as a Maintainer of the package, see the <Xref title="Package Maintainer Handover/Switch" value="package-maintainer-handover" /> documentation for more information. + 1. If you do not wish to become a Maintainer of the package, please raise a <Xref title="Request For Maintainer (RFM) package request" value="package-request" />, including how you contacted the existing Maintainers, links to any issues, discussions or pull requests you raised, and the dates when this contact was initiated. The Repository Administrators will review the request. + +### Package Request? Package Missing? + +See the <Xref title="FAQ question" value="package-request" />. + +### Questions About a Package or Software + +See the <Xref title="FAQ question" value="ccr-faq" anchor="how-do-i-ask-questions-about-a-package" />. + +### Are You A Software Vendor? + +See the documentation page for <Xref title="Software Vendor/Authors" value="software-vendor" />.. \ No newline at end of file diff --git a/src/content/docs/en-us/community-repository/users/software-vendor.mdx b/src/content/docs/en-us/community-repository/users/software-vendor.mdx new file mode 100644 index 00000000000..f3b81060197 --- /dev/null +++ b/src/content/docs/en-us/community-repository/users/software-vendor.mdx @@ -0,0 +1,45 @@ +--- +order: 10 +xref: software-vendor +title: Software Vendors/Authors +description: Software Vendor/Author information on the Chocolatey Community Repository. +--- +import Xref from '@components/Xref.astro'; + +If you are a Software Vendor or Author, then the information below will help answer some questions you may have on the Chocolatey Community Repository, how it works and how your software is being installed by packages. + +## How Do I Inspect the Contents Of a Chocolatey Package? + +See the <Xref title="FAQ question" value="ccr-faq" anchor="how-do-i-inspect-the-contents-of-a-chocolatey-package" />. + +## Does a Chocolatey Community Repository Package Violate Distribution Rights If It Installs My Software? + +In most cases, no. Most packages you will find on the <Xref title="Chocolatey Community Repository](https://community.chocolatey.org/packages) use automation scripts to download the software from the [official distribution point" value="legal" anchor="distributions" />. + +If you visit the package page you can view the <Xref title="files included with the package, or download the actual package, to inspect its contents" value="ccr-faq" anchor="how-do-i-inspect-the-contents-of-a-chocolatey-package" />. + +Many of the packages may look like they include files because of the result after an installation, but that's just a fantastic effect of the automation scripts working smoothly and almost unnoticeably. + +<Xref title="We take distribution rights very seriously" value="legal" anchor="distributions" />. If you determine that the package **is** violating your distribution rights, please see [here](#the-package-is-violating-distribution-rights). + +## The Package Is Violating Distribution Rights + +> :choco-info: **NOTE** +> +> The Chocolatey Community Repository has only been moderated since October 2014. There may be some packages created prior to this date that could violate distribution rights. These packages won't likely list the files as the Chocolatey Community Repository did not start capturing them until July 2014. If you visit the package page you can view the <Xref title="files included with the package, or download the actual package, to inspect its contents" value="ccr-faq" anchor="how-do-i-inspect-the-contents-of-a-chocolatey-package" />. + +You've checked the previous section, and it doesn't apply, and you've found that the package **is** violating distribution rights as it bundles software without your permission and/or the license doesn't allow for it. + +It's not often that a Moderator would approve a package that violates distribution rights, but if you find one, please <Xref title="fill out and submit the abuse form" value="ccr-faq" anchor="how-to-report-an-abusive-package" />. The Site Administrators will follow up with you. + +## I Want To Take Over/Help With Package Maintenance For My Software + +1. The first step is to <Xref title="contact the Maintainers" value="ccr-faq" anchor="how-do-i-contact-the-package-maintainers" /> to explain you are the Software Vendor/Author, that you would like to help or take over package maintenance, and request that they add you as a Maintainer. Maintainers have put a lot of time and effort into maintaining the package that installs your software, so we ask Software Vendors/Authors to respect this, and first contact them. + +1. If the Maintainers do not respond after 7 days, or if they do not add you as a Maintainer, <Xref title="contact the Site Admins" value="ccr-faq" anchor="how-do-i-contact-the-site-admins" />. Please include details of how and when you attempted to contact the Maintainers, and that you are the Software Vendor/Author of the software. + +1. Wait for a response from the Site Administrators. Once you have been added as a Maintainer of the package, please follow the instructions for a <Xref title="Package Maintainer Handover/Switch" value="package-maintainer-handover" /> for how to start maintaining the package. + +## I Have Other Questions Not Answered Here + +If you have other questions, please <Xref title="contact the Site Admins" value="ccr-faq" anchor="how-do-i-contact-the-site-admins" />. diff --git a/src/content/docs/en-us/configuration.mdx b/src/content/docs/en-us/configuration.mdx new file mode 100644 index 00000000000..179d8432291 --- /dev/null +++ b/src/content/docs/en-us/configuration.mdx @@ -0,0 +1,191 @@ +--- +order: 60 +xref: configuration +title: Configuration +description: Information on the different configuration options for Chocolatey +--- +import Xref from '@components/Xref.astro'; + +There are settings and features that can customize the way that Chocolatey works for you. The following is a list of config settings and features and their default values. + +> :choco-info: **NOTE** +> +> When a Chocolatey configuration or feature is removed (for example, it becomes deprecated and no longer required), it will not be removed from the chocolatey.config file automatically when you upgrade Chocolatey. +> This is in order to preserve backwards compatibility, should the user decide to go back to a previous version of Chocolatey. + +## Config Settings + +Config settings are adjusted using `choco config set --name="'<nameFromBelow>'" --value="'<value>'"` and set back to default with `choco config unset --name="'<nameFromBelow>'"`. For more information See Xref title="`choco config` command" value="choco-command-config" /> or run `choco config -?`. + +### General + +* `cacheLocation` = **' '** - Cache location if not TEMP folder. Replaces `$env:TEMP` value. It is highly recommended this be set to make Chocolatey more deterministic in cleanup. +* `upgradeAllExceptions` = **' '** - A comma-separated list of package names that should not be upgraded when running `choco upgrade all'. Defaults to empty. +* `defaultTemplateName` = **' '** - Default template name used when running <Xref title="`choco new` command" value="choco-command-new" />. +* `defaultPushSource` = **' '** - Default source to push packages to when running <Xref title="`choco push` command" value="choco-command-push" />. + +### Proxy + +* `proxy` = **' '** - Explicit proxy location. +* `proxyUser` = **' '** - Optional proxy user. Requires explicit proxy configured. +* `proxyPassword` = **' '** - Optional proxy password. Encrypted. Requires explicit proxy and proxyUser configured. +* `proxyBypassList` = **' '** - Optional regex proxy bypass list. Comma separated. Requires explicit proxy configured. +* `proxyBypassOnLocal` = **'true'** - Bypass proxy for local connections. Requires explicit proxy configured. + +### Timeouts + +* `commandExecutionTimeoutSeconds` = **'2700'** - Default timeout for command execution. '0' for infinite. It is recommended that organizations bump this up to at least 4 hours (14400). +* `webRequestTimeoutSeconds` = **'30'** - Default timeout for web requests. + +### Other + +* `containsLegacyPackageInstalls` = **'true'** - Install has packages installed prior to 0.9.9 series. + +## Config Settings - Licensed Edition + +### Chocolatey Central Management + +* `centralManagementServiceUrl` = **' '** - The URL that should be used to communicate with Chocolatey Central Management. It should look something like `https://servicemachineFQDN:24020/ChocolateyManagementService`. See https://docs.chocolatey.org/en-us/features/chocolatey-central-management#fqdn-usage. Available in business editions. +* `centralManagementReportPackagesTimerIntervalInSeconds` = **'1800'** - Amount of time, in seconds, between each execution of the background service to report installed and outdated packages to Chocolatey Central Management. Available in business editions. +* `centralManagementReceiveTimeoutInSeconds` = **'30'** - The amount of time, in seconds, that the background agent should wait to receive information from Chocolatey Central Management. Available in business editions. +* `centralManagementSendTimeoutInSeconds` = **'30'** - The amount of time, in seconds, that the background agent should wait to send information to Chocolatey Central Management. Available in business editions only. +* `centralManagementCertificateValidationMode` = **'PeerOrChainTrust'** - The certificate mode that is used in communication to Chocolatey Central Management. Available in business editions only. +* `centralManagementMaxReceiveMessageSizeInBytes` = **'2147483647'** - The size of the permitted message, in bytes, which can be exchanged between the Chocolatey Background Agent and Chocolatey Central Management. Available in business editions only. +* `centralManagementDeploymentCheckTimerIntervalInSeconds` = **'180'** - Amount of time, in seconds, between each execution of the Chocolatey Agent service to check for a new Deployment Step from Chocolatey Central Management. Available in business editions only. +* `centralManagementClientCommunicationSaltAdditivePassword` = **' '** - Chocolatey Central Management Client Communication Salt Additive - The salt additive to use in the salt recipe for encrypting and verifying communication from an agent TO an instance of Central Management Service (will need to be set the same on all clients contacting that service AND the instance of the management service itself). When not set a default encryption phrase set by the system will be used. When set the unencrypted value must match exactly with what is set in the configuration for Central Management Service and every client contacting that instance of Central Management Service. Value is not shared over the wire. Because this is a much more involved process, it is recommended only setting this if you are transmitting messages over the internet. Defaults to ''. Needs to be at least 8 characters long if set or it will throw errors and use the default. Available in business editions only. +* `centralManagementServiceCommunicationSaltAdditivePassword` = **' '** - Chocolatey Central Management Communication Salt Additive - The salt additive to use in the salt recipe for encrypting and verifying communication FROM an instance of Central Management Service to an agent (will need to be set the same on all clients contacting that service AND the instance of the management service itself). When not set a default encryption phrase set by the system will be used. When set the unencrypted value must match exactly with what is set in the configuration for Central Management Service and every client contacting that instance of Central Management Service. Value is not shared over the wire. Because this is a much more involved process, it is recommended only setting this if you are transmitting messages over the internet. Defaults to ''. Needs to be at least 8 characters long if set or it will throw errors and use the default. Available in business editions only. + +### Intune + +* `intuneTenantGUID` = **' '** - The tenant to use by default when no `--source` argument is used on the `push` command. The GUID is available on the [Azure AD Application page](https://aad.portal.azure.com/). Available in business editions only. +* `intuneAuthenticationUrl` = **'https://login.microsoftonline.com'** - The URL used when authenticating to the Microsoft Intune API. _Only change this if you know what you are doing_. Available in business editions only. +* `intuneApiUrl` = **'https://graph.microsoft.com'** - The URL used when handling requests to the Intune API, for instance, when checking for available packages on Intune. _Only change this if you know what you are doing_. Available in business editions only. +* `intuneRetryIntervalInSeconds` = **'5'** - The amount of time, in seconds, that Chocolatey should wait before retrying any calls to the Intune API. Available in business editions only. +* `intuneUploadTimeoutInSeconds` = **'600'** - The amount of time, in seconds, that Chocolatey should wait for completion while uploading files to Intune. Available in business editions only.. +* `intuneUploadChunkSizeInMegabytes` = **'10'** - The size of the file, in megabytes, below which Chocolatey will split the upload into multiple chunks. Above this size, Chocolatey will make a best effort to break the upload into logical chunk sizes. Available in business editions only. + +### Package Throttle + +* `maximumDownloadRateBitsPerSecond` = **' '** - The maximum download rate in bits per second. '0' or empty means no maximum. A number means that will be the maximum download rate in bps. Defaults to ''. Available in licensed editions only. See https://docs.chocolatey.org/en-us/features/package-throttle + +### Windows Services Installation + +* `serviceInstallsDefaultUserName` = **'ChocolateyLocalAdmin'** - The default user name to use for installing services when one is not specified. Defaults to 'ChocolateyLocalAdmin'. The feature 'useLocalSystemForServiceInstalls' must be set to 'false' to use this field. Available in business editions only. +* `serviceInstallsDefaultUserPassword` = **' '** - The default user password to use for installing services when one is not specified. Defaults to ''. When '', the value will be generated as encrypted hash specific to the machine and will not be known. The feature 'useLocalSystemForServiceInstalls' must be set to 'false' to use this field. Available in business editions only. + +### Self-Service / Background Mode + +* `backgroundServiceAllowedCommands` = **'install,upgrade'** - Background Service Allowed Commands - The different commands that will direct through the background service separated with comma or semi-colon. Supported across all operational commands, not supported with commands that change configuration (config, source, feature, apikey, etc). Defaults to 'install,upgrade'. Available in business editions only. +* `logRetentionPolicyInDays` = **'30'** - The maximum age in days before a rollover log file should be cleaned up. Invalid values or a value of '0' or below is equal to the default value of '30' days. + +### Virus Checking + +* `virusCheckMinimumPositives` = **'4'** - Minimum number of scan result positives before flagging a binary as a possible virus. Used when virusScannerType is VirusTotal. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check +* `virusScannerType` = **'VirusTotal'** - Virus Scanner Type (Generic or VirusTotal). Defaults to VirusTotal for Pro. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check +* `genericVirusScannerPath` = **' '** - The full path to the command line virus scanner executable. Used when virusScannerType is Generic. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check +* `genericVirusScannerArgs` = **'`[[File]]`'** - The arguments to pass to the generic virus scanner. Use `[[File]]` for the file path placeholder. Used when virusScannerType is Generic. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check +* `genericVirusScannerValidExitCodes` = **'0'** - The exit codes for the generic virus scanner when a file is not flagged. Separate with comma, defaults to 0. Used when virusScannerType is Generic. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check +* `genericVirusScannerTimeoutInSeconds` = **'120'** - Generic Virus Scanner Timeout In Seconds - The number of seconds to allow the virus scanner to run before timing out. Used when virusScannerType is Generic. Defaults to '120'. Licensed editions v2.1.0+ only. See https://docs.chocolatey.org/en-us/features/virus-check + +## Features + +Features are adjusted using `choco feature enable|disable --name="'<nameFromBelow>'"`. For more information See Xref title="`choco feature` command" value="choco-command-feature" /> or run `choco feature -?`. + +A checkbox means this feature is turned on by default. + +### General + +* [ ] `logWithoutColor` - Log without color - Do not show colorization in logging output. +* [ ] `logEnvironmentValues` - Log Environment Values - will log values of environment before and after install (could disclose sensitive data). +* [x] `showNonElevatedWarnings` - Show Non-Elevated Warnings - Display non-elevated warnings. +* [x] `showDownloadProgress` - Show Download Progress - Show download progress percentages in the CLI. +* [ ] `useRememberedArgumentsForUpgrades` - Use Remembered Arguments For Upgrades - when running upgrades, use arguments for upgrade that were used for installation ('remembered'). This is helpful when running upgrade for all packages. This is considered in preview and will be flipped to on by default in a future release. +* [ ] `logValidationResultsOnWarnings` - Log validation results on warnings - Should the validation results be logged if there are warnings? + +### Automatic Uninstaller + +* [x] `autoUninstaller` - Uninstall from programs and features without requiring an explicit uninstall script. +* [ ] `failOnAutoUninstaller` - Fail if automatic uninstaller fails. + +### Exit Codes + +* [x] `usePackageExitCodes` - Use Package Exit Codes - Package scripts can provide exit codes. With this on, package exit codes will be what choco uses for exit when non-zero (this value can come from a dependency package). Chocolatey defines valid exit codes as 0, 1605, 1614, 1641, 3010. With this feature off, choco will exit with 0, 1, or -1 (matching previous behavior). +* [ ] `useEnhancedExitCodes` - Use Enhanced Exit Codes - Chocolatey is able to provide enhanced exit codes surrounding list, search, info, outdated and other commands that don't deal directly with package operations. To see enhanced exit codes and their meanings, please run `choco [cmdname] -?`. With this feature off, choco will exit with 0, 1, or -1 (matching previous behavior). Default off. +* [ ] `exitOnRebootDetected` - Exit On Reboot Detected - Stop running install, upgrade, or uninstall when a reboot request is detected. Requires 'usePackageExitCodes' feature to be turned on. Will exit with either 350 or 1604. When it exits with 350, it means pending reboot discovered prior to running operation. When it exits with 1604, it means some work completed prior to reboot request being detected. + +### Flow Control + +* [x] `ignoreInvalidOptionsSwitches` - Ignore Invalid Options/Switches - If a switch or option is passed that is not recognized, should choco fail? +* [ ] `failOnStandardError` - Fail if install provider writes to stderr. Not recommended for use. +* [ ] `stopOnFirstPackageFailure` - Stop On First Package Failure - stop running install, upgrade or uninstall on first package failure instead of continuing with others. As this will affect upgrade all, it is normally recommended to leave this off. +* [ ] `skipPackageUpgradesWhenNotInstalled` - Skip Packages Not Installed During Upgrade - if a package is not installed, do not install it during the upgrade process. +* [ ] `ignoreUnfoundPackagesOnUpgradeOutdated` - Ignore Unfound Packages On Upgrade Outdated - When checking outdated or upgrades, if a package is not found against sources specified, don't report the package at all. +* [x] `usePackageRepositoryOptimizations` - Turn on optimizations for reducing bandwidth with repository queries during package install/upgrade/outdated operations. Should generally be left enabled, unless a repository needs to support older methods of query. When disabled, this makes queries similar to the way they were done in Chocolatey v0.10.11 and before. + +### Security + +* [ ] `useFipsCompliantChecksums` - Use FIPS Compliant Checksums - Ensure checksumming done by choco uses FIPS compliant algorithms. Not recommended unless required by FIPS Mode. Enabling on an existing installation could have unintended consequences related to upgrades/uninstalls. +* [x] `checksumFiles` - Checksum files when pulled in from internet (based on package). +* [ ] `allowEmptyChecksums` - Allow packages to have empty/missing checksums for downloaded resources from non-secure locations (HTTP, FTP). Enabling is not recommended if using sources that download resources from the internet. +* [x] `allowEmptyChecksumsSecure` - Allow packages to have empty/missing checksums for downloaded resources from secure locations (HTTPS). +* [ ] `allowGlobalConfirmation` - Prompt for confirmation in scripts or bypass. + +### Other + +* [x] `powershellHost` - Use Chocolatey's built-in PowerShell host. +* [ ] `removePackageInformationOnUninstall` - Remove Stored Package Information On Uninstall - When a package is uninstalled, should the stored package information also be removed? +* [ ] `disableCompatibilityChecks` - Disable Compatibility Checks - Should a warning we shown, before and after command execution, when a runtime compatibility check determines that there is an incompatibility between Chocolatey and Chocolatey Licensed Extension. Available in 1.1.0+. + +## Features - Licensed Edition + +### General + +* [x] `downloadCache` - Download Cache - use the private download cache if available for a package. Licensed editions only. See https://docs.chocolatey.org/en-us/features/private-cdn +* [ ] `failOnInvalidOrMissingLicense` - Fail On Invalid Or Missing License - allows knowing when a license is expired or not applied to a machine. +* [x] `warnOnUpcomingLicenseExpiration` - Warn On Upcoming License Expiration - When a license expiration date is upcoming, should Chocolatey provide a warning? MSP and Business editions only. Setting ignored in trial editions. +* [ ] `excludeChocolateyPackagesDuringUpgradeAll` - Exclude Chocolatey Packages During Upgrade All - When enabled, all official Chocolatey packages will be added to the comma-separated list of package names that should not be upgraded when upgrading 'all'. Any packages specified in the 'upgradeAllExceptions' configuration setting will still be respected. Licensed editions only (version 4.1.0+). + +### Access Control / Security + +* [ ] `adminOnlyExecutionForAllChocolateyCommands` - Limit to Administrator Execution Only for All Chocolatey Commands - If enabled, only administrators will be able to run 'choco' commands. Business editions only. +* [ ] `adminOnlyExecutionForNewCommand` - Limit to Administrator Execution Only for New Command - If enabled, only administrators will be able to run 'choco new'. Business editions only. +* [ ] `adminOnlyExecutionForDownloadCommand` - Limit to Administrator Execution Only for Download Command - If enabled, only administrators will be able to run 'choco download'. Business editions only. +* [x] `useLocalSystemForServiceInstalls` - Use LocalSystem For Service Installs - When installing services that don't indicate a user/password, use the LocalSystem for those installations. When turned off, Chocolatey will manage a local admin with a password unique to the machine but will never know it. Business editions only. + +### Chocolatey Central Management + +* [ ] `useChocolateyCentralManagement` - Use Chocolatey Central Management - Lists of installed and outdated packages will be reported to the chosen Chocolatey Central Management server. Business editions only. See https://docs.chocolatey.org/en-us/features/chocolatey-central-management +* [ ] `useChocolateyCentralManagementDeployments` - Use Chocolatey Central Management Deployments - Centrally managed deployments of packages and scripts can be sent from Chocolatey Central Management. Business editions only (version 2.1.0+). See https://docs.chocolatey.org/en-us/features/chocolatey-central-management + +### Package Internalizer + +* [x] `internalizeAppendUseOriginalLocation` - Append UseOriginalLocation with Package Internalizer - When `Install-ChocolateyPackage` is internalized, append the `-UseOriginalLocation` parameter to the function. Business editions and MSP editions only. See https://docs.chocolatey.org/en-us/guides/create/recompile-packages + +### Package Reducer + +* [x] `reduceInstalledPackageSpaceUsage` - Reduce Installed Package Size (Package Reducer) - Reduce size of the nupkg file to very small and remove extracted archives and installers. Licensed editions only. See https://docs.chocolatey.org/en-us/features/package-reducer +* [ ] `reduceOnlyNupkgSize` - Reduce Only Nupkg File Size - reduce only the size of nupkg file when using Package Reducer. Licensed editions only. Also requires 'reduceInstalledPackageSpaceUsage' to be enabled. See https://docs.chocolatey.org/en-us/features/package-reducer + +### Package Synchronization + +* [x] `allowSynchronization` - Synchronization - Keep installed Chocolatey packages in sync with changes in Programs and Features. Licensed editions only. See https://docs.chocolatey.org/en-us/features/package-synchronization +* [ ] `showAllPackagesInProgramsAndFeatures` - Package Synchronizer's Packages In Programs And Features Synchronization - Show all packages in Programs and Features, not just packages that use a native installer. Business editions only. + +### Self-Service / Background Mode + +* [x] `useBackgroundService` - Use Background Service (Self-Service Installer) - For some commands like install and upgrade, use a background service instead of running the command directly. Business editions only. Requires the package chocolatey-agent (choco install chocolatey-agent). See https://docs.chocolatey.org/en-us/features/self-service-anywhere +* [x] `useBackgroundServiceWithSelfServiceSourcesOnly` - Use Background Service With Self-Service Sources Only - When using Self-Service, opt-in only sources configured to be used with self-service. This allows for other sources only an admin can use. Business editions only. +* [x] `useBackgroundServiceWithNonAdministratorsOnly` - Use Background Service With Non-Administrators Only - When using Self-Service, only execute background mode for non-administrators. Business editions only. +* [ ] `useBackgroundServiceInteractively` - Use Background Service Interactively (BROKEN CURRENTLY - DO NOT USE) - When using Self-Service and installing software that cannot be completely silent, installs will need to be executed against the current desktop environment. Set this flag on for the most compatibility. To use this feature, you must be using the local 'ChocolateyLocalAdmin' account. Business editions only. +* [x] `useBackgroundServiceWithEmptySessions` - Use Background Service With Empty Sessions - Sometimes empty sessions mean remotely run sessions, but in in newer Windows it is much more normal to see empty sessions with interactive use. Leave this flag on unless you absolutely need it off (control how remote sessions use background service by enabling the feature 'useBackgroundServiceWithNonAdministratorsOnly'). Business editions only. +* [ ] `allowBackgroundServiceUninstallsFromUserInstallsOnly` - Allow ONLY Uninstall of Packages Installed By a Self-service User in Background Service - Allow a user to uninstall packages they've installed - they must be reported as the original user in a choco list --audit. The config setting 'backgroundServiceAllowedCommands' must must have 'uninstall' added as well for this to work. Business editions only. +* [ ] `allowBackgroundServiceOverride` - Allows a user to request using the self-service when they are running the commands that can be run through the background service. Licensed editions only (version 5.0.0+). +* [x] `useLogRetentionPolicy` - Use Automatic Log Retention Policy - Cleans any rolled over log files once a day that are older than the configured retention policy day value. Licensed editions only (version 5.0.0+). + +### Virus Checking + +* [x] `virusCheck` - Virus Check - perform virus checking on downloaded files. Licensed editions only. See https://docs.chocolatey.org/en-us/features/virus-check + +### Other + +* [x] `allowPreviewFeatures` - Allow Preview Features - Turns on Preview Features. Some features become available for preview before they are released for testing purposes. Please note these should not be used for production systems as they could mess up a system. Licensed editions only. diff --git a/src/content/docs/en-us/create/automatic-packages.mdx b/src/content/docs/en-us/create/automatic-packages.mdx new file mode 100644 index 00000000000..ce4ea23d148 --- /dev/null +++ b/src/content/docs/en-us/create/automatic-packages.mdx @@ -0,0 +1,185 @@ +--- +order: 50 +xref: automatic-packaging +title: Automatic Packaging +description: Techniques for automatically updating Chocolatey packages when new version of application is released +--- +import Xref from '@components/Xref.astro'; + +Automatic packaging is a process that **package maintainers can run on *their own* to keep the packages they maintain up to date**. It is not a required step for maintaining packages on the community feed (https://community.chocolatey.org/packages), but it is recommended you find a way to automate the delivery of packages to the community feed when there are updates if you are going to maintain more than 5 packages and you are not the software vendor for the packages you maintain. + +> :choco-info: **NOTE** +> +> Not to be confused with the automatic package creation feature in [Chocolatey for Business](https://chocolatey.org/compare) - that feature creates packages directly from software installer files. This feature is for package maintenance of existing packages on the community feed. + +## Automatic update methods + +There are currently two methods that can be used to maintain automatic packages: + +- RECOMMENDED - Using only PowerShell via [Chocolatey Automatic Package Updater Module](https://github.com/chocolatey-community/chocolatey-au). +- DEPRECATED - Using [Chocolatey Package Updater](https://community.chocolatey.org/packages/ChocolateyPackageUpdater) with 3rd party tool [Ketarin](https://community.chocolatey.org/packages/ketarin). + +## Automatic Updater (AU) + +The [Chocolatey Automatic Package Updater Module](https://github.com/chocolatey-community/chocolatey-au/blob/master/README.md) is a PowerShell module which implements functions that can be used to automate Chocolatey package updates. + +### Credits + +AU was created by Chocolatey community member [Miodrag Milic](https://github.com/majkinetor). +The original repository has been archived and is no longer receiving updates. + +Due to its widespread usage for many Chocolatey packages, we have forked the module into the [chocolatey-au](https://github.com/chocolatey-community/chocolatey-au) repository in the Chocolatey Community organisation where it will be maintained going forward. + +### Setup + +Follow the instructions at the [AU Wiki](https://github.com/majkinetor/au/wiki). + +When creating packages, do not use `--auto` as AU doesn't use token replacement for updating packages, it replaces the xml elements and code directly. + +## Chocolatey Package Updater aka chocopkgup [DEPRECATED] + +<a name="chocolatey-package-updater-aka-chocopkgup"></a> +http://community.chocolatey.org/packages/ChocolateyPackageUpdater + +The tool that accomplishes this process is known as [chocopkgup](https://community.chocolatey.org/packages/ChocolateyPackageUpdater) (Chocolatey Package Updater). It is a free tool (unless you want to use it for uploads to somewhere other than community.chocolatey.org). + +### Licensing + +Check the license at http://realdimensions.net/licenses/chocolateypackageupdater/license.txt to be sure that it applies to you. + +Basically it boils down to this: if you want to use chocopkgup privately, you will need to pay for it. As long as you are publishing to community.chocolatey.org, the tool is completely free! The license does expire every once in awhile, but if you are keeping up on your chocolatey updates locally, you won't even notice (`cup all`, remember?). + +### Credits + +This tool makes use of [Ketarin](https://community.chocolatey.org/packages/ketarin). Ketarin is an awesome tool that helps chocopkgup accomplish its tasks. + +### Requirements + +* A Windows box somewhere - to run the updater on +* [Ketarin](https://community.chocolatey.org/packages/ketarin) +* [Chocolatey Package Updater](https://community.chocolatey.org/packages/chocolateypackageupdater) + +### Setup + +1. Fork [`chocolatey-packages-template`](https://github.com/chocolatey/chocolatey-packages-template#fork-destination-box) and rename it to something like `chocolatey-packages` (on GitHub - go into Settings, Repository name and rename). +1. Clone the repo locally. +1. Install chocopkgup (which will install ketarin and nuget.commandline). `choco install chocolateypackageupdater`. +1. Check the config in `$env:ChocolateyInstall\lib\ChocolateyPackageUpdater\tools\chocopkgup\chocopkgup.exe.config`. The `PackagesFolder` key should point to where your repository is located. +1. Create a scheduled task (in Windows). This is the command (edit the path to `cmd.exe` accordingly): `C:\Windows\System32\cmd.exe /c c:\tools\chocolateypackageupdater\ketarinupdate.cmd` +1. Alternatively to stop the command window from opening on Windows, you can create a VBS script as well and put the path to the `.vbs` file instead of `ketarinupdate.cmd` as the command to run. The file should have the following: + + ```vb + Set objShell = WScript.CreateObject("WScript.Shell") + objShell.Run("C:\tools\ChocolateyPackageUpdater\ketarinupdate.cmd"), 0, True + ``` + +1. Choose a schedule for the task. Some folks run the task about once an hour to catch updates as quickly as they happen. +1. Open Ketarin. Choose `File` –> `Settings`. +1. Now Click Import... +1. Choose [setup/KetarinSettings.xml](https://github.com/chocolatey/chocolatey-packages-template/blob/master/setup/KetarinSettings.xml) from the repo folder. This is going to add everything in that you will need for settings. +1. Click on Global Variables. Ensure all of the variables are set appropriately. + + ![Ketarin Global Variables](/images/chocopkgup/KetarinGlobalVariables.png) + +This gets Ketarin all set up with a global command for all packages we create. + +*NOTE*: This has set up global commands for "Before updating an application" and "After updating an application". Those should not need adjusting, however if you do, please be sure to export the settings again. + +### Create an Automatic Package + +Preferably you are taking an existing package that you have tested and converting it to an automatic package. + +#### Create a package for automatic packaging + +When you are creating packages, you should ensure you are on the latest version of Chocolatey. This means you have the latest fixes to packaging templates and latest and greatest in the way of automation. + +1. Ensuring you are on the latest version of Chocolatey - `choco upgrade chocolatey`. +1. Open PowerShell (or cmd.exe) and head to the automatic package folder you are using. This should be "repolocation\automatic". +1. Run `choco new <name> --auto <Xref title="options]`. You can use a different package template if you have those installed - see [new command" value="choco-command-new" /> for all options or run `choco new -?`. For package templates, see <Xref title="how to create custom package templates" value="create-custom-package-templates" />. +1. Inspect the output. Merge in your existing package logic if you have an existing package you are converting. +1. Ensure that `checksumType` and `checksumType64` is `sha256` as this is the type the updater will generate. +1. Make any adjustments you need to the package to prepare for packaging. + +#### Ketarin + +1. Open Ketarin. Choose `File` –> `Import…` +1. Choose [ketarin/_KetarinChocolateyTemplate.xml](https://github.com/chocolatey/chocolatey-packages-template/blob/master/ketarin/_KetarinChocolateyTemplate.xml) from the repo folder. +1. Answer the questions. This will create a new job for Ketarin to check. +1. One important thing to keep in mind is that **the name of the job needs to match the name of the package folder and nuspec *exactly*.** +1. Right click on that new job and select `Edit`. Take a look at the following: + + ![Ketarin Job Main](/images/chocopkgup/KetarinMain.png "Ketarin Job Main") + +1. Click on `Variables` on the right of URL + + ![Ketarin Job Variables](/images/chocopkgup/KetarinSetVariables.png "Ketarin Job Variables") + +1. On the left side you should see a variable for **version** and one for **url64**. Click on **version**. +1. Choose the appropriate method for you. Here I’ve chosen **Content from URL (start/end)**. +1. Enter the URL for versioning information. + + ![Ketarin Job Variables](/images/chocopkgup/KetarinVariables.png "Ketarin Job Variables") + +1. In the contents itself, highlight enough good information before a version to be able to select it uniquely during updates (but not so much it doesn’t work every time as the page changes). Click on **Use selection as start**. +1. Now observe that it didn’t jump back too far. +1. Do the same with the ending part, keeping in mind that this side doesn’t need to be too much because it is found AFTER the start. Once selected click on **Use selection as end**. +1. It should look somewhat similar to have is presented in the picture above. +1. If you have a 64bit url you want to get, do the same for the url64 variable. +1. When all of this is good, click **OK**. +1. Click **OK** again. + +### Notes about tri-packages (meta/virtual aka *, *.install, and *.portable) + +**UPDATE AUG 2016:** This may no longer be true. Just set up three jobs. + +When you have the three packages, you should set up only two jobs, one for *.install and one for *.portable. + +In whichever job the meta package points to, you should add a command to that like you did for the settings for all jobs in ketarin. + +1. Click on the **Commands Tab** and set **Edit command for event** to “Before updating an application”. + + ![Ketarin Settings](/images/chocopkgup/KetarinJobSettings.png "Ketarin Settings") + +1. Add the following text (replace `name` with the actual name of the meta package folder): + + ``` + chocopkgup /p name /v {version} /u "{preupdate-url}" /u64 "{url64}" /pp "{file}" /c "{Checksum}" /c64 "{Checksumx64}" + REM /disablepush + ``` + +1. Check the bottom of this section to be sure it set to **Command**. + + ![Ketarin Settings Command](/images/chocopkgup/KetarinCustomCommand.png "Ketarin Settings Command") + +### Testing Ketarin/ChocoPkgUp: + +1. We need to get a good idea of whether this will work or not. +1. Open a command line and type `ketarin`. +1. Once Ketarin opens, open [global options](#setup) (steps 8 and 11), go to Global Variables and set `cscript` to `1` instead of `2` so that it only goes as far as creating packages. +1. Find your job, and right click -> Update. If everything is set good, in moments you will have a Chocolatey package in the folder you set under `{PackagesFolder}\_output`, where `{PackagesFolder}` is the path you set in the course of the [*Setup*](#setup) section of this article. +1. Inspect the resulting Chocolatey package(s) for any issues. +1. You should also test the scheduled task works appropriately. + +### Troubleshooting/Notes + +* Ketarin comes with a logging facility so you can see what it is doing. It’s under View –> Show Log. +* In the top level folder for chocopkgup (in program data), we log what we receive from Ketarin as well and the process of putting together a package. +* The name of the application in ketarin matches exactly that of the folder that is in the automatic packages folder. +* Every once in awhile you want to look in Ketarin to see what jobs might be failing. Then figure out why. +* Every once in awhile you will want to inspect the chocopkgupfolder to see if there are any packages that did not make it up for some reason or another and then upload them. +* If the downloaded application/installer has not changed, the package will not be generated. Delete the files in the download location specified in [*Ketarin*](#ketarin) and try again. + +### Important notes for files hosted on SourceForge + +Try this first: +* In advanced settings, ensure the user agent is `chocolatey command line`. This will allow ketarin to behave similarly to how Chocolatey does. + + ![Ketarin Job Advanced Settings](/images/automatic-packages/ketarin-jobs-advanced-settings.png) + + It isn’t uncommon that certain SorceForge mirrors go offline or are extremely slow because of overload. Thus it is not recommended to use direct mirror links (e. g. `http://heanet.dl.sourceforge.net/project/…`) in your `chocolateyInstall.ps1` file, because this will frequently break your package and makes it unreliable. + To avoid this, use the following convention for files hosted on SourceForge: +* Don’t use `{{DownloadUrl}}` and `{{DownloadUrlx64}}` in your `chocolateyInstall.ps1` file, but use this instead (example of the app nomacs): +`$url = 'http://sourceforge.net/projects/nomacs/files/nomacs-{{PackageVersion}}/nomacs-setup-{{PackageVersion}}-x86.exe/download'` +and +`$url64 = 'http://sourceforge.net/projects/nomacs/files/nomacs-{{PackageVersion}}/nomacs-setup-{{PackageVersion}}-x64.exe/download'` +For other applications obviously you have to use the actual application/file names. Important is that you use `{{PackageVersion}}` and don’t use any direct links which include SourceForge mirrors. diff --git a/src/content/docs/en-us/create/commands/api-key.mdx b/src/content/docs/en-us/create/commands/api-key.mdx new file mode 100644 index 00000000000..9cdb8449ad1 --- /dev/null +++ b/src/content/docs/en-us/create/commands/api-key.mdx @@ -0,0 +1,230 @@ +--- +order: 30 +xref: choco-command-apikey +title: ApiKey +description: ApiKey Command (choco apikey) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyApiKeyCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# ApiKey Command (choco apikey) + +This lists API keys that are set or sets an api key for a particular + source so it doesn't need to be specified every time. + +Anything that doesn't contain source and key will list API keys. + +## Usage + +~~~ + choco apikey [<options/switches>] + choco setapikey [<options/switches>] +~~~ + + +## Examples + +~~~ + choco apikey + choco apikey -s https://somewhere/out/there + choco apikey list + choco apikey list -s https://somewhere/out/there + choco apikey add -s="https://somewhere/out/there/" -k="value" + choco apikey add -s "https://push.chocolatey.org/" -k="123-123123-123" + choco apikey add -s "http://internal_nexus" -k="user:password" + choco apikey remove -s https://somewhere/out/there +~~~ + + +For source location, this can be a folder/file share or an +http location. When it comes to urls, they can be different from the packages +url (where packages are searched and installed from). As an example, for +Chocolatey's community package package repository, the package url is +https://community.chocolatey.org/api/v2/, but the push url is https://push.chocolatey.org +(and the deprecated https://chocolatey.org/ as a push url). Check the +documentation for your choice of repository to learn what the push url is. + +For the key, this can be an apikey that is provided by your source repository. +With some sources, like Nexus, this can be a NuGet API key or it could be a +user name and password specified as 'user:password' for the API key. Please see +your repository's documentation (for Nexus, please see +https://ch0.co/nexus2apikey). + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Connecting to Chocolatey.org (Community Package Repository) + +In order to save your API key for https://push.chocolatey.org/, + log in (or register, confirm and then log in) to + https://push.chocolatey.org/, go to https://push.chocolatey.org/account, + copy the API Key, and then use it in the following command: + +~~~ + choco apikey add -k <your key here> -s https://push.chocolatey.org/ +~~~ + + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + - 2: nothing to do, apikey already set (enhanced) + +> :choco-info: **NOTE** +> +> Starting in v2.3.0, if you have the feature 'useEnhancedExitCodes' + turned on, then choco will provide enhanced exit codes that allow + better integration and scripting. + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source [REQUIRED] - The source location for the key + + -k, --key, --apikey, --api-key=VALUE + ApiKey - The API key for the source. This is the authentication that + identifies you and allows you to push to a source. With some sources + this is either a key or it could be a user name and password specified + as 'user:password'. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco apikey -h`. + + diff --git a/src/content/docs/en-us/create/commands/convert.mdx b/src/content/docs/en-us/create/commands/convert.mdx new file mode 100644 index 00000000000..9e6dbc64f0a --- /dev/null +++ b/src/content/docs/en-us/create/commands/convert.mdx @@ -0,0 +1,23 @@ +--- +order: 60 +xref: choco-command-convert +title: Convert +description: Convert Command (choco convert) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyConvertCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +Could not find a command registered that meets 'convert'. + Try choco -? for command reference/help. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco convert -h`. + + diff --git a/src/content/docs/en-us/create/commands/index.mdx b/src/content/docs/en-us/create/commands/index.mdx new file mode 100644 index 00000000000..5fec2cdeb60 --- /dev/null +++ b/src/content/docs/en-us/create/commands/index.mdx @@ -0,0 +1,8 @@ +--- +order: 30 +xref: choco-create-commands +title: Commands +description: These are the Chocolatey commands that are typically used when creating a Chocolatey package +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/create/commands/new.mdx b/src/content/docs/en-us/create/commands/new.mdx new file mode 100644 index 00000000000..073da372215 --- /dev/null +++ b/src/content/docs/en-us/create/commands/new.mdx @@ -0,0 +1,306 @@ +--- +order: 10 +xref: choco-command-new +title: New +description: New Command (choco new) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyNewCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Package Builder Command (choco new) + +Chocolatey [Licensed editions](https://chocolatey.org/compare) include some level of Package Builder. + + - Professional can take advantage of Package Builder UI minus the auto-detection + - Business can use `--file` or Package Builder UI to generate a fully ready to go + unattended software deployment in seconds. Right-click, 'Create Package...' + - Business can use `--from-programs-and-features` to generate packages directly + from Programs and Features! + +See more information about <Xref title="Package Builder features" value="package-builder" /> + + +# New Command (choco new) + +Chocolatey will generate package specification files for a new package. + +## Usage + +~~~ + choco new <name> [<options/switches>] [<property=value> <propertyN=valueN>] +~~~ + + +Possible properties to pass: +~~~ + packageversion + maintainername + maintainerrepo + installertype + url + url64 + silentargs +~~~ + + +> :choco-info: **NOTE** +> +> You can pass arbitrary property value pairs + through to templates. This really unlocks your ability to create + packages automatically! + +> :choco-info: **NOTE** +> +> [Chocolatey for Business](https://chocolatey.org/compare) can create complete packages by just + pointing the new command to native installers! + +> :choco-info: **NOTE** +> +> [Chocolatey for Business](https://chocolatey.org/compare) can also download and internalize remote + resources from existing packages so that existing packages can be used + without being tied to the internet. + This is called automatic recompile. + +## Examples + +~~~ + choco new bob + choco new bob -a --version 1.2.0 maintainername="'This guy'" + choco new bob silentargs="'/S'" url="'https://somewhere/out/there.msi'" + choco new bob --outputdirectory Packages +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -a, --auto, --automaticpackage + AutomaticPackage - Generate automatic package instead of normal. + Defaults to false + + -t, --template, --template-name=VALUE + TemplateName - Use a named template in + C:\source\choco\code_drop\temp\_PublishedApps\choco_merged\templates\tem- + platename instead of built-in template. + + --name=VALUE + Name [Required]- the name of the package. Can be passed as first + parameter without "--name=". + + --version=VALUE + Version - the version of the package. Can also be passed as the property + PackageVersion=somevalue + + --maintainer=VALUE + Maintainer - the name of the maintainer. Can also be passed as the + property MaintainerName=somevalue + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the created Chocolatey + package file. If not specified, uses the current directory. + + --built-in, --built-in-template, --originaltemplate, --original-template, --use-original-template, --use-built-in-template + BuiltInTemplate - Use the original built-in template instead of any + override. + + --file, --url=VALUE + Location of binary. In [Chocolatey for Business](https://chocolatey.org/compare), file is used for auto- + detection (native installer, zip, patch/upgrade file, or remote url to + download first) to completely create a package with proper silent + arguments! Can be 32-bit or 64-bit architecture. Available in licensed + editions only. See https://docs.chocolatey.org/en-us/features/package- + builder + + --file64, --url64=VALUE + Optional - used when specifying both a 32-bit and a 64-bit file. Can be + an installer or a zip, or remote url to download. Available in licensed + editions only. + + --keepremote, --keep-remote, --originallocation, --original-location, --useoriginallocation, --use-original-location, --useoriginalfileslocation, --use-original-files-location + Use Original Files Location - when using file or url, use the original + location in packaging. Available in [licensed editions](https://chocolatey.org/compare) only. + + --checksum, --downloadchecksum, --download-checksum=VALUE + Download Checksum - checksum to verify File/Url with. Defaults to empty. + Available in [licensed editions](https://chocolatey.org/compare) only. + + --checksum64, --checksumx64, --downloadchecksumx64, --download-checksum-x64=VALUE + Download Checksum 64-bit - checksum to verify File64/Url64 with. + Defaults to empty. Available in [licensed editions](https://chocolatey.org/compare) only. + + --checksumtype, --checksum-type, --downloadchecksumtype, --download-checksum-type=VALUE + Download Checksum Type - checksum type for File/Url (and optional + separate 64-bit files when specifying both). Used in conjunction with + Download Checksum and Download Checksum 64-bit. Available values are + 'md5', 'sha1', 'sha256' or 'sha512'. Defaults to 'sha256'. Available in + Business editions only. + + --pauseonerror, --pause-on-error + Pause on Error - Pause when there is an error with creating the package. + Available in [licensed editions](https://chocolatey.org/compare) only. + + --buildpackage, --build-package, --build-packages + Build Package - Attempt to compile the package after creating it. + Available in [licensed editions](https://chocolatey.org/compare) only. + + --fromprograms, --from-programs, --fromprogramsandfeatures, --from-programs-and-features + Generate Packages From Installed Software - Generate packages from the + installed software on a system (does not handle dependencies). Available + in Business editions only. + + --removearchitecture, --removearchitecturefromname, --remove-architecture, --remove-architecture-from-name + Remove Architecture From Name - Remove x86, x64, 64-bit, etc from the + package id. Default setting is to remove architecture. Available in + Business editions only. + + --includearchitecture, --includearchitectureinname, --include-architecture, --include-architecture-in-name + Include Architecture in Package Name - Leave x86, x64, 64-bit, etc as + part of the package id. Default setting is to remove architecture. + Available in Business editions only. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco new -h`. + + diff --git a/src/content/docs/en-us/create/commands/pack.mdx b/src/content/docs/en-us/create/commands/pack.mdx new file mode 100644 index 00000000000..469fc25575d --- /dev/null +++ b/src/content/docs/en-us/create/commands/pack.mdx @@ -0,0 +1,191 @@ +--- +order: 20 +xref: choco-command-pack +title: Pack +description: Pack Command (choco pack) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyPackCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Pack Command (choco pack) + +Chocolatey will attempt to package a nuspec into a compiled nupkg. + +> :choco-info: **NOTE** +> +> You can pass arbitrary property value pairs through to nuspecs. + These will replace variables formatted as `$property$` with the value passed. + +## Usage + +~~~ + choco pack [<path to nuspec>] [<options/switches>] [<property=value>] +~~~ + + +## Examples + +~~~ + choco pack + choco pack --version 1.2.3 configuration=release + choco pack path/to/nuspec + choco pack --outputdirectory build +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + --version=VALUE + Version - The version you would like to insert into the package. + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the created Chocolatey + package file. If not specified, uses the current directory. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco pack -h`. + + diff --git a/src/content/docs/en-us/create/commands/push.mdx b/src/content/docs/en-us/create/commands/push.mdx new file mode 100644 index 00000000000..1f590db0047 --- /dev/null +++ b/src/content/docs/en-us/create/commands/push.mdx @@ -0,0 +1,217 @@ +--- +order: 40 +xref: choco-command-push +title: Push +description: Push Command (choco push) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyPushCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Push Command (choco push) + +Chocolatey will attempt to push a compiled nupkg to a package feed. + +A feed can be a local folder, a file share, the [community feed](https://community.chocolatey.org/packages) + (https://push.chocolatey.org/), or a custom/private feed. For web + feeds, it has a requirement that it implements the proper OData + endpoints required for NuGet packages. + +## Usage + +~~~ + choco push [<path to nupkg>] [<options/switches>] +~~~ + + +> :choco-info: **NOTE** +> +> If there is more than one nupkg file in the folder, the command + will require specifying the path to the file. + +## Examples + +~~~ + choco push --source https://push.chocolatey.org/ + choco push --source "'https://push.chocolatey.org/'" --execution-timeout 500 + choco push --source "'https://push.chocolatey.org/'" -k="'123-123123-123'" +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Troubleshooting + +To use this command, you must have your API key saved for the community + feed (chocolatey.org) or the source you want to push to. Or you can + explicitly pass the apikey to the command. See <Xref title="`apikey`" value="choco-command-apikey" /> command help + for instructions on saving your key: + +~~~ + choco apikey -? +~~~ + + +A common error is `Failed to process request. 'The specified API key + does not provide the authority to push packages.' The remote server + returned an error: (403) Forbidden..` This means the package already + exists with a different user (API key). The package could be unlisted. + You can verify by going to https://community.chocolatey.org/packages/packageName. + Please contact the administrators of https://community.chocolatey.org/ if you see this + and you don't see a good reason for it. + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -s, --source=VALUE + Source - The source we are pushing the package to. Use https://pus- + h.chocolatey.org/ to push to [community feed](https://community.chocolatey.org/packages). + + -k, --key, --apikey, --api-key=VALUE + ApiKey - The API key for the source. If not specified (and not local + file source), does a lookup. If not specified and one is not found for + an https source, push will fail. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco push -h`. + + diff --git a/src/content/docs/en-us/create/commands/template.mdx b/src/content/docs/en-us/create/commands/template.mdx new file mode 100644 index 00000000000..6008e1a46c2 --- /dev/null +++ b/src/content/docs/en-us/create/commands/template.mdx @@ -0,0 +1,185 @@ +--- +order: 50 +xref: choco-command-template +title: Template +description: Template Command (choco template) +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyTemplateCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Template Command (choco template) + +List information installed templates. + +Both manually installed templates and templates installed via + .template packages are displayed. +## Usage + +~~~ + choco template [list]|info [<options/switches>] +~~~ + +## Examples + +~~~ + choco template + choco templates + choco template list + choco template info --name msi + choco template list --reduce-output + choco template list --verbose +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + The name of the template to get information about. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco template -h`. + + diff --git a/src/content/docs/en-us/create/commands/templates.mdx b/src/content/docs/en-us/create/commands/templates.mdx new file mode 100644 index 00000000000..b35fe54a711 --- /dev/null +++ b/src/content/docs/en-us/create/commands/templates.mdx @@ -0,0 +1,186 @@ +--- +order: 55 +xref: choco-command-templates +title: Templates +description: Templates Command (choco templates) +ShowInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +{/* This file is automatically generated based on output from https://github.com/chocolatey/choco/blob/master/src/chocolatey/infrastructure.app/commands/ChocolateyTemplatesCommand.cs using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). If the file is not found, it is not part of the open source edition of Chocolatey or the name of the file is different. */} + +# Template Command (choco templates) + +List information installed templates. + +Both manually installed templates and templates installed via + .template packages are displayed. +## Usage + +~~~ + choco template [list]|info [<options/switches>] +~~~ + +## Examples + +~~~ + choco template + choco templates + choco template list + choco template info --name msi + choco template list --reduce-output + choco template list --verbose +~~~ + + +> :choco-info: **NOTE** +> +> See scripting in <Xref title="how to pass arguments" value="choco-commands" anchor="how-to-pass-options-switches" /> (`choco -?`) for how to + write proper scripts and integrations. + + +## Exit Codes + +Exit codes that normally result from running this command. + +Normal: + - 0: operation was successful, no issues detected + - -1 or 1: an error has occurred + +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + https://github.com/chocolatey/choco/issues/new/choose. + + +## Options and Switches + +> :choco-info: **NOTE** +> +> Options and switches apply to all items passed, so if you are + running a command like install that allows installing multiple + packages, and you use `--version=1.0.0`, it is going to look for and + try to install version 1.0.0 of every package passed. So please split + out multiple package calls when wanting to pass specific options. + +Includes <Xref title="default options/switches" value="choco-commands" anchor="default-options-and-switches" /> (included below for completeness). + +~~~ + + -?, --help, -h + Prints out the help menu. + + --online + Online - Open help for specified command in default browser application. + This option only works when used in combintation with the -?/--help/-h + option. Available in 2.0.0+ + + -d, --debug + Debug - Show debug messaging. + + -v, --verbose + Verbose - Show verbose messaging. Very verbose messaging, avoid using + under normal circumstances. + + --trace + Trace - Show trace messaging. Very, very verbose trace messaging. Avoid + except when needing super low-level .NET Framework debugging. + + --nocolor, --no-color + No Color - Do not show colorization in logging output. This overrides + the feature 'logWithoutColor', set to 'False'. + + --acceptlicense, --accept-license + AcceptLicense - Accept license dialogs automatically. Reserved for + future use. + + -y, --yes, --confirm + Confirm all prompts - Chooses affirmative answer instead of prompting. + Implies --accept-license + + -f, --force + Force - force the behavior. Do not use force during normal operation - + it subverts some of the smart behavior for commands. + + --noop, --whatif, --what-if + NoOp / WhatIf - Don't actually do anything. + + -r, --limitoutput, --limit-output + LimitOutput - Limit the output to essential information + + --timeout, --execution-timeout=VALUE + CommandExecutionTimeout (in seconds) - The time to allow a command to + finish before timing out. Overrides the default execution timeout in the + configuration of 2700 seconds. Supply '0' to disable the timeout. + + -c, --cache, --cachelocation, --cache-location=VALUE + CacheLocation - Location for download cache, defaults to %TEMP% or value + in chocolatey.config file. + + --allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build + AllowUnofficialBuild - When not using the official build you must set + this flag for choco to continue. + + --failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output + FailOnStandardError - Fail on standard error output (stderr), typically + received when running external commands during install providers. This + overrides the feature failOnStandardError. + + --use-system-powershell + UseSystemPowerShell - Execute PowerShell using an external process + instead of the built-in PowerShell host. Should only be used when + internal host is failing. + + --no-progress + Do Not Show Progress - Do not show download progress percentages. + + --proxy=VALUE + Proxy Location - Explicit proxy location. Overrides the default proxy + location of ''. + + --proxy-user=VALUE + Proxy User Name - Explicit proxy user (optional). Requires explicit + proxy (`--proxy` or config setting). Overrides the default proxy user of + ''. + + --proxy-password=VALUE + Proxy Password - Explicit proxy password (optional) to be used with user + name. Encrypted. Requires explicit proxy (`--proxy` or config setting) + and user name (`--proxy-user` or config setting). Overrides the default + proxy password. + + --proxy-bypass-list=VALUE + ProxyBypassList - Comma separated list of regex locations to bypass on + proxy. Requires explicit proxy (`--proxy` or config setting). Overrides + the default proxy bypass list of ''. + + --proxy-bypass-on-local + Proxy Bypass On Local - Bypass proxy for local connections. Requires + explicit proxy (`--proxy` or config setting). Overrides the default + proxy bypass on local setting of 'True'. + + --log-file=VALUE + Log File to output to in addition to regular loggers. + + --skipcompatibilitychecks, --skip-compatibility-checks + SkipCompatibilityChecks - Prevent warnings being shown before and after + command execution when a runtime compatibility problem is found between + the version of Chocolatey and the Chocolatey Licensed Extension. + Available in 1.1.0+ + + --ignore-http-cache + IgnoreHttpCache - Ignore any HTTP caches that have previously been + created when querying sources, and create new caches. Available in 2.1.0+ + + -n, --name=VALUE + The name of the template to get information about. + +~~~ + +<Xref title='Command Reference' value='choco-commands' classes='mb-3 d-block' /> + + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `choco templates -h`. + + diff --git a/src/content/docs/en-us/create/create-packages-quick-start.mdx b/src/content/docs/en-us/create/create-packages-quick-start.mdx new file mode 100644 index 00000000000..8b1162a0fb6 --- /dev/null +++ b/src/content/docs/en-us/create/create-packages-quick-start.mdx @@ -0,0 +1,112 @@ +--- +order: 20 +xref: create-packages-quick-start +title: Quick Start +description: The quick start guide on creating Chocolatey packages +--- +import Xref from '@components/Xref.astro'; + +## Creating Chocolatey Packages - TL;DR version + +Here's a TL;DR quick start version of the package creating tutorial. Follow these steps to create a simple package. + +**Problem?** Read the detailed version: <Xref title="Creating Chocolatey Packages" value="create-packages" /> + +## Prerequisites + +* You have Chocolatey installed. +* You've read <Xref title="What are Chocolatey Packages?" value="getting-started" anchor="what-are-chocolatey-packages" /> first. +* You know how a package works + * A package contains a `nuspec` file. This defines the package. (<Xref title="Docs" value="create-packages" anchor="nuspec" />) + * A package may contain embedded software. + * A package may contain an installation script. This can be [very simple](#examples). + +## Quick start guide + +* **Generate new package**: + * `choco new -h` will get you started seeing options available to you. + * Once you figured out all of your options, you should move forward with generating your template. +* **Edit template** using common sense + * `cd package-name` + * Edit the `package-name.nuspec` configuration file. + * Edit the `./tools/chocolateyInstall.ps1` install script. + * Make sure you figure out the installer's silent mode. Use [Universal Silent Switch Finder](http://unattended.sourceforge.net/installers.php), which is available as a Choco package: `choco install ussf` + * You __must__ save your files with _UTF-8_ character encoding without BOM. (<Xref title="Details" value="create-packages" anchor="character-encoding" />) +* **Build the package** + * Still in package directory + * `choco pack` + * "Successfully created package-name.1.1.0.nupkg" +* **Test the package** + * **Testing should probably be done on a Virtual Machine** + * In your package directory, use: + * `choco install package-name --source .` (package-name is the id element in the nuspec) +* **Push the package** to the Chocolatey community package repository: + * Get a Chocolatey account: + * [Register](https://chocolatey.org/account/register) + * Copy the API key from [your Chocolatey account](https://chocolatey.org/account). + * `choco apikey --api-key [API_KEY_HERE] -source https://push.chocolatey.org/` + * `choco push package-name.1.1.0.nupkg --source https://push.chocolatey.org/` - nupkg file can be omitted if it is the only one in the directory. + +## Common Mistakes + +* **NuSpec** + * **id** is the package name and should meet the following criteria: + * should contain no spaces and weird characters. + * should be lowercase. + * should separate spaces in the software name with `-` e.g. `classic-shell`. Yes, we realize there are a lot of older packages not following this convention. + * **version** is a dot-separated identifier containing a maximum of 4 numbers. e.g. _1.0_ or _2.4.0.16_ - except for prerelease packages + +## Environmental Variables + +* `%ChocolateyInstall%` - Chocolatey installation directory +* `%ChocolateyInstall%\lib\package-name` - Package directory +* `%cd%` or `$pwd` - current directory +* Environment variable reference available in the README when using `choco new` or <Xref title="online" value="powershell-reference" anchor="variables" />. + +## Examples + +Here are some simple examples. + +> :choco-info: **NOTE** +> +> This needs updated with checksums and newer package concepts. Please run `choco new` when creating packages as it contains all of the most up to date notes. + +### chocolateyInstall.ps1 for .exe installer + +```powershell +$name = 'Package Name' +$installerType = 'exe' +$url = 'http://path/to/download/installer.exe' +$silentArgs = '/VERYSILENT' + +Install-ChocolateyPackage $name $installerType $silentArgs $url +``` + +> :choco-info: **NOTE** +> +> You have to figure out the command line switch to make the installer silent, e.g. **/VERYSILENT**. This changes from installer to installer. + +### chocolateyInstall.ps1 for .msi installer + +> :choco-info: **NOTE** +> +> Please maintain compatibility with Posh v2. Not every OS we support is on Posh v2 (nor comes OOB with Posh v3+). It's best to work with the widest compatibility of systems out there. + +```powershell +$packageName = 'Package Name' +$installerType = 'msi' +$url = 'http://path/to/download/installer_x86.msi' +$url64 = 'http://path/to/download/installer_x64.msi' +$silentArgs = '/quiet' +$validExitCodes = @(0,3010) + +Install-ChocolateyPackage $packageName $installerType $silentArgs $url $url64 -validExitCodes $validExitCodes +``` + +### Parsing Package Parameters + +For a complete example of how you can use the PackageParameters argument of the `choco install` command, see this <Xref title="How-To" value="parse-package-parameters" />. + +## Tips + +* If you cannot find the installer silent mode, you can try an old tool called [Universal Silent Switch Finder 1.5.0.0](http://www.softpedia.com/progDownload/Universal-Silent-Switch-Finder-Download-180984.html) - `choco install ussf`. diff --git a/src/content/docs/en-us/create/create-packages.mdx b/src/content/docs/en-us/create/create-packages.mdx new file mode 100644 index 00000000000..f8d0cd86565 --- /dev/null +++ b/src/content/docs/en-us/create/create-packages.mdx @@ -0,0 +1,515 @@ +--- +order: 10 +xref: create-packages +title: Create Packages +description: How to start creating your own Chocolatey packages +--- +import Xref from '@components/Xref.astro'; + +# Creating Chocolatey Packages + +## Summary + +See <Xref title="What are Chocolatey Packages?" value="getting-started" anchor="what-are-chocolatey-packages" /> first. + +> :choco-info: **NOTE** +> +> When you host internal packages, those packages can embed software and/or point to internal shares. You are not subject to software distribution rights like the packages on the community feed, so you can create packages that are more reliable and secure. + +First you should determine if you are making a self-contained package or (also) using automation scripts. You should also consider creating <Xref title="automatic packages" value="automatic-packaging" /> for the best maintainability over time. + +1. Run `choco new -h` to get a feel for what you can pass e.g `choco new bob` (to create a package named `bob`) +1. Note all the rules below. This will help you, especially in publishing to the community feed (https://chocolatey.org) + +### Self-Contained? + +If you have a self-contained package, you can remove the automation scripts +entirely and just include the runtime executables, they will automatically get shimmed, +which puts them on the path. Ensure you have the <Xref title="legal right to distribute" value="legal" /> +the application though. You should read up on the Shim Generation section +below though to familiarize yourself on what to do with GUI applications +and/or ignoring shims (also known as batch redirects). + +### Including the Software Installer in the Package + +Sometimes called embedding the binaries, there are functions in the automation scripts you can call that will use the installers directly from the package instead of downloading first. This makes for the most reliable and deterministic packages, but ensure you have the <Xref title="legal right to distribute" value="legal" /> the software first if publishing to a public location (like the community package repository). + +### Automation Scripts + +You have a powerful use of Chocolatey, as you are using PowerShell. So you can do just about anything you need. Choco has some very handy <Xref title="built-in functions" value="powershell-reference" /> that you can use, these are sometimes called +<Xref title="helpers" value="powershell-reference" />. + +## Table of Contents + +1. [Rules](#rules-to-be-observed-before-publishing-packages) +1. [Encoding](#character-encoding) +1. Learning about NuGet (and Chocolatey) Packages in general - [Information](#okay-how-do-i-create-packages) and [Nuspec](#nuspec) +1. [Description/Release Notes Recommendations](#package-description-and-release-notes) +1. [Limit Windows Versions](#install-only-on-some-versions-of-windows) +1. [Install paths](#installation-paths) +1. [Upgrading](#upgrading) and [Uninstalling](#uninstalling) +1. [Naming your package](#naming-your-package) +1. [Versioning](#versioning-recommendations) (and [package fix version notation](#package-fix-version-notation)) +1. [Icons](#package-icon-guidelines) +1. [Exclude executables from shims](#how-do-i-exclude-executables-from-getting-batch-redirects) +1. [Make shim for GUI application](#how-do-i-set-up-batch-redirects-for-applications-that-have-a-gui) +1. [Localization](#internationalization-and-localization-of-packages) +1. [Building](#build-your-package) / [Testing](#testing-your-package) / [Pushing](#push-your-package) +1. <Xref title="Maintainer magic - automatically updating packaging" value="automatic-packaging" /> +1. <Xref title="Taking over existing package" value="package-maintainer-handover" /> + +## Quick Start Guide + +If you think you got what it takes and just want to know the basic steps to get a package out, there is a special <Xref title="Quick Start Guide" value="create-packages-quick-start" /> for you. + +> :choco-info: **NOTE** +> +> This doesn't exempt you from observing the rules, requirements and guidelines (noted below). + +## Rules to be Observed Before Publishing Packages + +There are a few rules that you have to follow before pushing packages to chocolatey.org: + +1. **Don't package illegal software.** Packages of software that is illegal in most countries in the world are prohibited to publish on Chocolatey.org. This applies in particular to software that violates the copyright, pirated software and activation cracks. Remember that this also affects software that is especially designed to accomplish software piracy. +1. **Do not include software in a package that you don't have the right to distribute.** Please see <Xref title="Distribution Rights" value="legal" anchor="distributions" /> for more information. Any package found not in compliance with this will be removed immediately. Instead you can download binaries from official distribution locations at runtime. +1. **Packaging commercial or trial software?** Clearly state this in the package description. Does it require an activation key? Is there a trial period if you don't have a key? How long is this trial period? +1. **Only post publicly relevant packages.** You should consider whether this package is useful for others. If that is not the case, it shouldn't be published on Chocolatey.org. Reasons for that can be if the package would require a very customized configuration. You can host your personal packages on [MyGet](https://www.myget.org/) and still be able to install them with Chocolatey using the `-source` parameter. +1. **Do not publish junk or malware** packages. +1. **Don't package software _containing_ malware.** Packages of software that comes with bundled adware, spyware or other unrelated software that installs even in silent mode, are not allowed. But if you can figure out how to install the desired software without this unrelated software, it is allowed to publish the package. That can be accomplished for example with additional command line switches or by adding specific values to the registry. Examples of packages which make use of this are [PDFCreator](https://github.com/stack72/MyChocolateyPackages/tree/master/PDFCreator) and [CCleaner](https://github.com/tonigellida/chocolateyautomaticpackages/tree/master/ccleaner). +1. **Don't package software that is already packaged**. Use the search function in the [Chocolatey Community Repository](https://community.chocolatey.org/packages) and look if there is already a package for the desired software. If you would like to improve the already existing package or if you have suggestions, just contact the package maintainer or open a pull request at the maintainer’s package repository. +1. **Don't include other required software if there's a package of it.** If a package requires other software of which there is already a package, the already existing package should be used as [dependency](http://docs.nuget.org/create/nuspec-reference#specifying-dependencies) instead. +1. **Split dependencies into multiple packages.** Try to split up packages as much as possible. If for example a program comes with additional modules/installers that are optional, make different packages for them instead of including all the things into one package. This idea is already widely applied for Linux packages, because it leads to a more lightweight system and reduces potential issues and conflicts. +1. **Use a simple intuitive lowercase name for the package**. See the [package naming guidelines](#naming-your-package) for details. (If you are a reviewer/moderator, this is considered a guideline). + +Is your package unqualified for the Chocolatey feed, but you like to be able to install it through Chocolatey? One alternative would be to host your package on MyGet. See <Xref title="Hosting Chocolatey Packages on MyGet" value="hosting-chocolatey-packages-on-myget" />. + +## Character Encoding + +- **Use the UTF-8 character encoding** for the `*.nuspec` and `*.ps1` files. If you don’t respect this rule, some characters are not displayed correctly in the [Chocolatey Community Repository](http://community.chocolatey.org/packages), because if defaults to `UTF-8`. +- **Byte Order Mark (BOM) is optional for `*.nuspec`.**. A `BOM` is not required but it won't hurt anything if it is found. +- **PowerShell scripts need to be saved in UTF-8 with `BOM`**. PowerShell is ignoring the standards and needs a `BOM` in order to recognize scripts as `UTF-8`. Otherwise it processes non `ASCII` characters incorrectly. +- Don’t use the default Windows Editor. While newer versions of Notepad have improved its ability to handle line endings and UTF-8 w/out BOM, it is still behind in capabilities as compared to other editors. Alternatives: + - [Visual Studio Code](https://community.chocolatey.org/packages/vscode) + - [Notepad++](http://community.chocolatey.org/packages/notepadplusplus) + - [Geany](http://community.chocolatey.org/packages/geany) +- Use this **XML declaration**: `<?xml version="1.0" encoding="utf-8"?>`. + +> :choco-info: **NOTE** +> +> There is a lot of confusion in the world of character encodings: For example, `ANSI` is an incorrect term for the internal Windows character encodings, e. g. `Windows-1252`. But you should not use this encoding family anyway. + +## What Version of the Software Should I Package? + +The main release of a product versions are usually sufficient. If there are also beta versions available and you would rather have that, then please create both the official release and the beta (and set the beta as a prerelease when pushing the item to community.chocolatey.org). Regular users of packages may want to use official releases only and not betas. + +> :choco-info: **NOTE** +> +> Both of these have the SAME package id, just different versions. + +## How do I Create Packages? + +There are three main elements to a Chocolatey package. Only the nuspec is required (#1 below). + +1. <Xref title="Nuspec" value="create-packages" anchor="nuspec" /> +1. <Xref title="chocolateyInstall.ps1" value="chocolatey-install-ps1" /> - check out the <Xref title="helper reference" value="powershell-reference" /> +1. any application files to include (it is highly suggested that you are the author in this case or you have the right to <Xref title="distribute files" value="legal" />). EXE files in the package/downloaded to package folder from chocolateyInstall.ps1 will get a link to the command line. +1. chocolateyUninstall.ps1, for uninstalling your package. See <Xref title="helper reference" value="powershell-reference" /> for functions available in your script. + +> :choco-info: **NOTE** +> +> Please maintain compatibility with Posh v2. Not every OS we support is on Posh v2 (nor comes OOB with Posh v3+). It's best to work with the widest compatibility of systems out there. + +There is a video showing the creation of a package: [http://www.youtube.com/watch?v=Wt_unjS_SUo](http://www.youtube.com/watch?v=Wt_unjS_SUo) +The video is a bit outdated in showing the contents of the chocolateyInstall.ps1. Have a look at what the [chocolateyInstall.ps1](https://github.com/ferventcoder/chocolatey-packages/blob/master/manual/windirstat/tools/chocolateyInstall.ps1) looks like now: + +```powershell +$packageName = 'windirstat' +$fileType = 'exe' +$url = 'http://prdownloads.sourceforge.net/windirstat/windirstat1_1_2_setup.exe' +$silentArgs = '/S' + +Install-ChocolateyPackage $packageName $fileType $silentArgs $url +``` + +## When Will my Custom Scripts be Run? + +The table below shows which scripts are available, and which command(s) will cause them to be run. + +Script Name | Install | Upgrade | Uninstall +-----------------------------------------------|---------|---------|---------- +chocolateyBeforeModify.ps1 | | Yes | Yes +chocolateyInstall.ps1 | Yes | Yes | +chocolateyUninstall.ps1 | | | Yes + +> :choco-info: **NOTE** +> +> In the upgrade scenario, the chocolateyInstall.ps1 script will be the one included in the new package. The chocolateyBeforeModify.ps1 script will be the one from the previously installed package. + +## Nuspec + +The `Chocolatey` Windows package manager uses the same infrastructure as [NuGet](http://nuget.org/), the Visual Studio package manager by Outercurve Foundation (sponsored by Microsoft). Therefore packages are based on the same principles. One of those is a package description (specification) in `xml` format, known as the `Nuspec`. + +The `Nuspec` contains basic information such as the version, license, maintainer, and package dependencies. `Chocolatey` includes additional optional functionality on top of [NuGet's Nuspec format](http://docs.nuget.org/docs/reference/nuspec-reference) - the best way to determine currently supported features is to create a test package, and look at the generated nuspec file. + +`choco new testpackage` + +> :choco-info: **NOTE** +> +> If your package uses recently introduced functionality, you might want to include `chocolatey` as a dependency with the version being the lowest version that has the introduced functionality. Otherwise the installation could fail for users with an older version of `Chocolatey` installed. + +You can indicate the `Chocolatey` dependency like any other dependency. For example: + +```xml + <dependencies> + <dependency id="chocolatey" version="0.9.8.21" /> + </dependencies> +``` + +Logically, the version is based on the lowest compatible version. But if you don't know and used a lot of sorcery in your package, depend on the version of `Chocolatey` that you succesfully tested your package on. + +**See also:** [NuGet Version Reference](http://docs.nuget.org/docs/reference/versioning) + +## How do I Create a New Package? + +- **Generate new package**: + - `choco new -h` will get you started seeing options available to you. + - Once you figured out all of your options, you should move forward with generating your template. + +## Install Only on Some Versions of Windows + +Right now if the software the package installs is only supported on particular versions of Windows, you should absolutely fail the package. An installed package indicates success. If you pass a warning message but don't also throw an error, that means the package installed successfully. Folks using the package are going to be confused because they will then expect that the underlying software is also installed. The software itself may throw a cryptic error, which will lead to questions from the community about why it is broken (when it is just unsupported). Do yourself a favor and check the version of Windows and throw an error if it is not a supported version. Under no circumstances should you bypass with a warning, because a warning is still a success. + +There is at least one noted exception to this and that is low-level packages that are meant as dependencies that need to be present even if they do not install anything. These are things like KBs that only need to be installed on some versions of Windows. If the package failed and it was a dependency of a higher level package that installed software, it would cause issues attempting to install that software on different versions of Windows. Since about 5% of the packages apply to this exception, stick with the above thoughts for packages. + +> :choco-info: **NOTE** +> +> We will ultimately enhance the nuspec and take care of this for you automatically. Until we get there, follow the above avenue. + +## Installation Paths + +As the package maintainer, you decide where the packaged application is installed or extracted to. Depending on your type of application (see _"What distinction does Chocolatey make between an installable and a portable application?"_ at the bottom of the <Xref title="FAQ" value="faqs" />) there are a couple of suitable locations (not listed in any particular order): + +### 1. The default installation path of your .msi/.exe setup file + +The original creator probably had a reason for choosing a specific default installation path. +If you think, the user should be able to customize this path and you, the package maintainer, know how to pass a custom path on to the installer, then you should use `%ChocolateyBinRoot%`. + +### 2. The Package Directory in `%ChocolateyInstall%\lib\mypackage` + +You can extract the application within the package directory itself (or even ship an extracted version with the package). This allows Chocolatey to automatically find executables and put those on `%path%`. + +### 3. Path Provided by the `Get-ToolsLocation` Helper + +> :choco-warning: **WARNING** +> +> It was previously possible to use the helper `Get-BinRoot` for backwards compatibility. This is still possible in v1.0.0, however its use is not recommended as the function is now deprecated, and will be removed in v2.0.0. + +The path returned by the helper `Get-ToolsLocation` can be used as the parent directory for the installation. `Get-ToolsLocation` will return the value of the environment variable `%ChocolateyToolsLocation%`. If the value does not contain a drive reference, the system drive will be prepended. If the environment variable is not set, the default path (`C:\tools`) will be returned. + +As an example, [GeoServer](https://github.com/AdmiringWorm/chocolatey-packages/blob/0f3b93ab7b067b265a06349a68297d07b1598e64/automatic/geoserver/tools/chocolateyuninstall.ps1#L8) uses `%ChocolateyToolsLocation%`. If the environment variable is not set, it will be set to `c:\tools` and GeoServer will install to `C:\tools\GeoServer` by default. If `%ChocolateyToolsLocation%` is set to "C:\Common\bin", GeoServer installs to `C:\Common\bin\GeoServer`. + +`%ChocolateyToolsLocation%` gives the Chocolatey user a way of controlling where packages are installed. If you want to allow customizing the installation path, then this is currently the way to go. + +### Make it clear in the package description + +No matter how you decide, you are advised to state the default installation directory in your package description. This prevents confusion about where the application will end up being installed. + +If you allow customizing the installation path, then append instructions on how to do that, too. + +### Windows Environment Variables + +Chocolatey installations are advised to be performed while running "as administrator". Because of this it is important that you understand that some windows environment variables will be pinned to the administrator user and not the installation user at least +one circumstance. + +On many systems there are multiple accounts. The issue can occur on a system where there is an admin user with an account type of "Administrator", let's call this user **admin**. There is another user with an account type of "Standard User" lets call this second user **user**. + +> :choco-info: **NOTE** +> +> "Administrator" and "Standard User" are the 2 account types that Windows 10 supports. + +When **admin** chooses to run a `cmd` shell with elevated privileges by right clicking and selecting "Run as administrator". **admin** will be warned by "User Access Control" that they are elevating privileges via a dialog that **admin** can dismiss. The command shell will run the shell with administrator rights from the **admin** account. All good! + +When **user** chooses to run a `cmd` shell by right clicking and selecting "Run as administrator", **user** will be asked to enter the credentials for **admin** account to gain administrator rights. **user** will need to enter **admin**'s credentials and then the command shell will run the shell with administrator rights from the **admin** account. Wait... what? + +Yes, really. An elevated command shell for **user** will run as if it is the **admin** user! + +That means that when your installer depends on any environment variables to find install locations there is a scenario where the environment variables are from a different user (e.g. **admin**) than the user installing the package. + +The known affected environment variables are: `APPDATA`, `LOCALAPPDATA`, `TEMP`, `TMP`, `USERNAME`, `USERPROFILE` + +Example Settings for a user named "administrator": + +``` +APPDATA=C:\Users\administrator\AppData\Roaming +LOCALAPPDATA=C:\Users\administrator\AppData\Local +TEMP=C:\Users\administrator\AppData\Local\Temp +TMP=C:\Users\administrator\AppData\Local\Temp +USERNAME=administrator +USERPROFILE=C:\Users\administrator +``` + +A simple way around this is to ask the user to set environment variables that can override environment variables. Or alternatively, instruct your users to set the necessary environment variables in the elevated privileges command shell. + +Example instructions: + +> Within the administrator command shell you will need to set 2 environment variables: +> +> ``` +> set LOCALAPPDATA=C:\Users\<USERNAME>\AppData\Local +> set USERPROFILE=C:\Users\<USERNAME> +> ``` + +## Upgrading + +Prior to choco version 0.9.10, there is no dedicated automation script for upgrade scenarios. Instead, your <Xref title="chocolateyInstall.ps1" value="chocolatey-install-ps1" /> script should support installing/upgrading on top of any previous versions of your package. + +More recent versions of choco (0.9.10+) give you the option of supplying a `chocolateyBeforeModify.ps1` script. +If applicable, the version of this script from the currently installed package will be run before subsequent +chocolateyInstall or chocolateyUninstall scripts. + +## Uninstalling + +Uninstalling is handled by a `chocolateyUninstall.ps1` script, which should be in your package's `tools` directory, next to <Xref title="chocolateyInstall.ps1" value="chocolatey-install-ps1" />. All the usual <Xref title="helper reference" value="powershell-reference" /> are available. If your package doesn't uninstall cleanly, people will get grumpy because they'll have to manually clean up after you. Be a good human being and write an uninstaller. + +## Dependency Chaining + +You can make packages that depend on other packages just by adding those dependencies to the nuspec. Take a look at [ferventcoder.chocolatey.utilities nuspec](https://github.com/ferventcoder/chocolatey-packages/blob/master/manual/ferventcoder.chocolatey.utilities/ferventcoder.chocolatey.utilities.nuspec). + +## Avoid Folders Named "content" + +Do not use a folder named "content" in your package. NuGet attaches a special meaning to this folder and will not allow you to have dependencies on packages that have content folders without also having a content folder. It's turtles all the way down until we or NuGet removes this limitation. + +## Naming Your Package + +The **title** of your package (`<title>` tag in the nuspec) should be the same as the name of the application. +Follow the official spelling, use upper and lower case and don’t forget the spaces. +Examples of correct package titles are: _Google Chrome_, _CCleaner_, _PuTTY_ and _FileZilla_. +The title will appear on the left side in the package list of the Chocolatey Community Repository, followed by the version. + +There are some guidelines in terms of the package **ID** (`<id>` tag in the nuspec): + +* **Use only lowercase letters**, even if you used uppercase letters in the package title. + (This is considered a guideline because it is correctable in other ways). + Once a package is submitted (even prior moderation), the Chocolatey Community Repository will always show the id with the casing of the first package version. + In addition, changing the casing of the package id may have negative side effects on dependencies (note: this last statement needs verified). +* If the original application name consists of compound words without spaces (CamelCase), just as _MKVToolNix_, _TightVNC_ and _VirtualBox_, the package id’s are simply the same (but **lowercase** of course): `mkvtoolnix`, `tightvnc`, and `virtualbox`. +* If the name of the application contains multiple words separated by spaces, such as _MusicBrainz Picard_ or _Adobe Reader_, replace the spaces with the hyphen-minus character “-” (U+002D), or just omit them. + **Don’t use dots**. + Dots should be used only if the original application name contains dots (for example, _Paint.NET_). + Hence the correct id’s of the previously mentioned applications can be `musicbrainz-picard` or `adobereader`. + We recommended you use the hyphen method when there are long package names to ensure they remain readable. +* For sub-packages, use the hyphen-minus character “-” (U+002D) as the separator, not a dot. + Sub-packages are intended for separate packages that include extensions, modules or additional features/files for other applications. + Therefore `keepass-langfiles` is a proper package id, because it adds the language files for the main application which in this case is _KeePass_. + Another example is `libreoffice-help` for the help pack for _LibreOffice_, the open source office suite. +* If you want to package an open source application, first search for any pre-existing packages on services like [Repology](https://repology.org/). + If there are already published packages for the application on another repository, **use the same package id**. + This will make it easier for users which work with multiple platforms, so they don't have to remember and use different package names. +* Do not use `chocolatey` in your package ID as this indicates an official package. You can use `choco` instead, but you must include the word 'Unofficial' in the package title. + +These guidelines are already commonly applied on packages for all major Linux distributions, because they lead to a more consistent user experience for software repositories, result in easier to remember package IDs, and reduce unnecessary considerations on naming packages for package creators. + +Note that some packages in the Chocolatey Community Repository don't follow these guidelines; many of these were created before these guidelines were introduced. +New packages should follow the guidelines to improve the overall experience for users going forward. + +If you are going to offer a package that has both an installer and an archive (zip or executable only) version of the application, create three packages - see <Xref title="Portable vs Installable" value="faqs" anchor="what-distinction-does-chocolatey-make-between-an-installable-and-a-portable-application" /> and <Xref title="Install, Portable, and Meta/Virtual Packages" value="faqs" anchor="what-is-the-difference-between-packages-no-suffix-as-compared-to.install.portable" />. + +### Naming Packages to Allow for Side-by-Side Installation + +For some software, it is expected that users may want multiple different versions installed simultaneously. +This has commonly been seen with software like Python which offer some kind of runtime dependency that other scripts or applications depend on. + +In the past, Chocolatey CLI supported a "side-by-side" installation method which could be used for this purpose to install multiple distinct versions side-by-side, on the same machine. +This has been deprecated and is no longer supported in version 2.0.0 due to many issues with the use and implementation of the feature. + +#### If the Software You're Creating a Package for Expects **Side-by-Side Installations of Different Versions** + +1. Create _separate package IDs_ for each major version (or major + minor version, depending on the expectations of users) which include the version number in the ID. + For example, if the package ID would be `python`, the package for major version 2 would be `python2`, or a package for specifically the 2.7 branch might be `python27` or `python2-7`. + These individual versioned packages can be updated as normal, as long as that major and/or minor version is still receiving further updates. +1. Create a <Xref title="**metapackage**" value="getting-started" anchor="terminology" /> for the overall product with a package version for each of the versioned packages. + In other words, create another package (this time without a version number in the ID), which contains only a `nuspec` file and add a dependency on the versioned package. + Following the above example for Python, we'd create a package with the ID `python` at version `2.0.0` that takes a dependency on the `python2` package. +1. New versions of the metapackage should be published for "sub-versions" of the dependency package as well. + For example, if Python version `3` is released, we'd create a new version of the `python` package with its version set to `3.0.0`, which depends on a new `python3` package. + +#### If the Software You're Creating a Package for Expects **Side-by-Side Installations of the Same Version** + +A possible example might be where multiple different instances of the software are being installed into different install directories. + +Chocolatey does not currently support this functionality. +This functionality can be mimicked by making use of `--force` to forcibly overwrite an already-installed package and providing an argument or package parameter that the package can use to direct the installation to install into a different directory. +However, Chocolatey will only be aware of the most-recently installed copy of the software, and will only be able to provide updates to that single installation of the software in most cases. +As a result, this particular configuration is not supported. + +A potential workaround for users maintaining their own package repositories is to maintain separate instances of the same package under different package IDs, where each package ships the same software, but is scripted to install to a different directory. +For example, you can create a `python3-localtoolsfolder` and a `python3-programfilesfolder` package which have the same contents, with only slight differences in the parameters passed to the install functions to ensure they install in the desired locations. +The recommended naming conventions here are similar to sub-packages, where the package is named after the primary package ID followed by a dash and a discriminator, likely named after the install location or referencing the purpose of the additional package(s). + +## Package Description and Release Notes + +The `<description>` of the package should contain a short text or at least a few words about the software for which the package is made. Here are a few things that should be respected: + +- The description should always be written in English, even if the packaged software does not provide an UI in English. You can also include the software’s description in its original language, but insert it after the English description. +- The description should not just contain a repetition of the package name. +- It should not just consist of a link where more information can be found. For that purpose there’s already `<projectUrl>`. +- The contents of `<description>` and also `<releaseNotes>` are parsed as Markdown, so don’t insert line breaks in the middle of sentences. Remember to add empty lines to separate paragraphs and add an empty line before a list. + +## Versioning Recommendations + +Versioning can be both simple and complicated. The best recommendation is to use the same versioning that the installable/portable application uses. With Chocolatey you get four version segments. If the application only uses 1, 2 or 3 version segments, follow suit. + +If the 4th segment is used, some folks like to drop the segment altogether and use that as only the package fix notation using one of the notations in the next section. There is no recommendations at this time. + +### Package Fix Version Notation + +Package fix version notation ONLY applies when you are making a fix to the package because the existing version of a package is incorrect in some way. So if the software is `1.1.0`, in a normal scenario the package version should be `1.1.0`. If you find that the `1.1.0` package has an issue and you need to fix the package but keep the same version of the software, that is where package fix version notation comes into play. You would end up with both a `1.1.0` package and a `1.1.0.YYYYMMDD` version of the package. + +> :choco-info: **NOTE** +> +> This doesn't apply to packages on the community feed (aka https://community.chocolatey.org/packages) that are still under review (not yet approved). Please read the instructions given in email for resubmitting the same version. + +If you need to fix an approved package for some reason, you can use the fourth version element (aka segment) for a package fix notation. There are two recommended methods of package fix version notation: + +- **Date (Year/Month/Day)** - Some folks use year month day package fix notation (yyyyMMdd as in 20120627 seen as 1.2.0.20120627) +- Sequential - **Not recommended** - Some folks use sequential numbering (0, then 1, etc as in 0 for no fix, 1 for first fix and so on seen as 1.2.0.0 and 1.2.0.1). + +Date Package Fix Version Notation is recommended because one can ascertain what it is immediately upon seeing it, where sequential is not obvious on sight whether it is part of the software versioning or something special with the package. + +Package fix version notation is only acceptable in the fourth segment. Do not use any of the other segments for package fix notation. If an application only uses 1 or 2 version segments, add zeros into the other segments until you get to the 4th segment (i.e. 1.0.0.20120627). + +When the fourth segment is already used, it is recommended to add two zeroes (00) to the end of the version. Then when you need to fix, you just increment that number. So if the package was ruby and the version was 2.0.0-p353, the package is 2.0.0.35300 (adding the two zeroes at the end). Then a fix would be 2.0.0.35301 and so on. + +> :choco-warning: **WARNING** +> +> If you decide to add a secondary set of numbers to the fourth segment, you MUST ALWAYS include that secondary set of numbers while the other three version segments are the same. The reason - if you fix `.1` to `.100`, then release `.2`, `.100` is greater than `.2` because versioning doesn't look at the ".", only the number in the element. So `100` is greater than `2`. + +## Internationalization and Localization of Packages + +For Chocolatey, internationalization and localization of packages is very important, because it has users from all over the world. Many applications support multiple languages, but they use several different methods to achieve that. Therefore, there is no standard how internationalization/localization has to be integrated into packages. However, here are a few examples of packages that use various techniques. You can use them as inspiration for new packages: + +* The ideal situation is when an application determines the user's system language and automatically installs with that language. Then you don't have to take any action relating to localization, because the application already handles that. Examples of such applications are [VLC Media Player](https://community.chocolatey.org/packages/vlc) and [LibreOffice](https://community.chocolatey.org/packages/libreoffice). +* When an application provides different installers for different languages, you should determine the system language and download the appropriate installer. The package for [Mozilla Firefox](https://community.chocolatey.org/packages/Firefox) ([source code](https://github.com/chocolatey-community/chocolatey-packages/tree/master/automatic/Firefox)) uses this method. +* Sometimes an application installer or executable has already integrated all supported languages, but doesn't automatically select the system language during a silent install. Often you can pass an additional install parameter to select the desired language. This is used for example in the [CCleaner](https://community.chocolatey.org/packages/ccleaner) package ([source code](https://github.com/tonigellida/chocolateyautomaticpackages/tree/master/ccleaner)). +* Some application use separate language files which must be downloaded separately and put somewhere in the application directory. It is best when you create a separate package for the language files. If your package id is `packageid`, then call it `packageid-langfiles`. The [language files package for KeePass](https://community.chocolatey.org/packages/keepass-langfiles) is an example how this can be achieved. + +## Package Icon Guidelines + +If there is an icon which is suitable for your package, you can specify it in the `<iconUrl>` tag in the nuspec. But there are a few things you should consider: + +* **Avoid hotlinking icons from sites where you don’t have control over the file.** If you have a packages repository (recommended), use your own copy of the icon and put it there. +* **Use a static CDN for icon URLs that permits you to serve files hosted in a repository on GitHub.** Some CDN services cache files permanently and it's therefore best to use a specific tag or commit URL, not a branch URL. While we don't make any recommendations about specific services, the more popular ones used by maintainers are [jsDelivr](https://www.jsdelivr.com/), [Statically](https://statically.io/) and [Githack](https://raw.githack.com/). +* **Avoid using GitHub raw links** (`https://raw.githubusercontent.com/...`). They are not intended to be used as CDN. +* **Use the software’s icon if one is available, not the logo.** This blog post explains the difference between logos and icons: http://blog.designcrowd.com/article/353/differences-between-logos-and-icons. If the software of your package doesn’t have an icon, but a logo with text and an image, you can extract the image with your favorite image editor and use that as package icon. An example is [MySQL’s dolphin](https://community.chocolatey.org/packages/mysql). +* **Use package icons with at least 128 pixels in width or height** if available. However, avoid very high resolutions, because this would only unnecessarily increase the page load time. If there are only icons with less than 128 pixels available, choose the icon with the highest resolution you can find without upscaling it. Don’t use low resolution favicons as package icons. +* Use icons with transparent background if available. +* Don’t use distorted or blurry icons. +* The package list in the Chocolatey Community Repository shows the icons with a maximum of 48 pixels in width/height. Application logos with very detailed graphics that are barely visible at that dimension are not suitable as package icons. +* **PNG is the preferred format** for raster package icons. Avoid ICO, GIF and JPEG graphics. +* Good sources for package icons are the official desktop icons of the corresponding application you want to make a package of. The icons can be extracted from the app executables using tools like [BeCyIconGrabber](https://community.chocolatey.org/packages/becyicongrabber). Remember to take the icon with 128 px or more and save it as PNG file. + +The icon shown on the community.chocolatey.org package page is saved, and served, locally to mitigate against cross scripting attacks and to prevent getting _non HTTPS assets_ errors on the website. Sometimes the page loads faster than the image can be served and the default image gets cached and as a result the new package icon may not be shown until you clear the browser cache for community.chocolatey.org and wait 3 hours before reloading the page. + +<a name="how-do-i-exclude-executables-from-getting-batch-redirects"></a> + +## How Do I Exclude Executables from Getting Shims? + +If you have executables in the package or brought into the package folder during PowerShell run and you want to exclude them you need to create an empty file named exactly like (**case sensitive**) the executable with `.ignore` suffixed on the end in the same directory where the executable is or will be. + +Example: In the case of `Bob.exe` you would create a file named `Bob.exe.ignore` and that file would not get a redirect batch link. The Chocolatey package has an example of that. To further expand, `bob.exe.ignore` would not work because it doesn't have the correct casing. + +Here's a great [programmatic example](https://github.com/ferventcoder/chocolatey-packages/blob/6ea7c087bd999d428a564b5d7e236ae998ef72e9/automatic/git.commandline/tools/chocolateyInstall.ps1#L13-L20): + +```powershell +$files = get-childitem $installDir -include *.exe -recurse + +foreach ($file in $files) { + #generate an ignore file + New-Item "$file.ignore" -type file -force | Out-Null +} +``` + +<a name="how-do-i-set-up-batch-redirects-for-applications-that-have-a-gui"></a> +## How do I set up shims for applications that have a GUI? +If you don't want to see a hanging window when you open an application from the command line that was set up with Chocolatey, you want to create a file next to the executable that is named exactly the same (**case sensitive**) with `.gui` suffixed on the end. + +Example: In the case of `Bob.exe` you would create a file named `Bob.exe.gui` and that file would be set up as a GUI application so the window will call it and then move on without waiting for it to finish. Again, `bob.exe.gui` would not work because it doesn't have the correct casing. + +## Build Your Package + +Open a command line in the directory where the nuspec is and type <Xref title="`choco pack`" value="choco-command-pack" />. That's it. + +## Testing Your Package + +> :choco-info: **NOTE** +> +> We strongly suggest the following should be performed in a VM and not on your machine. + +> :choco-info: **NOTE** +> +> Testing your package can be done in the same way as the verifier - take a look at [Chocolatey Verifier Testing](https://github.com/chocolatey-community/chocolatey-test-environment). + +To test the package you just built, open a command line shell and navigate to the directory where the `*.nupkg` file is located. Then type: + +```powershell +choco install packageName --debug --verbose --source . +``` + +This will install the package right out of your source. As you find things you may need to fix, using `--force` (`-f`) will remove and reinstall the package from the updated `*.nupkg`. If you are specifically testing `chocolateyBeforeModify.ps1`, you need to be testing upgrade and uninstall scenarios. You need to install a version of the package with this file **first** as before modify is like uninstall, it runs from the installed package, not the package you are installing (like `chocolateyInstall.ps1` does). + +> :choco-info: **NOTE** +> +> Using Force `--force` (`-f`) should only be done in subsequent testing where you are reinstalling the same package that you've changed and should NOT be used in regular use scenarios. It should definitely not be in scripts. + +> :choco-info: **NOTE** +> +> If you are using a Semver dash in your package version (such as 1.0.0-beta), you will need to use the `--pre` switch or else you will get *Unable to find package* errors from `choco install`. You can also specify `-version 1.0.0-beta` to try to install that exact version. + +`.` points to the current directory. You can specify multiple directories separated by a semicolon; + +When your `nuspec` specifies dependencies that are not in your source, you should add their paths to the source directory. E.g. in the case of Chocolatey itself: + +```xml +<dependencies> + <dependency id="chocolatey" version="0.9.8.20" /> +</dependencies> +``` + +You'll need to append the API path like so: +`--source "'.;https://community.chocolatey.org/api/v2/'"` (note the double quotes bookending the apostrophes here, use `%cd%` in cmd.exe or `$pwd` in Powershell.exe if `.` doesn't resolve). See <Xref title="passing options with quotes" value="choco-commands" anchor="how-to-pass-options-switches" />. + +> :choco-info: **NOTE** +> +> If you need to do this, please ensure you run `choco pack` first. This method of passing a source won't work calling a nuspec or nupkg directly as it will override the source passed to the local folder. + +You can also use the `--debug` switch on `choco install` to provide more information. + +> :choco-info: **NOTE** +> +> Do not call install with `.nupkg` - pointing to a file explicitly overrides source. You must call your install with the package name, not the nupkg file and location. You've already specified for choco to look in a local source with `--source "'.;https://community.chocolatey.org/api/v2/'"`. Call `choco install dude --source "'.;https://community.chocolatey.org/api/v2/'"`, not `choco install .\dude.nupkg --source "'.;https://community.chocolatey.org/api/v2/'"`. + +### Alternative Testing Strategy + +You can also type `choco install --force --debug --verbose path/to/nuspec` and choco will build the nupkg and attempt to install it. + +> :choco-info: **NOTE** +> +> This is not recommended if you are passing install arguments or package parameters due to some weirdness, and definitely does not work with passed sources as it need to override that with the local folder once it builds the package. Most likely you will want to stick with the recommended strategy. + +## Push Your Package + +To push your package after you have built and tested it, you type `choco push packageName.nupkg --source sourceLocation` where **packageName.nupkg** is the file name of the nupkg that was built and **sourceLocation** is the location of the source you want to push to (for example, `--source "'https://push.chocolatey.org/'"` for the Chocolatey Community Repository). +You must either have set an API key for the target URL, or provide an API key directly to the `push` command via the `--api-key` option. +For example, if pushing to the Chocolatey Community Repository, you will need to have previously set an API key for `https://push.chocolatey.org/` (`choco apikey add --source "'https://push.chocolatey.org/'" --key "'API_KEY_HERE'"`). +For more information, see the reference documentation for <Xref title="`choco push`" value="choco-command-push" />. + +As of Chocolatey CLI v2.0.0, you can set the `defaultPushSource` configuration value if you frequently push packages to the same source. +For example: `choco config set --name defaultPushSource --value https://push.chocolatey.org/` + +## Automatic Packaging? + +Yes - <Xref title="Automatic Packaging" value="automatic-packaging" /> + +## Becoming a Primary Maintainer of an Existing Package + +See <Xref title="Package Maintainer Handover" value="package-maintainer-handover" /> diff --git a/src/content/docs/en-us/create/functions/format-filesize.mdx b/src/content/docs/en-us/create/functions/format-filesize.mdx new file mode 100644 index 00000000000..fee79445494 --- /dev/null +++ b/src/content/docs/en-us/create/functions/format-filesize.mdx @@ -0,0 +1,88 @@ +--- +order: 10 +xref: format-filesize +title: Format-FileSize +description: Information on Format-FileSize function +--- +import Xref from '@components/Xref.astro'; + +# Format-FileSize + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Format-FileSize.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +DO NOT USE. Not part of the public API. + +## Syntax + +~~~powershell +Format-FileSize ` + -Size <Double> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Formats file size into a human readable format. + +## Notes + +This function is not part of the API. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Format-FileSize -Size $fileSizeBytes + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Size <Double> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | 0 +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-WebFile' value='get-webfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Format-FileSize -Full`. + +View the source for [Format-FileSize](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Format-FileSize.ps1) diff --git a/src/content/docs/en-us/create/functions/get-checksumvalid.mdx b/src/content/docs/en-us/create/functions/get-checksumvalid.mdx new file mode 100644 index 00000000000..8159f765671 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-checksumvalid.mdx @@ -0,0 +1,156 @@ +--- +order: 20 +xref: get-checksumvalid +title: Get-ChecksumValid +description: Information on Get-ChecksumValid function +--- +import Xref from '@components/Xref.astro'; + +# Get-ChecksumValid + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChecksumValid.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Checks a file's checksum versus a passed checksum and checksum type. + +## Syntax + +~~~powershell +Get-ChecksumValid ` + -File <String> ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-OriginalUrl <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Makes a determination if a file meets an expected checksum signature. +This function is usually used when comparing a file that is downloaded +from an official distribution point. If the checksum fails to match the +expected output, this function throws an error. + +Checksums have been used for years as a means of verification. A +checksum hash is a unique value or signature that corresponds to the +contents of a file. File names and extensions can be altered without +changing the checksum signature. However if you changed the contents of +the file, even one character, the checksum will be different. + +Checksums are used to provide as a means of cryptographically ensuring +the contents of a file have not been changed. While some cryptographic +algorithms, including MD5 and SHA1, are no longer considered secure +against attack, the goal of a checksum algorithm is to make it +extremely difficult (near impossible with better algorithms) to alter +the contents of a file (whether by accident or for malicious reasons) +and still result in the same checksum signature. + +When verifying a checksum using a secure algorithm, if the checksum +matches the expected signature, the contents of the file are identical +to what is expected. + +## Notes + +This uses the checksum.exe tool available separately at +https://community.chocolatey.org/packages/checksum. + +Options that affect checksum verification: + +* `--ignore-checksums` - skips checksumming +* `--allow-empty-checksums` - skips checksumming when the package is missing a checksum +* `--allow-empty-checksums-secure` - skips checksumming when the package is missing a checksum for secure (HTTPS) locations +* `--require-checksums` - requires checksums for both non-secure and secure locations +* `--download-checksum`, `--download-checksum-type` - allows user to pass their own checksums +* `--download-checksum-x64`, `--download-checksum-type-x64` - allows user to pass their own checksums + +Features that affect checksum verification: + +* `checksumFiles` - when turned off, skips checksumming +* `allowEmptyChecksums` - when turned on, skips checksumming when the package is missing a checksum +* `allowEmptyChecksumsSecure` - when turned on, skips checksumming when the package is missing a checksum for secure (HTTPS) locations + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Get-ChecksumValid -File $fileFullPath -CheckSum $checksum -ChecksumType $checksumType + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -File <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | md5 +Accept Pipeline Input? | false + +### -OriginalUrl [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ChecksumValid -Full`. + +View the source for [Get-ChecksumValid](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChecksumValid.ps1) diff --git a/src/content/docs/en-us/create/functions/get-chocolateyconfigvalue.mdx b/src/content/docs/en-us/create/functions/get-chocolateyconfigvalue.mdx new file mode 100644 index 00000000000..530478d93f7 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-chocolateyconfigvalue.mdx @@ -0,0 +1,85 @@ +--- +order: 30 +xref: get-chocolateyconfigvalue +title: Get-ChocolateyConfigValue +description: Information on Get-ChocolateyConfigValue function +--- +import Xref from '@components/Xref.astro'; + +# Get-ChocolateyConfigValue + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyConfigValue.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Retrieve a value from the Chocolatey Configuration file + +## Syntax + +~~~powershell +Get-ChocolateyConfigValue ` + -ConfigKey <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This function will attempt to retrieve the path according to the specified Path Type +to a valid location that can be used by maintainers in certain scenarios. + +## Notes + +Available in 2.1.0+ + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +$value = Get-ChocolateyConfigValue -configKey 'cacheLocation' +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -ConfigKey <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ChocolateyConfigValue -Full`. + +View the source for [Get-ChocolateyConfigValue](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyConfigValue.ps1) diff --git a/src/content/docs/en-us/create/functions/get-chocolateypath.mdx b/src/content/docs/en-us/create/functions/get-chocolateypath.mdx new file mode 100644 index 00000000000..079cc00193e --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-chocolateypath.mdx @@ -0,0 +1,66 @@ +--- +order: 40 +xref: get-chocolateypath +title: Get-ChocolateyPath +description: Information on Get-ChocolateyPath function +--- +import Xref from '@components/Xref.astro'; + +# Get-ChocolateyPath + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyPath.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Retrieve the paths available to be used by maintainers of packages. + +## Syntax + +~~~powershell +Get-ChocolateyPath ` + -PathType <String> [<CommonParameters>] +~~~ + +## Description + +This function will attempt to retrieve the path according to the specified Path Type +to a valid location that can be used by maintainers in certain scenarios. + +## Notes + +Available in 1.2.0+. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +$path = Get-ChocolateyPath -PathType 'PackagePath' +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ChocolateyPath -Full`. + +View the source for [Get-ChocolateyPath](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyPath.ps1) diff --git a/src/content/docs/en-us/create/functions/get-chocolateyunzip.mdx b/src/content/docs/en-us/create/functions/get-chocolateyunzip.mdx new file mode 100644 index 00000000000..87124794f12 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-chocolateyunzip.mdx @@ -0,0 +1,151 @@ +--- +order: 50 +xref: get-chocolateyunzip +title: Get-ChocolateyUnzip +description: Information on Get-ChocolateyUnzip function +--- +import Xref from '@components/Xref.astro'; + +# Get-ChocolateyUnzip + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyUnzip.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Unzips an archive file and returns the location for further processing. + +## Syntax + +~~~powershell +Get-ChocolateyUnzip ` + [-FileFullPath <String>] ` + -Destination <String> ` + [-SpecificFolder <String>] ` + [-PackageName <String>] ` + [-FileFullPath64 <String>] ` + [-DisableLogging] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This unzips files using the 7-zip command line tool 7z.exe. +Supported archive formats are listed at: +https://sevenzip.osdn.jp/chm/general/formats.htm + +## Notes + +If extraction fails, an exception is thrown. + +If you are embedding files into a package, ensure that you have the +rights to redistribute those files if you are sharing this package +publicly (like on the [community feed](https://community.chocolatey.org/packages)). Otherwise, please use +Install-ChocolateyZipPackage to download those resources from their +official distribution points. + +Will automatically call Set-PowerShellExitCode to set the package exit code +based on 7-zip's exit code. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# Path to the folder where the script is executing +$toolsDir = (Split-Path -parent $MyInvocation.MyCommand.Definition) +Get-ChocolateyUnzip -FileFullPath "c:\someFile.zip" -Destination $toolsDir +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -FileFullPath [<String>] +Property | Value +---------------------- | ----- +Aliases | file +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Destination <String> +Property | Value +---------------------- | ------------- +Aliases | unzipLocation +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -SpecificFolder [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -PackageName [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -FileFullPath64 [<String>] +Property | Value +---------------------- | ------ +Aliases | file64 +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -DisableLogging +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ChocolateyUnzip -Full`. + +View the source for [Get-ChocolateyUnzip](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyUnzip.ps1) diff --git a/src/content/docs/en-us/create/functions/get-chocolateywebfile.mdx b/src/content/docs/en-us/create/functions/get-chocolateywebfile.mdx new file mode 100644 index 00000000000..f27f22cdadd --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-chocolateywebfile.mdx @@ -0,0 +1,243 @@ +--- +order: 60 +xref: get-chocolateywebfile +title: Get-ChocolateyWebFile +description: Information on Get-ChocolateyWebFile function +--- +import Xref from '@components/Xref.astro'; + +# Get-ChocolateyWebFile + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Downloads a file from the internet. + +## Syntax + +~~~powershell +Get-ChocolateyWebFile ` + -PackageName <String> ` + -FileFullPath <String> ` + [-Url <String>] ` + [-Url64bit <String>] ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-Checksum64 <String>] ` + [-ChecksumType64 <String>] ` + [-Options <Hashtable>] ` + [-GetOriginalFileName] ` + [-ForceDownload] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will download a file from a url, tracking with a progress bar. +It returns the filepath to the downloaded file when it is complete. + +## Notes + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Get-ChocolateyWebFile '__NAME__' 'C:\somepath\somename.exe' 'URL' '64BIT_URL_DELETE_IF_NO_64BIT' + +~~~ + +**EXAMPLE 2** + +~~~powershell + +# Download from an HTTPS location +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +Get-ChocolateyWebFile -PackageName 'bob' -FileFullPath "$toolsDir\bob.exe" -Url 'https://somewhere/bob.exe' +~~~ + +**EXAMPLE 3** + +~~~powershell + +# Download from FTP +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +Get-ChocolateyWebFile -PackageName 'bob' -FileFullPath "$toolsDir\bob.exe" -Url 'ftp://somewhere/bob.exe' +~~~ + +**EXAMPLE 4** + +~~~powershell + +# Download from a file share +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +Get-ChocolateyWebFile -PackageName 'bob' -FileFullPath "$toolsDir\bob.exe" -Url 'file:///\\fileshare\location\bob.exe' +~~~ + +**EXAMPLE 5** + +~~~powershell + +$options = +@{ + Headers = @{ + Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; + 'Accept-Charset' = 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'; + 'Accept-Language' = 'en-GB,en-US;q=0.8,en;q=0.6'; + Cookie = 'requiredinfo=info'; + Referer = 'https://somelocation.com/'; + } +} + +Get-ChocolateyWebFile -PackageName 'package' -FileFullPath "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\thefile.exe" -Url 'https://somelocation.com/thefile.exe' -Options $options +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileFullPath <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Url64bit [<String>] +Property | Value +---------------------- | ----- +Aliases | url64 +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Checksum64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType64 [<String>] +Property | Value +---------------------- | ------------- +Aliases | +Required? | false +Position? | named +Default Value | $checksumType +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -GetOriginalFileName +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -ForceDownload +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Get-WebFile' value='get-webfile' /> + * <Xref title='Get-WebFileName' value='get-webfilename' /> + * <Xref title='Get-FtpFile' value='get-ftpfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ChocolateyWebFile -Full`. + +View the source for [Get-ChocolateyWebFile](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ChocolateyWebFile.ps1) diff --git a/src/content/docs/en-us/create/functions/get-environmentvariable.mdx b/src/content/docs/en-us/create/functions/get-environmentvariable.mdx new file mode 100644 index 00000000000..cf83f7867b5 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-environmentvariable.mdx @@ -0,0 +1,123 @@ +--- +order: 70 +xref: get-environmentvariable +title: Get-EnvironmentVariable +description: Information on Get-EnvironmentVariable function +--- +import Xref from '@components/Xref.astro'; + +# Get-EnvironmentVariable + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-EnvironmentVariable.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Gets an Environment Variable. + +## Syntax + +~~~powershell +Get-EnvironmentVariable ` + -Name <String> ` + -Scope {Process | User | Machine} ` + [-PreserveVariables] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will will get an environment variable based on the variable name +and scope while accounting whether to expand the variable or not +(e.g.: `%TEMP%`-> `C:\User\Username\AppData\Local\Temp`). + +## Notes + +This helper reduces the number of lines one would have to write to get +environment variables, mainly when not expanding the variables is a +must. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Get-EnvironmentVariable -Name 'TEMP' -Scope User -PreserveVariables + +~~~ + +**EXAMPLE 2** + +~~~powershell +Get-EnvironmentVariable -Name 'PATH' -Scope Machine + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Scope + +Valid options: Process, User, Machine + +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -PreserveVariables +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-EnvironmentVariableNames' value='get-environmentvariablenames' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-EnvironmentVariable -Full`. + +View the source for [Get-EnvironmentVariable](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-EnvironmentVariable.ps1) diff --git a/src/content/docs/en-us/create/functions/get-environmentvariablenames.mdx b/src/content/docs/en-us/create/functions/get-environmentvariablenames.mdx new file mode 100644 index 00000000000..e3e420667b2 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-environmentvariablenames.mdx @@ -0,0 +1,69 @@ +--- +order: 80 +xref: get-environmentvariablenames +title: Get-EnvironmentVariableNames +description: Information on Get-EnvironmentVariableNames function +--- +import Xref from '@components/Xref.astro'; + +# Get-EnvironmentVariableNames + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-EnvironmentVariableNames.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Gets all environment variable names. + +## Syntax + +~~~powershell +Get-EnvironmentVariableNames ` + [-Scope {Process | User | Machine}] +~~~ + +## Description + +Provides a list of environment variable names based on the scope. This +can be used to loop through the list and generate names. + +## Notes + +Process dumps the current environment variable names in memory / +session. The other scopes refer to the registry values. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Get-EnvironmentVariableNames -Scope Machine + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + +## Links + + * <Xref title='Get-EnvironmentVariable' value='get-environmentvariable' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-EnvironmentVariableNames -Full`. + +View the source for [Get-EnvironmentVariableNames](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-EnvironmentVariableNames.ps1) diff --git a/src/content/docs/en-us/create/functions/get-ftpfile.mdx b/src/content/docs/en-us/create/functions/get-ftpfile.mdx new file mode 100644 index 00000000000..8d4fab9671b --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-ftpfile.mdx @@ -0,0 +1,125 @@ +--- +order: 90 +xref: get-ftpfile +title: Get-FtpFile +description: Information on Get-FtpFile function +--- +import Xref from '@components/Xref.astro'; + +# Get-FtpFile + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-FtpFile.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Downloads a file from a File Transfer Protocol (FTP) location. + +## Syntax + +~~~powershell +Get-FtpFile ` + [-Url <String>] ` + -FileName <String> ` + [-Username <String>] ` + [-Password <String>] ` + [-Quiet] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will download a file from an FTP location, saving the file to the +FileName location specified. + +## Notes + +This is a low-level function and not recommended for use in package +scripts. It is recommended you call `Get-ChocolateyWebFile` instead. + +Will automatically call Set-PowerShellExitCode to set the package +exit code to 404 if the resource is not found. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Username [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Password [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -Quiet +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Get-WebFile' value='get-webfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-FtpFile -Full`. + +View the source for [Get-FtpFile](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-FtpFile.ps1) diff --git a/src/content/docs/en-us/create/functions/get-osarchitecturewidth.mdx b/src/content/docs/en-us/create/functions/get-osarchitecturewidth.mdx new file mode 100644 index 00000000000..33e3e29c07f --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-osarchitecturewidth.mdx @@ -0,0 +1,63 @@ +--- +order: 100 +xref: get-osarchitecturewidth +title: Get-OSArchitectureWidth +description: Information on Get-OSArchitectureWidth function +--- +import Xref from '@components/Xref.astro'; + +# Get-OSArchitectureWidth + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-OSArchitectureWidth.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Get the operating system architecture address width. + +## Syntax + +~~~powershell +Get-OSArchitectureWidth ` + [-Compare <Object>] +~~~ + +## Description + +This will return the system architecture address width (probably 32 or +64 bit). If you pass a comparison, it will return true or false instead +of {`32`|`64`}. + +## Notes + +When your installation script has to know what architecture it is run +on, this simple function comes in handy. + +ARM64 architecture will automatically select 32bit width as +there is an emulator for 32 bit and there are no current plans by Microsoft to +ship 64 bit x86 emulation for ARM64. For more details, see +https://github.com/chocolatey/choco/issues/1800#issuecomment-484293844. + +## Aliases + +`Get-OSBitness` +`Get-ProcessorBits` + + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-OSArchitectureWidth -Full`. + +View the source for [Get-OSArchitectureWidth](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-OSArchitectureWidth.ps1) diff --git a/src/content/docs/en-us/create/functions/get-packageparameters.mdx b/src/content/docs/en-us/create/functions/get-packageparameters.mdx new file mode 100644 index 00000000000..65e15289713 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-packageparameters.mdx @@ -0,0 +1,151 @@ +--- +order: 110 +xref: get-packageparameters +title: Get-PackageParameters +description: Information on Get-PackageParameters function +--- +import Xref from '@components/Xref.astro'; + +# Get-PackageParameters + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-PackageParameters.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Parses a string and returns a hash table array of those values for use +in package scripts. + +## Syntax + +~~~powershell +Get-PackageParameters ` + [-Parameters <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This looks at a string value and parses it into a hash table array for +use in package scripts. By default this will look at +`$env:ChocolateyPackageParameters` (`--params="'/ITEM:value'"`) and +`$env:ChocolateyPackageParametersSensitive` +(`--package-parameters-sensitive="'/PASSWORD:value'"` in commercial +editions). + +<Xref title="Learn more" value="parse-package-parameters" /> + +## Notes + +If you need compatibility with older versions of Chocolatey, +take a dependency on the `chocolatey-core.extension` package which +also provides this functionality. If you are pushing to the community +package repository (https://community.chocolatey.org/packages), you are required +to take a dependency on the core extension until January 2018. How to +do this is explained in <Xref title="the docs" value="parse-package-parameters" anchor="step-3-use-core-community-extension" />. + +The differences between this and the `chocolatey-core.extension` package +functionality is that the extension function can only do one string at a +time and it only looks at `$env:ChocolateyPackageParameters` by default. +It also only supports splitting by `:`, with this function you can +either split by `:` or `=`. For compatibility with the core extension, +build all docs with `/Item:Value`. + +## Aliases + +`Get-PackageParametersBuiltIn` + + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# The default way of calling, uses `$env:ChocolateyPackageParameters` +# and `$env:ChocolateyPackageParametersSensitive` - this is typically +# how things are passed in from choco.exe +$pp = Get-PackageParameters +~~~ + +**EXAMPLE 2** + +~~~powershell + +# see https://docs.chocolatey.org/en-us/guides/create/parse-packageparameters-argument +# command line call: `choco install <pkg_id> --params "'/LICENSE:value'"` +$pp = Get-PackageParameters +# Read-Host, PromptForChoice, etc are not blocking calls with Chocolatey. +# Chocolatey has a custom PowerShell host that will time these calls +# after 30 seconds, allowing headless operation to continue but offer +# prompts to users to ask questions during installation. +if (!$pp['LICENSE']) { $pp['LICENSE'] = Read-Host 'License key?' } +# set a default if not passed +if (!$pp['LICENSE']) { $pp['LICENSE'] = '1234' } +~~~ + +**EXAMPLE 3** + +~~~powershell + +$pp = Get-PackageParameters +if (!$pp['UserName']) { $pp['UserName'] = "$env:UserName" } +if (!$pp['Password']) { $pp['Password'] = Read-Host "Enter password for $($pp['UserName']):" -AsSecureString} +# fail the install/upgrade if not value is not determined +if (!$pp['Password']) { throw "Package needs Password to install, that must be provided in params or in prompt." } +~~~ + +**EXAMPLE 4** + +~~~powershell + +# Pass in your own values +Get-PackageParameters -Parameters "/Shortcut /InstallDir:'c:\program files\xyz' /NoStartup" | set r +if ($r.Shortcut) {... } +Write-Host $r.InstallDir +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Parameters [<String>] +Property | Value +---------------------- | ------ +Aliases | params +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-PackageParameters -Full`. + +View the source for [Get-PackageParameters](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-PackageParameters.ps1) diff --git a/src/content/docs/en-us/create/functions/get-toolslocation.mdx b/src/content/docs/en-us/create/functions/get-toolslocation.mdx new file mode 100644 index 00000000000..a9d77c7cb96 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-toolslocation.mdx @@ -0,0 +1,62 @@ +--- +order: 120 +xref: get-toolslocation +title: Get-ToolsLocation +description: Information on Get-ToolsLocation function +--- +import Xref from '@components/Xref.astro'; + +# Get-ToolsLocation + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ToolsLocation.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Gets the top level location for tools/software installed outside of +package folders. + +## Syntax + +~~~powershell +Get-ToolsLocation +~~~ + +## Description + +Creates or uses an environment variable that a user can control to +communicate with packages about where they would like software that is +not installed through native installers, but doesn't make much sense +to be kept in package folders. Most software coming in packages stays +with the package itself, but there are some things that seem to fall +out of this category, like things that have plugins that are installed +into the same directory as the tool. Having that all combined in the +same package directory could get tricky. + +## Notes + +Sets an environment variable called `ChocolateyToolsLocation`. If the +older `ChocolateyBinRoot` is set, it uses the value from that and +removes the older variable. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-ToolsLocation -Full`. + +View the source for [Get-ToolsLocation](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-ToolsLocation.ps1) diff --git a/src/content/docs/en-us/create/functions/get-uacenabled.mdx b/src/content/docs/en-us/create/functions/get-uacenabled.mdx new file mode 100644 index 00000000000..53945347154 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-uacenabled.mdx @@ -0,0 +1,54 @@ +--- +order: 130 +xref: get-uacenabled +title: Get-UACEnabled +description: Information on Get-UACEnabled function +--- +import Xref from '@components/Xref.astro'; + +# Get-UACEnabled + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-UACEnabled.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Determines if UAC (User Account Control) is turned on or off. + +## Syntax + +~~~powershell +Get-UACEnabled +~~~ + +## Description + +This is a low level function used by Chocolatey to decide whether +prompting for elevated privileges is necessary or not. + +## Notes + +This checks the `EnableLUA` registry value to be determine the state of +a system. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-UACEnabled -Full`. + +View the source for [Get-UACEnabled](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-UACEnabled.ps1) diff --git a/src/content/docs/en-us/create/functions/get-uninstallregistrykey.mdx b/src/content/docs/en-us/create/functions/get-uninstallregistrykey.mdx new file mode 100644 index 00000000000..a0c81a2f5c4 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-uninstallregistrykey.mdx @@ -0,0 +1,124 @@ +--- +order: 140 +xref: get-uninstallregistrykey +title: Get-UninstallRegistryKey +description: Information on Get-UninstallRegistryKey function +--- +import Xref from '@components/Xref.astro'; + +# Get-UninstallRegistryKey + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-UninstallRegistryKey.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Retrieve registry key(s) for system-installed applications from an +exact or wildcard search. + +## Syntax + +~~~powershell +Get-UninstallRegistryKey ` + -SoftwareName <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This function will attempt to retrieve a matching registry key for an +already installed application, usually to be used with a +chocolateyUninstall.ps1 automation script. + +The function also prevents `Get-ItemProperty` from failing when +handling wrongly encoded registry keys. + + +## Aliases + +`Get-InstallRegistryKey` + + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# Version match: Software name is "Gpg4Win (2.3.0)" +[array]$key = Get-UninstallRegistryKey -SoftwareName "Gpg4win (*)" +$key.UninstallString +~~~ + +**EXAMPLE 2** + +~~~powershell + +# Fuzzy match: Software name is "Launchy 2.5" +[array]$key = Get-UninstallRegistryKey -SoftwareName "Launchy*" +$key.UninstallString +~~~ + +**EXAMPLE 3** + +~~~powershell + +# Exact match: Software name in Programs and Features is "VLC media player" +[array]$key = Get-UninstallRegistryKey -SoftwareName "VLC media player" +$key.UninstallString +~~~ + +**EXAMPLE 4** + +~~~powershell + +# Version match: Software name is "SketchUp 2016" +# Note that the similar software name "SketchUp Viewer" would not be matched. +[array]$key = Get-UninstallRegistryKey -SoftwareName "SketchUp [0-9]*" +$key.UninstallString +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -SoftwareName <String> +Property | Value +---------------------- | -------------- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | true (ByValue) + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Uninstall-ChocolateyPackage' value='uninstall-chocolateypackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-UninstallRegistryKey -Full`. + +View the source for [Get-UninstallRegistryKey](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-UninstallRegistryKey.ps1) diff --git a/src/content/docs/en-us/create/functions/get-viruscheckvalid.mdx b/src/content/docs/en-us/create/functions/get-viruscheckvalid.mdx new file mode 100644 index 00000000000..b1c65e78243 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-viruscheckvalid.mdx @@ -0,0 +1,88 @@ +--- +order: 150 +xref: get-viruscheckvalid +title: Get-VirusCheckValid +description: Information on Get-VirusCheckValid function +--- +import Xref from '@components/Xref.astro'; + +# Get-VirusCheckValid + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-VirusCheckValid.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Used in Pro/Business editions. Runtime virus check against downloaded +resources. + +## Syntax + +~~~powershell +Get-VirusCheckValid ` + [-Url <String>] ` + [-File <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Run a runtime malware check against downloaded resources prior to +allowing Chocolatey to execute a file. This is only available +in Pro / Business editions. + +## Notes + +Only [licensed editions](https://chocolatey.org/compare) of Chocolatey provide runtime malware protection. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-VirusCheckValid -Full`. + +View the source for [Get-VirusCheckValid](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-VirusCheckValid.ps1) diff --git a/src/content/docs/en-us/create/functions/get-webfile.mdx b/src/content/docs/en-us/create/functions/get-webfile.mdx new file mode 100644 index 00000000000..7fbfa20c10f --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-webfile.mdx @@ -0,0 +1,138 @@ +--- +order: 160 +xref: get-webfile +title: Get-WebFile +description: Information on Get-WebFile function +--- +import Xref from '@components/Xref.astro'; + +# Get-WebFile + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Downloads a file from an HTTP/HTTPS location. Prefer HTTPS when +available. + +## Syntax + +~~~powershell +Get-WebFile ` + [-Url <String>] ` + [-FileName <String>] ` + [-UserAgent <String>] ` + [-Passthru] ` + [-Quiet] ` + [-Options <Hashtable>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will download a file from an HTTP/HTTPS location, saving the file +to the FileName location specified. + +## Notes + +This is a low-level function and not recommended for use in package +scripts. It is recommended you call `Get-ChocolateyWebFile` instead. + +Will automatically call Set-PowerShellExitCode to set the package exit +code to 404 if the resource is not found. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileName [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -UserAgent [<String>] +Property | Value +---------------------- | ----------------------- +Aliases | +Required? | false +Position? | 3 +Default Value | chocolatey command line +Accept Pipeline Input? | false + +### -Passthru +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -Quiet +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Get-FtpFile' value='get-ftpfile' /> + * <Xref title='Get-WebHeaders' value='get-webheaders' /> + * <Xref title='Get-WebFileName' value='get-webfilename' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-WebFile -Full`. + +View the source for [Get-WebFile](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebFile.ps1) diff --git a/src/content/docs/en-us/create/functions/get-webfilename.mdx b/src/content/docs/en-us/create/functions/get-webfilename.mdx new file mode 100644 index 00000000000..668c8e709f5 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-webfilename.mdx @@ -0,0 +1,119 @@ +--- +order: 170 +xref: get-webfilename +title: Get-WebFileName +description: Information on Get-WebFileName function +--- +import Xref from '@components/Xref.astro'; + +# Get-WebFileName + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Gets the original file name from a url. Used by Get-WebFile to determine +the original file name for a file. + +## Syntax + +~~~powershell +Get-WebFileName ` + [-Url <String>] ` + -DefaultName <String> ` + [-UserAgent <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Uses several techniques to determine the original file name of the file +based on the url for the file. + +## Notes + +Falls back to DefaultName when the name cannot be determined. + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Get-WebFileName -Url $url -DefaultName $originalFileName + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -DefaultName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -UserAgent [<String>] +Property | Value +---------------------- | ----------------------- +Aliases | +Required? | false +Position? | named +Default Value | chocolatey command line +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-WebHeaders' value='get-webheaders' /> + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-WebFileName -Full`. + +View the source for [Get-WebFileName](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebFileName.ps1) diff --git a/src/content/docs/en-us/create/functions/get-webheaders.mdx b/src/content/docs/en-us/create/functions/get-webheaders.mdx new file mode 100644 index 00000000000..94ed1c822a0 --- /dev/null +++ b/src/content/docs/en-us/create/functions/get-webheaders.mdx @@ -0,0 +1,90 @@ +--- +order: 180 +xref: get-webheaders +title: Get-WebHeaders +description: Information on Get-WebHeaders function +--- +import Xref from '@components/Xref.astro'; + +# Get-WebHeaders + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Gets the request/response headers for a url. + +## Syntax + +~~~powershell +Get-WebHeaders ` + [-Url <String>] ` + [-UserAgent <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This is a low-level function that is used by Chocolatey to get the +headers for a request/response to better help when getting and +validating internet resources. + + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -UserAgent [<String>] +Property | Value +---------------------- | ----------------------- +Aliases | +Required? | false +Position? | 2 +Default Value | chocolatey command line +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Get-WebFileName' value='get-webfilename' /> + * <Xref title='Get-WebFile' value='get-webfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Get-WebHeaders -Full`. + +View the source for [Get-WebHeaders](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Get-WebHeaders.ps1) diff --git a/src/content/docs/en-us/create/functions/index.mdx b/src/content/docs/en-us/create/functions/index.mdx new file mode 100644 index 00000000000..69a070e2be1 --- /dev/null +++ b/src/content/docs/en-us/create/functions/index.mdx @@ -0,0 +1,188 @@ +--- +order: 40 +xref: powershell-reference +title: PowerShell Reference +description: PowerShell Functions aka Helpers Reference +--- +import Xref from '@components/Xref.astro'; + +# PowerShell Functions aka Helpers Reference + +{/* This documentation file is automatically generated from the files at $sourceFunctions using $($sourceLocation)GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +## Summary + +In your Chocolatey packaging, you have the ability to use these functions (and others with Chocolatey's <Xref title="PowerShell Extensions" value="extensions" />) to work with all aspects of software management. Keep in mind Chocolatey's automation scripts are just PowerShell, so you can do manage anything you want. + +> :choco-info: **NOTE** +> +> These scripts are for package scripts, not for use directly in PowerShell. This is in the create packages section, not the using Chocolatey section. + +## Main Functions + +These functions call other functions and many times may be the only thing you need in your <Xref title="chocolateyInstall.ps1 file" value="chocolatey-install-ps1" />. + +* <Xref title="Install-ChocolateyPackage" value="install-chocolateypackage" /> +* <Xref title="Install-ChocolateyZipPackage" value="install-chocolateyzippackage" /> +* <Xref title="Install-ChocolateyPowershellCommand" value="install-chocolateypowershellcommand" /> +* <Xref title="Install-ChocolateyVsixPackage" value="install-chocolateyvsixpackage" /> + +## More Functions + +### Administrative Access Functions + +When creating packages that need to run one of the following commands below, one should add the tag `admin` to the nuspec. + +* <Xref title="Install-ChocolateyPackage" value="install-chocolateypackage" /> +* <Xref title="Start-ChocolateyProcessAsAdmin" value="start-chocolateyprocessasadmin" /> +* <Xref title="Install-ChocolateyInstallPackage" value="install-chocolateyinstallpackage" /> +* <Xref title="Install-ChocolateyPath" value="install-chocolateypath" /> - when specifying machine path +* <Xref title="Install-ChocolateyEnvironmentVariable" value="install-chocolateyenvironmentvariable" /> - when specifying machine path +* <Xref title="Install-ChocolateyExplorerMenuItem" value="install-chocolateyexplorermenuitem" /> +* <Xref title="Install-ChocolateyFileAssociation" value="install-chocolateyfileassociation" /> + +### Non-Administrator Safe Functions + +When you have a need to run Chocolatey without Administrative access required (non-default install location), you can run the following functions without administrative access. + +These are the functions from above as one list. + +* <Xref title="Install-ChocolateyZipPackage" value="install-chocolateyzippackage" /> +* <Xref title="Install-ChocolateyPowershellCommand" value="install-chocolateypowershellcommand" /> +* <Xref title="Get-ChocolateyPath" value="get-chocolateypath" /> +* <Xref title="Get-ChocolateyWebFile" value="get-chocolateywebfile" /> +* <Xref title="Get-ChocolateyUnzip" value="get-chocolateyunzip" /> +* <Xref title="Install-ChocolateyPath" value="install-chocolateypath" /> - when specifying user path +* <Xref title="Install-ChocolateyEnvironmentVariable" value="install-chocolateyenvironmentvariable" /> - when specifying user path +* <Xref title="Install-ChocolateyPinnedTaskBarItem" value="install-chocolateypinnedtaskbaritem" /> +* <Xref title="Install-ChocolateyShortcut" value="install-chocolateyshortcut" /> +* <Xref title="Update-SessionEnvironment" value="update-sessionenvironment" /> +* <Xref title="Get-PackageParameters" value="get-packageparameters" /> + +## Complete List (alphabetical order) + + * <Xref title='Format-FileSize' value='format-filesize' /> + * <Xref title='Get-ChecksumValid' value='get-checksumvalid' /> + * <Xref title='Get-ChocolateyConfigValue' value='get-chocolateyconfigvalue' /> + * <Xref title='Get-ChocolateyPath' value='get-chocolateypath' /> + * <Xref title='Get-ChocolateyUnzip' value='get-chocolateyunzip' /> + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Get-EnvironmentVariable' value='get-environmentvariable' /> + * <Xref title='Get-EnvironmentVariableNames' value='get-environmentvariablenames' /> + * <Xref title='Get-FtpFile' value='get-ftpfile' /> + * <Xref title='Get-OSArchitectureWidth' value='get-osarchitecturewidth' /> + * <Xref title='Get-PackageParameters' value='get-packageparameters' /> + * <Xref title='Get-ToolsLocation' value='get-toolslocation' /> + * <Xref title='Get-UACEnabled' value='get-uacenabled' /> + * <Xref title='Get-UninstallRegistryKey' value='get-uninstallregistrykey' /> + * <Xref title='Get-VirusCheckValid' value='get-viruscheckvalid' /> + * <Xref title='Get-WebFile' value='get-webfile' /> + * <Xref title='Get-WebFileName' value='get-webfilename' /> + * <Xref title='Get-WebHeaders' value='get-webheaders' /> + * <Xref title='Install-BinFile' value='install-binfile' /> + * <Xref title='Install-ChocolateyEnvironmentVariable' value='install-chocolateyenvironmentvariable' /> + * <Xref title='Install-ChocolateyExplorerMenuItem' value='install-chocolateyexplorermenuitem' /> + * <Xref title='Install-ChocolateyFileAssociation' value='install-chocolateyfileassociation' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyPath' value='install-chocolateypath' /> + * <Xref title='Install-ChocolateyPinnedTaskBarItem' value='install-chocolateypinnedtaskbaritem' /> + * <Xref title='Install-ChocolateyPowershellCommand' value='install-chocolateypowershellcommand' /> + * <Xref title='Install-ChocolateyShortcut' value='install-chocolateyshortcut' /> + * <Xref title='Install-ChocolateyVsixPackage' value='install-chocolateyvsixpackage' /> + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + * <Xref title='Install-Vsix' value='install-vsix' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + * <Xref title='Set-PowerShellExitCode' value='set-powershellexitcode' /> + * <Xref title='Start-ChocolateyProcessAsAdmin' value='start-chocolateyprocessasadmin' /> + * <Xref title='Test-ProcessAdminRights' value='test-processadminrights' /> + * <Xref title='Uninstall-BinFile' value='uninstall-binfile' /> + * <Xref title='Uninstall-ChocolateyEnvironmentVariable' value='uninstall-chocolateyenvironmentvariable' /> + * <Xref title='Uninstall-ChocolateyPackage' value='uninstall-chocolateypackage' /> + * <Xref title='Uninstall-ChocolateyZipPackage' value='uninstall-chocolateyzippackage' /> + * <Xref title='Update-SessionEnvironment' value='update-sessionenvironment' /> + * <Xref title='Write-FunctionCallLogMessage' value='write-functioncalllogmessage' /> + +## Chocolatey for Business Functions + +* <Xref title="Install-ChocolateyWindowsService" value="install-chocolateywindowsservice" /> +* <Xref title="Start-ChocolateyWindowsService" value="start-chocolateywindowsservice" /> +* <Xref title="Stop-ChocolateyWindowsService" value="stop-chocolateywindowsservice" /> +* <Xref title="Uninstall-ChocolateyWindowsService" value="uninstall-chocolateywindowsservice" /> + +## Variables + +There are also a number of environment variables providing access to some values from the nuspec and other information that may be useful. They are accessed via `$env:variableName`. + +### Environment Variables + +Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow): + +* TEMP/TMP - Overridden to the CacheLocation, but may be the same as the original TEMP folder +* ChocolateyInstall - Top level folder where Chocolatey is installed +* ChocolateyPackageName - The name of the package, equivalent to the `<id />` field in the nuspec +* ChocolateyPackageTitle - The title of the package, equivalent to the `<title />` field in the nuspec +* ChocolateyPackageVersion - The version of the package, equivalent to the `<version />` field in the nuspec + +#### Advanced Environment Variables + +The following are more advanced settings: + +* ChocolateyPackageParameters - Parameters to use with packaging, not the same as install arguments (which are passed directly to the native installer). Based on `--package-parameters`. +* CHOCOLATEY_VERSION - The version of Choco you normally see. Use if you are 'lighting' things up based on choco version, otherwise take a dependency on the specific version you need. +* ChocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. Automatically handled in built in Choco functions. +* OS_PLATFORM - Like Windows, macOS, Linux. +* OS_VERSION - The version of OS, like 6.1 something something for Windows. +* OS_NAME - The reported name of the OS. +* IS_PROCESSELEVATED = Is the process elevated? +* ChocolateyPackageInstallLocation - Install location of the software that the package installs. Displayed at the end of the package install. + +#### Set By Options and Configuration + +Some environment variables are set based on options that are passed, configuration and/or features that are turned on: + + * ChocolateyEnvironmentDebug - Was `--debug` passed? If using the built-in PowerShell host, this is always true (but only logs debug messages to console if `--debug` was passed) + * ChocolateyEnvironmentVerbose - Was `--verbose` passed? If using the built-in PowerShell host, this is always true (but only logs verbose messages to console if `--verbose` was passed). + * ChocolateyForce - Was `--force` passed? + * ChocolateyForceX86 - Was `-x86` passed? + * ChocolateyRequestTimeout - How long before a web request will time out. Set by config `webRequestTimeoutSeconds` + * ChocolateyResponseTimeout - How long to wait for a download to complete? Set by config `commandExecutionTimeoutSeconds` + * ChocolateyPowerShellHost - Are we using the built-in PowerShell host? Set by `--use-system-powershell` or the feature `powershellHost` + +#### Business Edition Variables + + * ChocolateyInstallArgumentsSensitive - Encrypted arguments passed from command line `--install-arguments-sensitive` that are not logged anywhere. + * ChocolateyPackageParametersSensitive - Package parameters passed from command line `--package-parameters-sensitive` that are not logged anywhere. + * ChocolateyLicensedVersion - What version is the licensed edition on? + * ChocolateyLicenseType - What edition / type of the licensed edition is installed? + +#### Experimental Environment Variables + +The following are experimental or use not recommended: + + * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under + * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different - based on git describe + * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. + +#### Not Useful Or Anti-Pattern If Used + + * ChocolateyInstallOverride - Not for use in package automation scripts. Based on `--override-arguments` being passed. + * ChocolateyInstallArguments - The installer arguments meant for the native installer. You should use chocolateyPackageParameters instead. Based on `--install-arguments` being passed. + * ChocolateyIgnoreChecksums - Was `--ignore-checksums` passed or the feature `checksumFiles` turned off? + * ChocolateyAllowEmptyChecksums - Was `--allow-empty-checksums` passed or the feature `allowEmptyChecksums` turned on? + * ChocolateyAllowEmptyChecksumsSecure - Was `--allow-empty-checksums-secure` passed or the feature `allowEmptyChecksumsSecure` turned on? + * ChocolateyChecksum32 - Was `--download-checksum` passed? + * ChocolateyChecksumType32 - Was `--download-checksum-type` passed? + * ChocolateyChecksum64 - Was `--download-checksum-x64` passed? + * ChocolateyChecksumType64 - Was `--download-checksum-type-x64` passed? + * ChocolateyPackageExitCode - The exit code of the script that just ran - usually set by `Set-PowerShellExitCode` + * ChocolateyLastPathUpdate - Set by Chocolatey as part of install, but not used for anything in particular in packaging. + * ChocolateyProxyLocation - The explicit proxy location as set in the configuration `proxy` + * ChocolateyDownloadCache - Use available download cache? Set by `--skip-download-cache`, `--use-download-cache`, or feature `downloadCache` + * ChocolateyProxyBypassList - Explicitly set locations to ignore in configuration `proxyBypassList` + * ChocolateyProxyBypassOnLocal - Should the proxy bypass on local connections? Set based on configuration `proxyBypassOnLocal` + * http_proxy - Set by original `http_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. + * https_proxy - Set by original `https_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. + * no_proxy- Set by original `no_proxy` passthrough, or same as `ChocolateyProxyBypassList` if explicitly set. + * ChocolateyPackageFolder - Not for use in package automation scripts. Recommend using `$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"` as per template generated by `choco new` + * ChocolateyToolsLocation - Not for use in package automation scripts. Recommend using Get-ToolsLocation instead diff --git a/src/content/docs/en-us/create/functions/install-binfile.mdx b/src/content/docs/en-us/create/functions/install-binfile.mdx new file mode 100644 index 00000000000..5fd4a17681c --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-binfile.mdx @@ -0,0 +1,125 @@ +--- +order: 190 +xref: install-binfile +title: Install-BinFile +description: Information on Install-BinFile function +--- +import Xref from '@components/Xref.astro'; + +# Install-BinFile + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-BinFile.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Creates a shim (or batch redirect) for a file that is on the PATH. + +## Syntax + +~~~powershell +Install-BinFile ` + -Name <String> ` + -Path <String> ` + [-UseStart] ` + [-Command <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Chocolatey installs have the folder `$($env:ChocolateyInstall)\bin` +included in the PATH environment variable. Chocolatey automatically +shims executables in package folders that are not explicitly ignored, +putting them into the bin folder (and subsequently onto the PATH). + +When you have other files you want to shim to add them to the PATH or +if you want to handle the shimming explicitly, use this function. + +If you do use this function, ensure you also add `Uninstall-BinFile` to +your `chocolateyUninstall.ps1` script as Chocolatey will not +automatically clean up shims created with this function. + +## Notes + +Not normally needed for exe files in the package folder, those are +automatically discovered and added as shims after the install script +completes. + +## Aliases + +`Add-BinFile` +`Generate-BinFile` + + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Path <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -UseStart +Property | Value +---------------------- | ----- +Aliases | isGui +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -Command [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Uninstall-BinFile' value='uninstall-binfile' /> + * <Xref title='Install-ChocolateyShortcut' value='install-chocolateyshortcut' /> + * <Xref title='Install-ChocolateyPath' value='install-chocolateypath' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-BinFile -Full`. + +View the source for [Install-BinFile](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-BinFile.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyenvironmentvariable.mdx b/src/content/docs/en-us/create/functions/install-chocolateyenvironmentvariable.mdx new file mode 100644 index 00000000000..09ec582935a --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyenvironmentvariable.mdx @@ -0,0 +1,149 @@ +--- +order: 200 +xref: install-chocolateyenvironmentvariable +title: Install-ChocolateyEnvironmentVariable +description: Information on Install-ChocolateyEnvironmentVariable function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyEnvironmentVariable + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyEnvironmentVariable.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required when `-VariableType 'Machine'.` + +Creates a persistent environment variable. + +## Syntax + +~~~powershell +Install-ChocolateyEnvironmentVariable ` + [-VariableName <String>] ` + [-VariableValue <String>] ` + [-VariableType {Process | User | Machine}] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Install-ChocolateyEnvironmentVariable creates an environment variable +with the specified name and value. The variable is persistent and +will remain after reboots and across multiple PowerShell and command +line sessions. The variable can be scoped either to the User or to +the Machine. If Machine level scoping is specified, the command is +elevated to an administrative session. + +## Notes + +This command will assert UAC/Admin privileges on the machine when +`-VariableType Machine`. + +This will add the environment variable to the current session. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# Creates a User environment variable "JAVA_HOME" pointing to +# "d:\oracle\jdk\bin". +Install-ChocolateyEnvironmentVariable "JAVA_HOME" "d:\oracle\jdk\bin" +~~~ + +**EXAMPLE 2** + +~~~powershell + +# Creates a User environment variable "_NT_SYMBOL_PATH" pointing to +# "symsrv*symsrv.dll*f:\localsymbols*http://msdl.microsoft.com/download/symbols". +# The command will be elevated to admin privileges. +Install-ChocolateyEnvironmentVariable ` + -VariableName "_NT_SYMBOL_PATH" ` + -VariableValue "symsrv*symsrv.dll*f:\localsymbols*http://msdl.microsoft.com/download/symbols" ` + -VariableType Machine +~~~ + +**EXAMPLE 3** + +~~~powershell + +# Remove an environment variable +Install-ChocolateyEnvironmentVariable -VariableName 'bob' -VariableValue $null +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -VariableName [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -VariableValue [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -VariableType + +Valid options: Process, User, Machine + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | User +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Uninstall-ChocolateyEnvironmentVariable' value='uninstall-chocolateyenvironmentvariable' /> + * <Xref title='Get-EnvironmentVariable' value='get-environmentvariable' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + * <Xref title='Install-ChocolateyPath' value='install-chocolateypath' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyEnvironmentVariable -Full`. + +View the source for [Install-ChocolateyEnvironmentVariable](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyEnvironmentVariable.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyexplorermenuitem.mdx b/src/content/docs/en-us/create/functions/install-chocolateyexplorermenuitem.mdx new file mode 100644 index 00000000000..026793a6e75 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyexplorermenuitem.mdx @@ -0,0 +1,150 @@ +--- +order: 210 +xref: install-chocolateyexplorermenuitem +title: Install-ChocolateyExplorerMenuItem +description: Information on Install-ChocolateyExplorerMenuItem function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyExplorerMenuItem + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyExplorerMenuItem.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required. + +Creates a windows explorer context menu item that can be associated with +a command + +## Syntax + +~~~powershell +Install-ChocolateyExplorerMenuItem ` + -MenuKey <String> ` + [-MenuLabel <String>] ` + [-Command <String>] ` + [-Type <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Install-ChocolateyExplorerMenuItem can add an entry in the context menu +of Windows Explorer. The menu item is given a text label and a command. +The command can be any command accepted on the windows command line. The +menu item can be applied to either folder items or file items. + +Because this command accesses and edits the root class registry node, it +will be elevated to admin. + +## Notes + +This command will assert UAC/Admin privileges on the machine. + +Chocolatey will automatically add the path of the file or folder clicked +to the command. This is done simply by appending a %1 to the end of the +command. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This will create a context menu item in Windows Explorer when any file +# is right clicked. The menu item will appear with the text "Open with +# Sublime Text 2" and will invoke sublime text 2 when selected. +$sublimeDir = (Get-ChildItem $env:ALLUSERSPROFILE\chocolatey\lib\sublimetext* | select $_.last) +$sublimeExe = "$sublimeDir\tools\sublime_text.exe" +Install-ChocolateyExplorerMenuItem "sublime" "Open with Sublime Text 2" $sublimeExe +~~~ + +**EXAMPLE 2** + +~~~powershell + +# This will create a context menu item in Windows Explorer when any +# folder is right clicked. The menu item will appear with the text +# "Open with Sublime Text 2" and will invoke sublime text 2 when selected. +$sublimeDir = (Get-ChildItem $env:ALLUSERSPROFILE\chocolatey\lib\sublimetext* | select $_.last) +$sublimeExe = "$sublimeDir\tools\sublime_text.exe" +Install-ChocolateyExplorerMenuItem "sublime" "Open with Sublime Text 2" $sublimeExe "directory" +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -MenuKey <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -MenuLabel [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Command [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Type [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | file +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyShortcut' value='install-chocolateyshortcut' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyExplorerMenuItem -Full`. + +View the source for [Install-ChocolateyExplorerMenuItem](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyExplorerMenuItem.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyfileassociation.mdx b/src/content/docs/en-us/create/functions/install-chocolateyfileassociation.mdx new file mode 100644 index 00000000000..1eaffd71ab5 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyfileassociation.mdx @@ -0,0 +1,105 @@ +--- +order: 220 +xref: install-chocolateyfileassociation +title: Install-ChocolateyFileAssociation +description: Information on Install-ChocolateyFileAssociation function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyFileAssociation + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyFileAssociation.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required. + +Creates an association between a file extension and a executable. + +## Syntax + +~~~powershell +Install-ChocolateyFileAssociation ` + -Extension <String> ` + -Executable <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Install-ChocolateyFileAssociation can associate a file extension +with a downloaded application. Once this command has created an +association, all invocations of files with the specified extension +will be opened via the executable specified. + +## Notes + +This command will assert UAC/Admin privileges on the machine. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This will create an association between Sublime Text 2 and all .txt +# files. Any .txt file opened will by default open with Sublime Text 2. +$sublimeDir = (Get-ChildItem $env:ALLUSERSPROFILE\chocolatey\lib\sublimetext* | select $_.last) +$sublimeExe = "$sublimeDir\tools\sublime_text.exe" +Install-ChocolateyFileAssociation ".txt" $sublimeExe +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Extension <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Executable <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyFileAssociation -Full`. + +View the source for [Install-ChocolateyFileAssociation](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyFileAssociation.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyinstallpackage.mdx b/src/content/docs/en-us/create/functions/install-chocolateyinstallpackage.mdx new file mode 100644 index 00000000000..f910855807a --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyinstallpackage.mdx @@ -0,0 +1,256 @@ +--- +order: 230 +xref: install-chocolateyinstallpackage +title: Install-ChocolateyInstallPackage +description: Information on Install-ChocolateyInstallPackage function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyInstallPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyInstallPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required. + +Installs software into "Programs and Features". Use +Install-ChocolateyPackage when software must be downloaded first. + +## Syntax + +~~~powershell +Install-ChocolateyInstallPackage ` + -PackageName <String> ` + [-FileType <String>] ` + [-SilentArgs <String[]>] ` + [-File <String>] ` + [-File64 <String>] ` + [-ValidExitCodes <Object>] ` + [-UseOnlyPackageSilentArguments] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will run an installer (local file) on your machine. + +## Notes + +This command will assert UAC/Admin privileges on the machine. + +If you are embedding files into a package, ensure that you have the +rights to redistribute those files if you are sharing this package +publicly (like on the [community feed](https://community.chocolatey.org/packages)). Otherwise, please use +Install-ChocolateyPackage to download those resources from their +official distribution points. + +This is a native installer wrapper function. A "true" package will +contain all the run time files and not an installer. That could come +pre-zipped and require unzipping in a PowerShell script. Chocolatey +works best when the packages contain the software it is managing. Most +software in the Windows world comes as installers and Chocolatey +understands how to work with that, hence this wrapper function. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$fileLocation = Join-Path $toolsDir 'INSTALLER_EMBEDDED_IN_PACKAGE' + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + file = $fileLocation + silentArgs = "/qn /norestart" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' +} + +Install-ChocolateyInstallPackage @packageArgs +~~~ + +**EXAMPLE 2** + +~~~powershell + +$packageArgs = @{ + packageName = 'bob' + fileType = 'exe' + file = '\\SHARE_LOCATION\to\INSTALLER_FILE' + silentArgs = "/S" + validExitCodes= @(0) + softwareName = 'Bob*' +} + +Install-ChocolateyInstallPackage @packageArgs +~~~ + +**EXAMPLE 3** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$fileLocation = Join-Path $toolsDir 'someinstaller.msi' + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + file = $fileLocation + silentArgs = "/qn /norestart MSIPROPERTY=`"true`"" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' +} + +Install-ChocolateyInstallPackage @packageArgs +~~~ + +**EXAMPLE 4** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$fileLocation = Join-Path $toolsDir 'someinstaller.msi' +$mstFileLocation = Join-Path $toolsDir 'transform.mst' + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + file = $fileLocation + silentArgs = "/qn /norestart TRANSFORMS=`"$mstFileLocation`"" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' +} + +Install-ChocolateyInstallPackage @packageArgs +~~~ + +**EXAMPLE 5** + +~~~powershell +Install-ChocolateyInstallPackage 'bob' 'exe' '/S' "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\bob.exe" + +~~~ + +**EXAMPLE 6** + +~~~powershell + +Install-ChocolateyInstallPackage -PackageName 'bob' -FileType 'exe' ` + -SilentArgs '/S' ` + -File "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\bob.exe" ` + -ValidExitCodes @(0) +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileType [<String>] +Property | Value +---------------------- | -------------------------- +Aliases | installerType, installType +Required? | false +Position? | 2 +Default Value | exe +Accept Pipeline Input? | false + +### -SilentArgs [<String[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ------------ +Aliases | fileFullPath +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -File64 [<String>] +Property | Value +---------------------- | -------------- +Aliases | fileFullPath64 +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ValidExitCodes [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | @(0) +Accept Pipeline Input? | false + +### -UseOnlyPackageSilentArguments +Property | Value +---------------------- | ------------------------ +Aliases | useOnlyPackageSilentArgs +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Uninstall-ChocolateyPackage' value='uninstall-chocolateypackage' /> + * <Xref title='Get-UninstallRegistryKey' value='get-uninstallregistrykey' /> + * <Xref title='Start-ChocolateyProcessAsAdmin' value='start-chocolateyprocessasadmin' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyInstallPackage -Full`. + +View the source for [Install-ChocolateyInstallPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyInstallPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateypackage.mdx b/src/content/docs/en-us/create/functions/install-chocolateypackage.mdx new file mode 100644 index 00000000000..7d02cbd907c --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateypackage.mdx @@ -0,0 +1,398 @@ +--- +order: 240 +xref: install-chocolateypackage +title: Install-ChocolateyPackage +description: Information on Install-ChocolateyPackage function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required. + +Installs software into "Programs and Features" based on a remote file +download. Use Install-ChocolateyInstallPackage when local or embedded +file. + +Building packages for an organization or for use internally? You want to +use Install-ChocolateyINSTALLPackage instead of this method (see links +below). + +## Syntax + +~~~powershell +Install-ChocolateyPackage ` + -PackageName <String> ` + [-FileType <String>] ` + [-SilentArgs <String[]>] ` + [-Url <String>] ` + [-Url64bit <String>] ` + [-ValidExitCodes <Object>] ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-Checksum64 <String>] ` + [-ChecksumType64 <String>] ` + [-Options <Hashtable>] ` + [-File <String>] ` + [-File64 <String>] ` + [-UseOnlyPackageSilentArguments] ` + [-UseOriginalLocation] ` + [-BeforeInstall <ScriptBlock>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will download a native installer from a url and install it on your +machine. Has error handling built in. + +If you are embedding the file(s) directly in the package (or do not need +to download a file first), use Install-ChocolateyInstallPackage instead. + +Building packages for an organization or for use internally? You want to +use Install-ChocolateyINSTALLPackage instead of this method +(see links below). + +## Notes + +This command will assert UAC/Admin privileges on the machine. + +This is a native installer wrapper function. A "true" package will +contain all the run time files and not an installer. That could come +pre-zipped and require unzipping in a PowerShell script. Chocolatey +works best when the packages contain the software it is managing. Most +software in the Windows world comes as installers and Chocolatey +understands how to work with that, hence this wrapper function. + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$url = 'https://somewhere.com/file.msi' +$url64 = 'https://somewhere.com/file-x64.msi' + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + url = $url + url64bit = $url64 + silentArgs = "/qn /norestart" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' + checksum = '12345' + checksumType = 'sha256' + checksum64 = '123356' + checksumType64= 'sha256' +} + +Install-ChocolateyPackage @packageArgs +~~~ + +**EXAMPLE 2** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$url = 'https://somewhere.com/file.msi' +$url64 = 'https://somewhere.com/file-x64.msi' + + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + url = $url + url64bit = $url64 + silentArgs = "/qn /norestart MSIPROPERTY=`"true`"" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' + checksum = '12345' + checksumType = 'sha256' + checksum64 = '123356' + checksumType64= 'sha256' +} + +Install-ChocolateyPackage @packageArgs +~~~ + +**EXAMPLE 3** + +~~~powershell + +$packageName= 'bob' +$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +$urlTransform = 'https://somewhere.com/file.mst' +$mstFileLocation = Join-Path $toolsDir 'transform.mst' + +Get-ChocolateyWebFile -PackageName 'bob' ` + -Url $urlTransform -FileFullPath $mstFileLocation ` + -Checksum '1234' -ChecksumType 'sha256' + +$packageArgs = @{ + packageName = $packageName + fileType = 'msi' + file = $fileLocation + silentArgs = "/qn /norestart TRANSFORMS=`"$mstFileLocation`"" + validExitCodes= @(0, 3010, 1641) + softwareName = 'Bob*' +} + +Install-ChocolateyInstallPackage @packageArgs +~~~ + +**EXAMPLE 4** + +~~~powershell + +Install-ChocolateyPackage 'StExBar' 'msi' '/quiet' ` + 'http://stexbar.googlecode.com/files/StExBar-1.8.3.msi' ` + 'http://stexbar.googlecode.com/files/StExBar64-1.8.3.msi' +~~~ + +**EXAMPLE 5** + +~~~powershell + +Install-ChocolateyPackage 'mono' 'exe' '/SILENT' ` + 'http://somewhere/something.exe' -ValidExitCodes @(0,21) +~~~ + +**EXAMPLE 6** + +~~~powershell + +Install-ChocolateyPackage 'ruby.devkit' 'exe' '/SILENT' ` + 'http://cdn.rubyinstaller.org/archives/devkits/DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe' ` + 'http://cdn.rubyinstaller.org/archives/devkits/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe' ` + -checksum '9383f12958aafc425923e322460a84de' -checksumType 'md5' ` + -checksum64 'ce99d873c1acc8bffc639bd4e764b849' +~~~ + +**EXAMPLE 7** + +~~~powershell +Install-ChocolateyPackage 'bob' 'exe' '/S' 'https://somewhere/bob.exe' 'https://somewhere/bob-x64.exe' + +~~~ + +**EXAMPLE 8** + +~~~powershell + +$options = +@{ + Headers = @{ + Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; + 'Accept-Charset' = 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'; + 'Accept-Language' = 'en-GB,en-US;q=0.8,en;q=0.6'; + Cookie = 'requiredinfo=info'; + Referer = 'https://somelocation.com/'; + } +} + +Install-ChocolateyPackage -PackageName 'package' -FileType 'exe' -SilentArgs '/S' 'https://somelocation.com/thefile.exe' -Options $options +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileType [<String>] +Property | Value +---------------------- | -------------------------- +Aliases | installerType, installType +Required? | false +Position? | 2 +Default Value | exe +Accept Pipeline Input? | false + +### -SilentArgs [<String[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -Url64bit [<String>] +Property | Value +---------------------- | ----- +Aliases | url64 +Required? | false +Position? | 5 +Default Value | +Accept Pipeline Input? | false + +### -ValidExitCodes [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | @(0) +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Checksum64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ------------ +Aliases | fileFullPath +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -File64 [<String>] +Property | Value +---------------------- | -------------- +Aliases | fileFullPath64 +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -UseOnlyPackageSilentArguments +Property | Value +---------------------- | ------------------------ +Aliases | useOnlyPackageSilentArgs +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -UseOriginalLocation +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -BeforeInstall [<ScriptBlock>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Get-UninstallRegistryKey' value='get-uninstallregistrykey' /> + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyPackage -Full`. + +View the source for [Install-ChocolateyPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateypath.mdx b/src/content/docs/en-us/create/functions/install-chocolateypath.mdx new file mode 100644 index 00000000000..faba68e0296 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateypath.mdx @@ -0,0 +1,120 @@ +--- +order: 250 +xref: install-chocolateypath +title: Install-ChocolateyPath +description: Information on Install-ChocolateyPath function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyPath + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPath.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required when `-PathType 'Machine'.` + +This puts a directory to the PATH environment variable. + +## Syntax + +~~~powershell +Install-ChocolateyPath ` + -PathToInstall <String> ` + [-PathType {Process | User | Machine}] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Looks at both PATH environment variables to ensure a path variable +correctly shows up on the right PATH. + +## Notes + +This command will assert UAC/Admin privileges on the machine if +`-PathType 'Machine'`. + +This is used when the application/tool is not being linked by Chocolatey +(not in the lib folder). + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Install-ChocolateyPath -PathToInstall "$($env:SystemDrive)\tools\gittfs" + +~~~ + +**EXAMPLE 2** + +~~~powershell +Install-ChocolateyPath "$($env:SystemDrive)\Program Files\MySQL\MySQL Server 5.5\bin" -PathType 'Machine' + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PathToInstall <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -PathType + +Valid options: Process, User, Machine + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | User +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyEnvironmentVariable' value='install-chocolateyenvironmentvariable' /> + * <Xref title='Get-EnvironmentVariable' value='get-environmentvariable' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + * <Xref title='Get-ToolsLocation' value='get-toolslocation' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyPath -Full`. + +View the source for [Install-ChocolateyPath](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPath.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateypinnedtaskbaritem.mdx b/src/content/docs/en-us/create/functions/install-chocolateypinnedtaskbaritem.mdx new file mode 100644 index 00000000000..04829ea7d8c --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateypinnedtaskbaritem.mdx @@ -0,0 +1,88 @@ +--- +order: 260 +xref: install-chocolateypinnedtaskbaritem +title: Install-ChocolateyPinnedTaskBarItem +description: Information on Install-ChocolateyPinnedTaskBarItem function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyPinnedTaskBarItem + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPinnedTaskBarItem.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Creates an item in the task bar linking to the provided path. + +## Syntax + +~~~powershell +Install-ChocolateyPinnedTaskBarItem ` + -TargetFilePath <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + + +## Notes + +Does not work with SYSTEM, but does not error. It warns with the error +message. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This will create a Visual Studio task bar icon. +Install-ChocolateyPinnedTaskBarItem -TargetFilePath "${env:ProgramFiles(x86)}\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -TargetFilePath <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyShortcut' value='install-chocolateyshortcut' /> + * <Xref title='Install-ChocolateyExplorerMenuItem' value='install-chocolateyexplorermenuitem' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyPinnedTaskBarItem -Full`. + +View the source for [Install-ChocolateyPinnedTaskBarItem](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPinnedTaskBarItem.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateypowershellcommand.mdx b/src/content/docs/en-us/create/functions/install-chocolateypowershellcommand.mdx new file mode 100644 index 00000000000..6b94dfb736a --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateypowershellcommand.mdx @@ -0,0 +1,207 @@ +--- +order: 270 +xref: install-chocolateypowershellcommand +title: Install-ChocolateyPowershellCommand +description: Information on Install-ChocolateyPowershellCommand function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyPowershellCommand + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPowershellCommand.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Installs a PowerShell Script as a command + +## Syntax + +~~~powershell +Install-ChocolateyPowershellCommand ` + [-PackageName <String>] ` + -PsFileFullPath <String> ` + [-Url <String>] ` + [-Url64bit <String>] ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-Checksum64 <String>] ` + [-ChecksumType64 <String>] ` + [-Options <Hashtable>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will install a PowerShell script as a command on your system. Like +an executable can be run from a batch redirect, this will do the same, +calling PowerShell with this command and passing your arguments to it. +If you include a url, it will first download the PowerShell file. + +## Notes + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +$psFile = Join-Path $(Split-Path -Parent $MyInvocation.MyCommand.Definition) "Install-WindowsImage.ps1" +Install-ChocolateyPowershellCommand -PackageName 'installwindowsimage.powershell' -PSFileFullPath $psFile +~~~ + +**EXAMPLE 2** + +~~~powershell + +$psFile = Join-Path $(Split-Path -Parent $MyInvocation.MyCommand.Definition) ` + "Install-WindowsImage.ps1" +Install-ChocolateyPowershellCommand ` + -PackageName 'installwindowsimage.powershell' ` + -PSFileFullPath $psFile ` + -PSFileFullPath $psFile ` + -Url 'http://somewhere.com/downloads/Install-WindowsImage.ps1' +~~~ + +**EXAMPLE 3** + +~~~powershell + +$psFile = Join-Path $(Split-Path -Parent $MyInvocation.MyCommand.Definition) ` + "Install-WindowsImage.ps1" +Install-ChocolateyPowershellCommand ` + -PackageName 'installwindowsimage.powershell' ` + -PSFileFullPath $psFile ` + -Url 'http://somewhere.com/downloads/Install-WindowsImage.ps1' ` + -Url64 'http://somewhere.com/downloads/Install-WindowsImagex64.ps1' +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -PsFileFullPath <String> +Property | Value +---------------------- | ------------------ +Aliases | file, fileFullPath +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Url64bit [<String>] +Property | Value +---------------------- | ----- +Aliases | url64 +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Checksum64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyPowershellCommand -Full`. + +View the source for [Install-ChocolateyPowershellCommand](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyPowershellCommand.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyshortcut.mdx b/src/content/docs/en-us/create/functions/install-chocolateyshortcut.mdx new file mode 100644 index 00000000000..498df355823 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyshortcut.mdx @@ -0,0 +1,209 @@ +--- +order: 280 +xref: install-chocolateyshortcut +title: Install-ChocolateyShortcut +description: Information on Install-ChocolateyShortcut function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyShortcut + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyShortcut.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Creates a shortcut + +## Syntax + +~~~powershell +Install-ChocolateyShortcut ` + -ShortcutFilePath <String> ` + -TargetPath <String> ` + [-WorkingDirectory <String>] ` + [-Arguments <String>] ` + [-IconLocation <String>] ` + [-Description <String>] ` + [-WindowStyle <Int32>] ` + [-RunAsAdmin] ` + [-PinToTaskbar] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This adds a shortcut, at the specified location, with the option to specify +a number of additional properties for the shortcut, such as Working Directory, +Arguments, Icon Location, and Description. + +## Notes + +If this errors, as it may if being run under the local SYSTEM account with +particular folder that SYSTEM doesn't have, it will display a warning instead +of failing a package installation. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This will create a new shortcut at the location of "C:\test.lnk" and +# link to the file located at "C:\text.exe" + +Install-ChocolateyShortcut -ShortcutFilePath "C:\test.lnk" -TargetPath "C:\test.exe" +~~~ + +**EXAMPLE 2** + +~~~powershell + +# This will create a new shortcut at the location of "C:\notepad.lnk" +# and link to the Notepad application. In addition, other properties +# are being set to specify the working directory, an icon to be used for +# the shortcut, along with a description and arguments. + +Install-ChocolateyShortcut ` + -ShortcutFilePath "C:\notepad.lnk" ` + -TargetPath "C:\Windows\System32\notepad.exe" ` + -WorkingDirectory "C:\" ` + -Arguments "C:\test.txt" ` + -IconLocation "C:\test.ico" ` + -Description "This is the description" +~~~ + +**EXAMPLE 3** + +~~~powershell + +# Creates a new notepad shortcut on the root of c: that starts +# notepad.exe as Administrator. Shortcut is also pinned to taskbar. + +Install-ChocolateyShortcut ` + -ShortcutFilePath "C:\notepad.lnk" ` + -TargetPath "C:\Windows\System32\notepad.exe" ` + -WindowStyle 3 ` + -RunAsAdmin ` + -PinToTaskbar +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -ShortcutFilePath <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -TargetPath <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -WorkingDirectory [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Arguments [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -IconLocation [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 5 +Default Value | +Accept Pipeline Input? | false + +### -Description [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 6 +Default Value | +Accept Pipeline Input? | false + +### -WindowStyle [<Int32>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 7 +Default Value | 0 +Accept Pipeline Input? | false + +### -RunAsAdmin +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -PinToTaskbar +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyExplorerMenuItem' value='install-chocolateyexplorermenuitem' /> + * <Xref title='Install-ChocolateyPinnedTaskBarItem' value='install-chocolateypinnedtaskbaritem' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyShortcut -Full`. + +View the source for [Install-ChocolateyShortcut](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyShortcut.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateyvsixpackage.mdx b/src/content/docs/en-us/create/functions/install-chocolateyvsixpackage.mdx new file mode 100644 index 00000000000..222292d3f4a --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyvsixpackage.mdx @@ -0,0 +1,176 @@ +--- +order: 290 +xref: install-chocolateyvsixpackage +title: Install-ChocolateyVsixPackage +description: Information on Install-ChocolateyVsixPackage function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyVsixPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyVsixPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Downloads and installs a VSIX package for Visual Studio + +## Syntax + +~~~powershell +Install-ChocolateyVsixPackage ` + -PackageName <String> ` + [-VsixUrl <String>] ` + [-VsVersion <Int32>] ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-Options <Hashtable>] ` + [-File <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +VSIX packages are Extensions for the Visual Studio IDE. The Visual +Studio Gallery at http://visualstudiogallery.msdn.microsoft.com/ is the +public extension feed and hosts thousands of extensions. You can locate +a VSIX Url by finding the download link of Visual Studio extensions on +the Visual Studio Gallery. + +## Notes + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This downloads the AutoWrockTestable VSIX from the Visual Studio +# Gallery and installs it to the latest version of VS. + +Install-ChocolateyVsixPackage -PackageName "MyPackage" ` + -VsixUrl http://visualstudiogallery.msdn.microsoft.com/ea3a37c9-1c76-4628-803e-b10a109e7943/file/73131/1/AutoWrockTestable.vsix +~~~ + +**EXAMPLE 2** + +~~~powershell + +# This downloads the AutoWrockTestable VSIX from the Visual Studio +# Gallery and installs it to Visual Studio 2012 (v11.0). + +Install-ChocolateyVsixPackage -PackageName "MyPackage" ` + -VsixUrl http://visualstudiogallery.msdn.microsoft.com/ea3a37c9-1c76-4628-803e-b10a109e7943/file/73131/1/AutoWrockTestable.vsix ` + -VsVersion 11 +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | name +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -VsixUrl [<String>] +Property | Value +---------------------- | ----- +Aliases | url +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -VsVersion [<Int32>] +Property | Value +---------------------- | ------------------- +Aliases | visualStudioVersion +Required? | false +Position? | 3 +Default Value | 0 +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ------------ +Aliases | fileFullPath +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyVsixPackage -Full`. + +View the source for [Install-ChocolateyVsixPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyVsixPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/install-chocolateywindowsservice.mdx b/src/content/docs/en-us/create/functions/install-chocolateywindowsservice.mdx new file mode 100644 index 00000000000..54493ff67b2 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateywindowsservice.mdx @@ -0,0 +1,270 @@ +--- +order: 285 +xref: install-chocolateywindowsservice +title: Install-ChocolateyWindowsService +description: Information on Install-ChocolateyWindowsService function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyWindowsService + +> :choco-info: **NOTE** +> +> This function requires a Chocolatey for Business License to use. + +Installs a Windows Service using Install Util, plus some extra awesome-sauce. + +## Syntax + +~~~powershell +Install-ChocolateyWindowsService ` + -Name <string> ` + -ServiceExecutablePath <string> ` + [-Username <string>] ` + [-Password <string>] ` + [-DisplayName <string>] ` + [-Description <string>] ` + [-StartupType <ChocolateyWindowsServiceStartupType> {Unknown | Manual | Automatic | Disabled}] ` + [-DoNotStartService] ` + [-DoNotReinstallService] ` + [<CommonParameters>] +~~~ + +## Description +This installs a Windows Service onto a machine. When provided a user name, this +will ensure that user exists, is in the Administrators group, and has all of the +correct privileges to run as a service. For more details on the privileges, see +the Username parameter below. + +If a user is not a built in user and no password is provided, Chocolatey will +manage the password, which will be different for every machine and user and very +complex. For more details on the password, see the Password parameter below. + +One of the additional advanced features of this function is being able to +upgrade a service without shutting it down first - Chocolatey will move the +current running service and put in all of the new binaries. It will require a +restart of the service to move to the new code, but you can upgrade a service in +place without shutting it down first (one time). To use this, you must supply +the DoNotReinstallService switch. See the parameter below for more details. + +## Notes +Requires Chocolatey for Business. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Install-ChocolateyWindowsService -Name 'bob' -ServiceExecutablePath 'c:\somewhere\to\service.exe' +~~~ + +**EXAMPLE 2** + +~~~powershell +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +$serviceExe = Join-Path $toolsDir 'service\dan-agent.exe' + +$packageArgs = @{ + Name = 'dan' + DisplayName = 'Dan Agent' + ServiceExecutablePath = $serviceExe + Username = 'DanTheBuilder' +} + +Install-ChocolateyWindowsService @packageArgs +~~~ + +**EXAMPLE 3** +This is the installation code for the Chocolatey Agent service itself. + +~~~powershell +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +$serviceExe = Join-Path $toolsDir 'service\chocolatey-agent.exe' + +$packageArgs = @{ + Name = 'chocolatey-agent' + DisplayName = 'Chocolatey Agent' + Description = 'Chocolatey Agent is a backgound service for Chocolatey.' + StartupType = 'Automatic' + ServiceExecutablePath = $serviceExe + Username = 'ChocolateyLocalAdmin' +} + +$pp = Get-PackageParameters +if ($pp['Username']) { $packageArgs['Username'] = $pp['Username'] } +if ($pp['Password']) { $packageArgs['Password'] = $pp['Password'] } +if ($pp['EnterPassword']) { $packageArgs['Password'] = Read-Host "Enter password for $($packageArgs['Username']):" -AsSecureString} +if ($pp['UseDefaultChocolateyConfigUser']) { $packageArgs.Remove('Username') } + +# We don't want to shut down the service when we are running in background mode +if ($env:ChocolateyBackgroundService -eq 'true') { + Write-Warning "Detected running in background mode to upgrade the chocolatey-agent. Upgrade will attempt without restarting the service. \n Changes to service itself (like user/password) will be ignored." + $packageArgs['DoNotReinstallService'] = $true +} + +# Explicit request not to restart or reinstall the service. +if ($pp['NoRestartService'] -or $pp['DoNotReinstallService']) { + Write-Warning "Upgrade will attempt without restarting the service. \n Changes to service itself (like user/password) will be ignored." + $packageArgs['DoNotReinstallService'] = $true +} + +Install-ChocolateyWindowsService @packageArgs +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Description [<string>] +The description of the service. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -DisplayName [<string>] +The display name of the service. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -DoNotReinstallService +Do not uninstall/restart service. This is for advanced scenarios when you need +to deploy a newer version of a service and control when the restart happens over +to the newly deployed code. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -DoNotStartService +Do not start service after install. This keeps the service from starting up when +installing/upgrading. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -Name <string> +The name of the service to install. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | true +Position? | 0 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -Password [<string>] + +The password for the service - defaults to empty. If the user is not a built-in +account like LocalSystem and the user name is provided without a password being +provided, the password will automatically be a Chocolatey Managed Password. + +When Chocolatey manages the password for an account, it creates a very complex +password: + +* 32 characters long +* Uppercase, lowercase, numbers, and symbols to meet very stringent complexity + requirements +* Different for every machine +* Completely unguessable + +No one at Chocolatey Software could even tell you what the password is for a +particular machine without local access. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -ServiceExecutablePath <string> +The full path (absolute path) to the service executable file. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -StartupType [<ChocolateyWindowsServiceStartupType>] +The startup type of the service. Defaults to Automatic. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | false +Position? | Named +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + +### -Username [<string>] +The username for the service - defaults to LocalSystem (SYSTEM). If the user +does not exist, the user will be created. When a user is specified for a +service, the following things will also occur as part of this function: + +* User added to Administrators group +* User given privilege/right to run as a service (SeServiceLogonRight) +* User given privilege/right to log on as a batch (SeBatchLogonRight) +* User given privilege/right to log on interactively (SeInteractiveLogonRight) +* User given privilege/right to log on network (SeNetworkLogonRight) + + + +Property | Value +---------------------- | --------------------- +Aliases | user +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from licensed code. \ No newline at end of file diff --git a/src/content/docs/en-us/create/functions/install-chocolateyzippackage.mdx b/src/content/docs/en-us/create/functions/install-chocolateyzippackage.mdx new file mode 100644 index 00000000000..03d1e8e6749 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-chocolateyzippackage.mdx @@ -0,0 +1,237 @@ +--- +order: 300 +xref: install-chocolateyzippackage +title: Install-ChocolateyZipPackage +description: Information on Install-ChocolateyZipPackage function +--- +import Xref from '@components/Xref.astro'; + +# Install-ChocolateyZipPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyZipPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Downloads file from a url and unzips it on your machine. Use +Get-ChocolateyUnzip when local or embedded file. + +## Syntax + +~~~powershell +Install-ChocolateyZipPackage ` + -PackageName <String> ` + [-Url <String>] ` + -UnzipLocation <String> ` + [-Url64bit <String>] ` + [-SpecificFolder <String>] ` + [-Checksum <String>] ` + [-ChecksumType <String>] ` + [-Checksum64 <String>] ` + [-ChecksumType64 <String>] ` + [-Options <Hashtable>] ` + [-File <String>] ` + [-File64 <String>] ` + [-DisableLogging] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will download a file from a url and unzip it on your machine. +If you are embedding the file(s) directly in the package (or do not need +to download a file first), use Get-ChocolateyUnzip instead. + +## Notes + +Chocolatey works best when the packages contain the software it is +managing and doesn't require downloads. However most software in the +Windows world requires redistribution rights and when sharing packages +publicly (like on the [community feed](https://community.chocolatey.org/packages)), maintainers may not have those +aforementioned rights. Chocolatey understands how to work with that, +hence this function. You are not subject to this limitation with +internal packages. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Install-ChocolateyZipPackage -PackageName 'gittfs' -Url 'https://github.com/downloads/spraints/git-tfs/GitTfs-0.11.0.zip' -UnzipLocation $gittfsPath + +~~~ + +**EXAMPLE 2** + +~~~powershell + +Install-ChocolateyZipPackage -PackageName 'sysinternals' ` + -Url 'http://download.sysinternals.com/Files/SysinternalsSuite.zip' ` + -UnzipLocation "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" +~~~ + +**EXAMPLE 3** + +~~~powershell + +Install-ChocolateyZipPackage -PackageName 'sysinternals' ` + -Url 'http://download.sysinternals.com/Files/SysinternalsSuite.zip' ` + -UnzipLocation "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" ` + -Url64 'http://download.sysinternals.com/Files/SysinternalsSuitex64.zip' +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Url [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -UnzipLocation <String> +Property | Value +---------------------- | ----------- +Aliases | destination +Required? | true +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -Url64bit [<String>] +Property | Value +---------------------- | ----- +Aliases | url64 +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -SpecificFolder [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Checksum [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Checksum64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -ChecksumType64 [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -Options [<Hashtable>] +Property | Value +---------------------- | ------------------- +Aliases | +Required? | false +Position? | named +Default Value | `@{Headers = @{}` } +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ------------ +Aliases | fileFullPath +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -File64 [<String>] +Property | Value +---------------------- | -------------- +Aliases | fileFullPath64 +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -DisableLogging +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Get-ChocolateyWebFile' value='get-chocolateywebfile' /> + * <Xref title='Get-ChocolateyUnzip' value='get-chocolateyunzip' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-ChocolateyZipPackage -Full`. + +View the source for [Install-ChocolateyZipPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-ChocolateyZipPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/install-vsix.mdx b/src/content/docs/en-us/create/functions/install-vsix.mdx new file mode 100644 index 00000000000..9e032f8f319 --- /dev/null +++ b/src/content/docs/en-us/create/functions/install-vsix.mdx @@ -0,0 +1,90 @@ +--- +order: 310 +xref: install-vsix +title: Install-Vsix +description: Information on Install-Vsix function +--- +import Xref from '@components/Xref.astro'; + +# Install-Vsix + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-Vsix.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +DO NOT USE. Not part of the public API. + +## Syntax + +~~~powershell +Install-Vsix ` + -Installer <String> ` + -InstallFile <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Installs a VSIX package into a particular version of Visual Studio. + +## Notes + +This is not part of the public API. Please use +Install-ChocolateyVsixPackage instead. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Installer <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -InstallFile <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyVsixPackage' value='install-chocolateyvsixpackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Install-Vsix -Full`. + +View the source for [Install-Vsix](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Install-Vsix.ps1) diff --git a/src/content/docs/en-us/create/functions/set-environmentvariable.mdx b/src/content/docs/en-us/create/functions/set-environmentvariable.mdx new file mode 100644 index 00000000000..189715b3ab1 --- /dev/null +++ b/src/content/docs/en-us/create/functions/set-environmentvariable.mdx @@ -0,0 +1,111 @@ +--- +order: 320 +xref: set-environmentvariable +title: Set-EnvironmentVariable +description: Information on Set-EnvironmentVariable function +--- +import Xref from '@components/Xref.astro'; + +# Set-EnvironmentVariable + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Set-EnvironmentVariable.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required when `-Scope 'Machine'.` + +DO NOT USE. Not part of the public API. Use +`Install-ChocolateyEnvironmentVariable` instead. + +## Syntax + +~~~powershell +Set-EnvironmentVariable ` + -Name <String> ` + [-Value <String>] ` + [-Scope {Process | User | Machine}] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Saves an environment variable. + +## Notes + +This command will assert UAC/Admin privileges on the machine if +`-Scope 'Machine'`. + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Value [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -Scope + +Valid options: Process, User, Machine + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyEnvironmentVariable' value='install-chocolateyenvironmentvariable' /> + * <Xref title='Uninstall-ChocolateyEnvironmentVariable' value='uninstall-chocolateyenvironmentvariable' /> + * <Xref title='Install-ChocolateyPath' value='install-chocolateypath' /> + * <Xref title='Get-EnvironmentVariable' value='get-environmentvariable' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Set-EnvironmentVariable -Full`. + +View the source for [Set-EnvironmentVariable](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Set-EnvironmentVariable.ps1) diff --git a/src/content/docs/en-us/create/functions/set-powershellexitcode.mdx b/src/content/docs/en-us/create/functions/set-powershellexitcode.mdx new file mode 100644 index 00000000000..c084e5c6b14 --- /dev/null +++ b/src/content/docs/en-us/create/functions/set-powershellexitcode.mdx @@ -0,0 +1,85 @@ +--- +order: 330 +xref: set-powershellexitcode +title: Set-PowerShellExitCode +description: Information on Set-PowerShellExitCode function +--- +import Xref from '@components/Xref.astro'; + +# Set-PowerShellExitCode + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Set-PowerShellExitCode.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Sets the exit code for the PowerShell scripts. + +## Syntax + +~~~powershell +Set-PowerShellExitCode ` + [-ExitCode <Int32>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Sets the exit code as an environment variable that is checked and used +as the exit code for the package at the end of the package script. + +## Notes + +This tells PowerShell that it should prepare to shut down. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Set-PowerShellExitCode 3010 + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -ExitCode [<Int32>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | 0 +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Set-PowerShellExitCode -Full`. + +View the source for [Set-PowerShellExitCode](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Set-PowerShellExitCode.ps1) diff --git a/src/content/docs/en-us/create/functions/start-chocolateyprocessasadmin.mdx b/src/content/docs/en-us/create/functions/start-chocolateyprocessasadmin.mdx new file mode 100644 index 00000000000..c37514271b0 --- /dev/null +++ b/src/content/docs/en-us/create/functions/start-chocolateyprocessasadmin.mdx @@ -0,0 +1,205 @@ +--- +order: 340 +xref: start-chocolateyprocessasadmin +title: Start-ChocolateyProcessAsAdmin +description: Information on Start-ChocolateyProcessAsAdmin function +--- +import Xref from '@components/Xref.astro'; + +# Start-ChocolateyProcessAsAdmin + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Start-ChocolateyProcessAsAdmin.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required. + +Runs a process with administrative privileges. If `-ExeToRun` is not +specified, it is run with PowerShell. + +## Syntax + +~~~powershell +Start-ChocolateyProcessAsAdmin ` + [-Statements <String[]>] ` + [-ExeToRun <String>] ` + [-Elevated] ` + [-Minimized] ` + [-NoSleep] ` + [-ValidExitCodes <Object>] ` + [-WorkingDirectory <String>] ` + [-SensitiveStatements <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + + +## Notes + +This command will assert UAC/Admin privileges on the machine. + +Will automatically call Set-PowerShellExitCode to set the package exit +code in the following ways: + +- 4 if the binary turns out to be a text file. +- The same exit code returned from the process that is run. If a 3010 is returned, it will set 3010 for the package. + +Aliases `Start-ChocolateyProcess` and `Invoke-ChocolateyProcess`. + +## Aliases + +`Invoke-ChocolateyProcess` +`Start-ChocolateyProcess` + + +## Examples + + **EXAMPLE 1** + +~~~powershell +Start-ChocolateyProcessAsAdmin -Statements "$msiArgs" -ExeToRun 'msiexec' + +~~~ + +**EXAMPLE 2** + +~~~powershell +Start-ChocolateyProcessAsAdmin -Statements "$silentArgs" -ExeToRun $file + +~~~ + +**EXAMPLE 3** + +~~~powershell +Start-ChocolateyProcessAsAdmin -Statements "$silentArgs" -ExeToRun $file -ValidExitCodes @(0,21) + +~~~ + +**EXAMPLE 4** + +~~~powershell + +# Run PowerShell statements +$psFile = Join-Path "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" 'someInstall.ps1' +Start-ChocolateyProcessAsAdmin "& `'$psFile`'" +~~~ + +**EXAMPLE 5** + +~~~powershell +# This also works for cmd and is required if you have any spaces in the paths within your command +$appPath = "$env:ProgramFiles\myapp" +$cmdBatch = "/c `"$appPath\bin\installmyappservice.bat`"" +Start-ChocolateyProcessAsAdmin $cmdBatch cmd +# or more explicitly +Start-ChocolateyProcessAsAdmin -Statements $cmdBatch -ExeToRun "cmd.exe" +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Statements [<String[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -ExeToRun [<String>] +Property | Value +---------------------- | ---------- +Aliases | +Required? | false +Position? | 2 +Default Value | powershell +Accept Pipeline Input? | false + +### -Elevated +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | True +Accept Pipeline Input? | false + +### -Minimized +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -NoSleep +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | False +Accept Pipeline Input? | false + +### -ValidExitCodes [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | @(0) +Accept Pipeline Input? | false + +### -WorkingDirectory [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -SensitiveStatements [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Start-ChocolateyProcessAsAdmin -Full`. + +View the source for [Start-ChocolateyProcessAsAdmin](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Start-ChocolateyProcessAsAdmin.ps1) diff --git a/src/content/docs/en-us/create/functions/start-chocolateywindowsservice.mdx b/src/content/docs/en-us/create/functions/start-chocolateywindowsservice.mdx new file mode 100644 index 00000000000..e5d74a3ac8b --- /dev/null +++ b/src/content/docs/en-us/create/functions/start-chocolateywindowsservice.mdx @@ -0,0 +1,62 @@ +--- +order: 333 +xref: start-chocolateywindowsservice +title: Start-ChocolateyWindowsService +description: Information on Start-ChocolateyWindowsService function +--- +import Xref from '@components/Xref.astro'; + +# Start-ChocolateyWindowsService + +> :choco-info: **NOTE** +> +> This function requires a Chocolatey for Business License to use. + +Starts a Windows Service. + +## Syntax + +~~~powershell +Start-ChocolateyWindowsService ` + -Name <string> ` + [<CommonParameters>] +~~~ + + +## Aliases + +None + +## Notes +Requires Chocolatey for Business. + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <string> +The name of the service to start. Will throw an error if it doesn't exist. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | true +Position? | 0 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from licensed code. \ No newline at end of file diff --git a/src/content/docs/en-us/create/functions/stop-chocolateywindowsservice.mdx b/src/content/docs/en-us/create/functions/stop-chocolateywindowsservice.mdx new file mode 100644 index 00000000000..943aac0a546 --- /dev/null +++ b/src/content/docs/en-us/create/functions/stop-chocolateywindowsservice.mdx @@ -0,0 +1,64 @@ +--- +order: 336 +xref: stop-chocolateywindowsservice +title: Stop-ChocolateyWindowsService +description: Information on Stop-ChocolateyWindowsService function +--- +import Xref from '@components/Xref.astro'; + +# Stop-ChocolateyWindowsService + +> :choco-info: **NOTE** +> +> This function requires a Chocolatey for Business License to use. + +Stops a Windows Service. + + +## Syntax + +~~~powershell +Stop-ChocolateyWindowsService ` + -Name <string> ` + [<CommonParameters>] +~~~ + + + +## Aliases + +None + +## Notes +Requires Chocolatey for Business. + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <string> +The name of the service to stop. Will not throw an error if it doesn't exist. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | true +Position? | 0 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from licensed code. \ No newline at end of file diff --git a/src/content/docs/en-us/create/functions/test-processadminrights.mdx b/src/content/docs/en-us/create/functions/test-processadminrights.mdx new file mode 100644 index 00000000000..9755276f4a3 --- /dev/null +++ b/src/content/docs/en-us/create/functions/test-processadminrights.mdx @@ -0,0 +1,56 @@ +--- +order: 350 +xref: test-processadminrights +title: Test-ProcessAdminRights +description: Information on Test-ProcessAdminRights function +--- +import Xref from '@components/Xref.astro'; + +# Test-ProcessAdminRights + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Test-ProcessAdminRights.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Tests whether the current process is running with administrative rights. + +## Syntax + +~~~powershell +Test-ProcessAdminRights +~~~ + +## Description + +This function checks whether the current process has administrative +rights by checking if the current user identity is a member of the +Administrators group. It returns `$true` if the current process is +running with administrative rights, `$false` otherwise. + +On Windows Vista and later, with UAC enabled, the returned value +represents the actual rights available to the process, e.g. if it +returns `$true`, the process is running elevated. + + +## Aliases + +None + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Test-ProcessAdminRights -Full`. + +View the source for [Test-ProcessAdminRights](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Test-ProcessAdminRights.ps1) diff --git a/src/content/docs/en-us/create/functions/uninstall-binfile.mdx b/src/content/docs/en-us/create/functions/uninstall-binfile.mdx new file mode 100644 index 00000000000..042f3436602 --- /dev/null +++ b/src/content/docs/en-us/create/functions/uninstall-binfile.mdx @@ -0,0 +1,97 @@ +--- +order: 360 +xref: uninstall-binfile +title: Uninstall-BinFile +description: Information on Uninstall-BinFile function +--- +import Xref from '@components/Xref.astro'; + +# Uninstall-BinFile + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-BinFile.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Removes a shim (or batch redirect) for a file. + +## Syntax + +~~~powershell +Uninstall-BinFile ` + -Name <String> ` + [-Path <String>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Chocolatey installs have the folder `$($env:ChocolateyInstall)\bin` +included in the PATH environment variable. Chocolatey automatically +shims executables in package folders that are not explicitly ignored, +putting them into the bin folder (and subsequently onto the PATH). + +When you have other files you have shimmed, you need to use this +function to remove them from the bin folder. + +## Notes + +Not normally needed for exe files in the package folder, those are +automatically discovered and the shims removed. + +## Aliases + +`Remove-BinFile` + + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Path [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-BinFile' value='install-binfile' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Uninstall-BinFile -Full`. + +View the source for [Uninstall-BinFile](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-BinFile.ps1) diff --git a/src/content/docs/en-us/create/functions/uninstall-chocolateyenvironmentvariable.mdx b/src/content/docs/en-us/create/functions/uninstall-chocolateyenvironmentvariable.mdx new file mode 100644 index 00000000000..9f9efe2319d --- /dev/null +++ b/src/content/docs/en-us/create/functions/uninstall-chocolateyenvironmentvariable.mdx @@ -0,0 +1,122 @@ +--- +order: 370 +xref: uninstall-chocolateyenvironmentvariable +title: Uninstall-ChocolateyEnvironmentVariable +description: Information on Uninstall-ChocolateyEnvironmentVariable function +--- +import Xref from '@components/Xref.astro'; + +# Uninstall-ChocolateyEnvironmentVariable + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyEnvironmentVariable.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +> :choco-info: **NOTE** +> +> Administrative Access Required when `-VariableType 'Machine'.` + +Removes a persistent environment variable. + +## Syntax + +~~~powershell +Uninstall-ChocolateyEnvironmentVariable ` + -VariableName <String> ` + [-VariableType {Process | User | Machine}] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Uninstall-ChocolateyEnvironmentVariable removes an environment variable +with the specified name and value. The variable can be scoped either to +the User or to the Machine. If Machine level scoping is specified, the +command is elevated to an administrative session. + +## Notes + +This command will assert UAC/Admin privileges on the machine when +`-VariableType Machine`. + +This will remove the environment variable from the current session. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# Remove an environment variable +Uninstall-ChocolateyEnvironmentVariable -VariableName 'bob' +~~~ + +**EXAMPLE 2** + +~~~powershell + +# Remove an environment variable from Machine +Uninstall-ChocolateyEnvironmentVariable -VariableName 'bob' -VariableType 'Machine' +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -VariableName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -VariableType + +Valid options: Process, User, Machine + +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | User +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyEnvironmentVariable' value='install-chocolateyenvironmentvariable' /> + * <Xref title='Set-EnvironmentVariable' value='set-environmentvariable' /> + * <Xref title='Install-ChocolateyPath' value='install-chocolateypath' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Uninstall-ChocolateyEnvironmentVariable -Full`. + +View the source for [Uninstall-ChocolateyEnvironmentVariable](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyEnvironmentVariable.ps1) diff --git a/src/content/docs/en-us/create/functions/uninstall-chocolateypackage.mdx b/src/content/docs/en-us/create/functions/uninstall-chocolateypackage.mdx new file mode 100644 index 00000000000..b560063eb71 --- /dev/null +++ b/src/content/docs/en-us/create/functions/uninstall-chocolateypackage.mdx @@ -0,0 +1,158 @@ +--- +order: 380 +xref: uninstall-chocolateypackage +title: Uninstall-ChocolateyPackage +description: Information on Uninstall-ChocolateyPackage function +--- +import Xref from '@components/Xref.astro'; + +# Uninstall-ChocolateyPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Uninstalls software from "Programs and Features". + +## Syntax + +~~~powershell +Uninstall-ChocolateyPackage ` + -PackageName <String> ` + [-FileType <String>] ` + [-SilentArgs <String[]>] ` + [-File <String>] ` + [-ValidExitCodes <Object>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will uninstall software from your machine (in Programs and +Features). This may not be necessary if Auto Uninstaller is turned on. + +Chocolatey CLI automatically tracks registry changes for "Programs and +Features" of the underlying software's native installers when +installing packages. The "Automatic Uninstaller" (auto uninstaller) +service is a feature that can use that information to automatically +determine how to uninstall these natively installed applications. This +means that a package may not need an explicit chocolateyUninstall.ps1 +to reverse the installation done in the install script. + +With auto uninstaller turned off, a chocolateyUninstall.ps1 is required +to perform uninstall from "Programs and Features". In the absence of +chocolateyUninstall.ps1, choco uninstall only removes the package from +Chocolatey but does not remove the software from your system without +auto uninstaller. + +## Notes + +May not be required. The Automatic Uninstaller (AutoUninstaller) is +turned on by default. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Uninstall-ChocolateyPackage '__NAME__' 'EXE_OR_MSI' 'SILENT_ARGS' 'FilePath' + +~~~ + +**EXAMPLE 2** + +~~~powershell + +Uninstall-ChocolateyPackage -PackageName $packageName ` + -FileType $installerType ` + -SilentArgs "$silentArgs" ` + -ValidExitCodes $validExitCodes ` + -File "$file" +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -FileType [<String>] +Property | Value +---------------------- | ------------- +Aliases | installerType +Required? | false +Position? | 2 +Default Value | exe +Accept Pipeline Input? | false + +### -SilentArgs [<String[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### -File [<String>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 4 +Default Value | +Accept Pipeline Input? | false + +### -ValidExitCodes [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | @(0) +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyPackage' value='install-chocolateypackage' /> + * <Xref title='Install-ChocolateyInstallPackage' value='install-chocolateyinstallpackage' /> + * <Xref title='Uninstall-ChocolateyZipPackage' value='uninstall-chocolateyzippackage' /> + * <Xref title='Get-UninstallRegistryKey' value='get-uninstallregistrykey' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Uninstall-ChocolateyPackage -Full`. + +View the source for [Uninstall-ChocolateyPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/uninstall-chocolateywindowsservice.mdx b/src/content/docs/en-us/create/functions/uninstall-chocolateywindowsservice.mdx new file mode 100644 index 00000000000..de583d9343f --- /dev/null +++ b/src/content/docs/en-us/create/functions/uninstall-chocolateywindowsservice.mdx @@ -0,0 +1,62 @@ +--- +order: 375 +xref: uninstall-chocolateywindowsservice +title: Uninstall-ChocolateyWindowsService +description: Information on Uninstall-ChocolateyWindowsService function +--- +import Xref from '@components/Xref.astro'; + +# Uninstall-ChocolateyWindowsService + +> :choco-info: **NOTE** +> +> This function requires a Chocolatey for Business License to use. + +Uninstalls a Windows Service. + +## Syntax + +~~~powershell +Uninstall-ChocolateyWindowsService ` + -Name <string> ` + [<CommonParameters>] +~~~ + + +## Aliases + +None + +## Notes +Requires Chocolatey for Business. + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Name <string> +The name of the service to uninstall. + + +Property | Value +---------------------- | --------------------- +Aliases | +Required? | true +Position? | 0 +Default Value | +Accept Pipeline Input? | true (ByPropertyName) + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from licensed code. \ No newline at end of file diff --git a/src/content/docs/en-us/create/functions/uninstall-chocolateyzippackage.mdx b/src/content/docs/en-us/create/functions/uninstall-chocolateyzippackage.mdx new file mode 100644 index 00000000000..2e5e4e8591d --- /dev/null +++ b/src/content/docs/en-us/create/functions/uninstall-chocolateyzippackage.mdx @@ -0,0 +1,104 @@ +--- +order: 390 +xref: uninstall-chocolateyzippackage +title: Uninstall-ChocolateyZipPackage +description: Information on Uninstall-ChocolateyZipPackage function +--- +import Xref from '@components/Xref.astro'; + +# Uninstall-ChocolateyZipPackage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyZipPackage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Uninstalls a previous installed zip package, may not be necessary. + +## Syntax + +~~~powershell +Uninstall-ChocolateyZipPackage ` + -PackageName <String> ` + -ZipFileName <String> ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +This will uninstall a zip file if installed via Install-ChocolateyZipPackage. +This is not necessary if the files are unzipped to the package directory. + +## Notes + +Not necessary if files are unzipped to package directory. + +This helper reduces the number of lines one would have to remove the +files extracted from a previously installed zip file. +This method has error handling built into it. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell +Uninstall-ChocolateyZipPackage '__NAME__' 'filename.zip' + +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -PackageName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -ZipFileName <String> +Property | Value +---------------------- | ----- +Aliases | +Required? | true +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | named +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + +## Links + + * <Xref title='Install-ChocolateyZipPackage' value='install-chocolateyzippackage' /> + * <Xref title='Uninstall-ChocolateyPackage' value='uninstall-chocolateypackage' /> + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Uninstall-ChocolateyZipPackage -Full`. + +View the source for [Uninstall-ChocolateyZipPackage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Uninstall-ChocolateyZipPackage.ps1) diff --git a/src/content/docs/en-us/create/functions/update-sessionenvironment.mdx b/src/content/docs/en-us/create/functions/update-sessionenvironment.mdx new file mode 100644 index 00000000000..877b2fa79ec --- /dev/null +++ b/src/content/docs/en-us/create/functions/update-sessionenvironment.mdx @@ -0,0 +1,68 @@ +--- +order: 400 +xref: update-sessionenvironment +title: Update-SessionEnvironment +description: Information on Update-SessionEnvironment function +--- +import Xref from '@components/Xref.astro'; + +# Update-SessionEnvironment + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +Updates the environment variables of the current powershell session with +any environment variable changes that may have occurred during a +Chocolatey package install. + +## Syntax + +~~~powershell +Update-SessionEnvironment +~~~ + +## Description + +When Chocolatey installs a package, the package author may add or change +certain environment variables that will affect how the application runs +or how it is accessed. Often, these changes are not visible to the +current PowerShell session. This means the user needs to open a new +PowerShell session before these settings take effect which can render +the installed application nonfunctional until that time. + +Use the Update-SessionEnvironment command to refresh the current +PowerShell session with all environment settings possibly performed by +Chocolatey package installs. + +## Notes + +This method is also added to the user's PowerShell profile as +`refreshenv`. When called as `refreshenv`, the method will provide +additional output. + +Preserves `PSModulePath` as set by the process. + +## Aliases + +`refreshenv` + + +## Inputs + +None + +## Outputs + +None + +## Parameters + + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Update-SessionEnvironment -Full`. + +View the source for [Update-SessionEnvironment](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Update-SessionEnvironment.ps1) diff --git a/src/content/docs/en-us/create/functions/write-functioncalllogmessage.mdx b/src/content/docs/en-us/create/functions/write-functioncalllogmessage.mdx new file mode 100644 index 00000000000..eb786c40f21 --- /dev/null +++ b/src/content/docs/en-us/create/functions/write-functioncalllogmessage.mdx @@ -0,0 +1,95 @@ +--- +order: 410 +xref: write-functioncalllogmessage +title: Write-FunctionCallLogMessage +description: Information on Write-FunctionCallLogMessage function +--- +import Xref from '@components/Xref.astro'; + +# Write-FunctionCallLogMessage + +{/* This documentation is automatically generated from https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Write-FunctionCallLogMessage.ps1 using https://github.com/chocolatey/choco/blob/master/GenerateDocs.ps1. Contributions are welcome at the original location(s). */} + +DO NOT USE. Not part of the public API. + +## Syntax + +~~~powershell +Write-FunctionCallLogMessage ` + [-Invocation <Object>] ` + [-Parameters <Object>] ` + [-IgnoredArguments <Object[]>] [<CommonParameters>] +~~~ + +## Description + +Writes function call as a debug message. + +## Notes + +This function is not part of the API. + +## Aliases + +None + +## Examples + + **EXAMPLE 1** + +~~~powershell + +# This is how this function should always be called +Write-FunctionCallLogMessage -Invocation $MyInvocation -Parameters $PSBoundParameters +~~~ + +## Inputs + +None + +## Outputs + +None + +## Parameters + +### -Invocation [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 1 +Default Value | +Accept Pipeline Input? | false + +### -Parameters [<Object>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 2 +Default Value | +Accept Pipeline Input? | false + +### -IgnoredArguments [<Object[]>] +Property | Value +---------------------- | ----- +Aliases | +Required? | false +Position? | 3 +Default Value | +Accept Pipeline Input? | false + +### <CommonParameters> + +This cmdlet supports the common parameters: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, and -OutVariable. For more information, see `about_CommonParameters` http://go.microsoft.com/fwlink/p/?LinkID=113216 . + + + +<Xref title="Function Reference" value="powershell-reference" /> + +> :choco-info: **NOTE** +> +> This documentation has been automatically generated from `Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force; Get-Help Write-FunctionCallLogMessage -Full`. + +View the source for [Write-FunctionCallLogMessage](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/functions/Write-FunctionCallLogMessage.ps1) diff --git a/src/content/docs/en-us/create/hook-scripts.mdx b/src/content/docs/en-us/create/hook-scripts.mdx new file mode 100644 index 00000000000..d746b6609f6 --- /dev/null +++ b/src/content/docs/en-us/create/hook-scripts.mdx @@ -0,0 +1,9 @@ +--- +order: 60 +xref: hook-scripts +title: Hook Scripts +description: How to use hooks with Chocolatey packages +--- +import Xref from '@components/Xref.astro'; + +Information for using hooks can be found in the <Xref title="documentation" value="hooks" />. \ No newline at end of file diff --git a/src/content/docs/en-us/create/index.mdx b/src/content/docs/en-us/create/index.mdx new file mode 100644 index 00000000000..2d0be13bd86 --- /dev/null +++ b/src/content/docs/en-us/create/index.mdx @@ -0,0 +1,8 @@ +--- +order: 160 +xref: package-creation +title: Package Creation +description: Information about how to create a new Chocolatey package +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/create/package-dependencies.mdx b/src/content/docs/en-us/create/package-dependencies.mdx new file mode 100644 index 00000000000..334f1186af0 --- /dev/null +++ b/src/content/docs/en-us/create/package-dependencies.mdx @@ -0,0 +1,60 @@ +--- +order: 30 +xref: package-dependencies +title: Package Dependencies in Chocolatey +description: Understanding Package Dependencies in Chocolatey +--- +import Xref from '@components/Xref.astro'; + +# Introduction + +Chocolatey being built on top of a NuGet framework means that we can take advantage of the rich dependency experience that NuGet provides to developers. This allows you to simplify complex application requirements into a single easy-to-use Chocolatey package. + +## Understanding Dependency Syntax + +Dependencies for a particular application are all defined within a package's nuspec file. This file contains _all_ of the metadata about a particular Chocolatey package including: +- Title +- Author +- Version +- Description +- Release Notes, etc + +A `nuspec` _also_ includes a section for defining package dependencies. + +A common example that you'll see across many Chocolatey packages on the [Community Repository](https://community.chocolatey.org/packages) looks like the following: + +```xml +<dependencies> + <dependency id="chocolatey-core.extension" version="1.3.3" /> +</dependencies> +``` + +You will notice in the above sample that there are two elements to a `<dependency />`: +- The `id`, or package name +- An _optional_ `version`. + +If you _do NOT_ provide a version number, Chocolatey will attempt to resolve the dependency to the latest stable release available on the available source(s) per your Chocolatey configuration, or command line you passed. + +In our particular example above the `chocolatey-core.extension` package will resolve at _least_ the 1.3.3 version of the package, unless a newer version is available on your configured source(s). + +### Version Semantics + +Chocolatey follows the NuGet SemVer notation, including exact versions, minimum inclusive, maximum exclusive etc etc. For more information on the available version ranges and their syntax please see the [NuGet SemVer Reference](https://docs.microsoft.com/en-us/nuget/concepts/package-versioning#version-ranges) documentation available from docs.microsoft.com. + +Additionally, any time you run the `choco new` command to manually build a new Chocolatey Package, the included nuspec template will include information about dependencies and how to use them in the Dependencies section of the file. + +## Understanding how Dependencies are installed + +When a package has a dependency defined, Chocolatey ensures that that dependency is first installed before installing the requested package. For example, you may have a LOB application packaged with Chocolatey that takes a dependency on a particular version of Java Runtime Environment. By defining the specific jre package id and version this LOB application requires, you need only worry about issuing a `choco install LOB -y` command on your target system, and Chocolatey will first check if the dependency is installed, and whether it needs to be upgraded based on the version of the dependency defined. If the dependency is already met, nothing happens, and your LOB application is installed. If the dependency is missing or not the correct version, Chocolatey ensures this _first_ and then installs your LOB application. + +## What you can do with Dependencies and chaining. + +Now that you see how dependencies are defined, their syntax, and how they work, you can start to experiment with things! Perhaps you have a role within your organization that requires a certain list of applications. You could use what is known as a "metapackage" to issue a single `choco install` command, but ensure that _all_ of the required applications are installed. This is done by creating a package for this specific role, and _only including_ a `.nuspec` file. Inside of this nuspec fill out all the required metadata, and list as dependencies all of your required application packages. Chocolatey will do the hard work of ensuring those things are installed when you install this metapackage. + +It is also helpful for very complex packages where a package may take a dependency, which in turn has another dependency. Chocolatey will walk this dependency chain all the way to the beginning, and work backwards until all dependencies are met, and then proceed to install your requested package. + +## Wrapping up + +As you can see dependencies in Chocolatey packages are relatively easy to understand, define, and utilize in your Chocolatey packaging! We encourage you to take advantage of this enhanced functionality in your environments. + +Still have questions? Join our [Discord](Community Chat)! If you're a Chocolatey For Business customer, run `choco support` to see how to get in touch with our support team, who are at the ready to assist you with Package Dependencies! \ No newline at end of file diff --git a/src/content/docs/en-us/default-chocolatey-install-reasoning.mdx b/src/content/docs/en-us/default-chocolatey-install-reasoning.mdx new file mode 100644 index 00000000000..ddda5993a8a --- /dev/null +++ b/src/content/docs/en-us/default-chocolatey-install-reasoning.mdx @@ -0,0 +1,25 @@ +--- +order: 74 +xref: default-chocolatey-install-reasoning +title: Default Chocolatey Install Reasoning +description: Background information on why Chocolatey installs where it does by default +showInSidebar: false +--- +import Xref from '@components/Xref.astro'; + +## <span style="color:red;">NOTICE: As of 0.9.8.24, Chocolatey's default install location is C:\ProgramData\Chocolatey</span> + +This reduces the attack surface on a local installation of Chocolatey and limits who can make changes to the directory. + +You can install Chocolatey to Program Files if you feel that is a more appropriate place. Because Chocolatey has files that change with package installations and it doesn't actually install to Programs and Features (what we consider synonymous with Program Files), we didn't feel this was the appropriate location. Plus with logging currently all in the same location, it would mean you would need to run `choco` with administrative permissions every time, even if you are just doing things like searching for packages, finding out what is installed locally, etc. + +## What about Program Files? Why not default to there? + +You can definitely choose to install to Program Files, however bear in mind that the following considerations apply for you as well. + +1. Files in Program Files are not supposed to change. Data/user data (aka packages) would need to be somewhere else. Most folks put that common user data to ProgramData. Since the Chocolatey files are not much on top of that, everything is there. +2. Program Files is usually, IMHO, reserved for things that are actually system-installed on the machine (like in Program and Features). And again, only what is installed by an installer should go there. All data/packages should go somewhere else, like ProgramData. +3. .NET doesn't handle long paths well. In fact it doesn't handle them at all. We are not much worse off in Program Files, until you consider Program Files (x86). +4. Choco is both x86/x64 - but the applications it installs could be either. Where do those go (this is assuming we shim in "C:\Program Files\Chocolatey\bin" and not to "C:\ProgramData\chocolatey\bin")? Technically x86 apps should never be in "C:\Program Files", they should be in "C:\Program Files (x86)". + +Not saying it is an impossible scenario. It's just generally a difficult scenario to say that's what the default should be without creating confusion and incompatibilities. \ No newline at end of file diff --git a/src/content/docs/en-us/faqs.mdx b/src/content/docs/en-us/faqs.mdx new file mode 100644 index 00000000000..63616a19c60 --- /dev/null +++ b/src/content/docs/en-us/faqs.mdx @@ -0,0 +1,496 @@ +--- +order: 40 +xref: faqs +title: FAQs +description: Chocolatey frequently asked questions +--- +import Xref from '@components/Xref.astro'; + +## General + +### Can't find your answer here? + +Feel free to reach out to us on [Chat](https://ch0.co/community-support) or on the [email distribution list / forum](https://groups.google.com/group/chocolatey). + +### What is Chocolatey? + +Chocolatey is kind of like apt-get, but for Windows (with Windows comes limitations). It is a machine level package manager that is built on top of nuget command line and the nuget infrastructure. +<Xref title="More behind the name" value="history" /> + +"Okay, machine package manager, that's nice. What does that mean though?" It means you can simply install software with a few keystrokes and go get coffee while your co-workers are downloading and running an install manually (and I do mean something like an MSI). + +How about updates? Wouldn't it be nice to update nearly everything on your machine with a few simple keystrokes? We think so, too. Chocolatey does that. `choco upgrade all -y` + +### I need a tool that manages software - using scripts to work with those unattended installs. Is that Chocolatey? + +Yes, in a nutshell that is what Chocolatey does. Nearly exactly what you may already be doing, except wrapped up into a package file that allows you to modularize and easily manage order with dependencies on other packages. + +### What is the purpose of Chocolatey? + +Great question! See <Xref title="The purpose of Chocolatey" value="why" anchor="what-is-the-purpose-of-chocolatey" /> + +### How does Chocolatey work? + +See <Xref title="What is Chocolatey?" value="why" /> + +### Why Chocolatey? + +First a <Xref title="story" value="chocolatey-story" />. Then <Xref title="Why Chocolatey" value="why" /> + +### Can I use Chocolatey at my organization? + +Absolutely! The licensing is very business friendly (plus we have [paid options](https://chocolatey.org/compare) to better help organizations - *hint, hint*). We typically recommend organizations depending Chocolatey look to managing their own packaging as opposed to using the Community Package Repository (https://community.chocolatey.org/packages) - packages there are not 100% reliable due to distribution rights with publicly available packages (which causes a major failure point). See the next question for details. + +### Are you redistributing software? + +No. Packages on Chocolatey's community repository (https://community.chocolatey.org/packages) are publicly available and as such they are subject to software distribution rights. With those packages the following applies: + +> Chocolatey does the same thing that you would do based on the package instructions. This usually means going out and downloading an installer from the official distribution point and then silently installing it on your machine. With most packages this means Chocolatey is not redistributing software because they are going to the same distribution point that you yourself would go get the software if you were performing this process manually. + +To put it another way, Microsoft would be quite upset if the Office 365 packages on the community repository actually contained the Office 365 binaries. This is not something organizations would be subject to when hosting their own internal package. + +When you host internal packages, those packages can embed software and/or point to internal shares. You are not subject to software distribution rights, thus you can create packages that are more reliable, offline, and secure. See <Xref title="What are Chocolatey Packages" value="getting-started" /> for more details. + +For more information on organizational cautions about the community package repository, see <Xref title="the community repository disclaimer" value="community-packages-disclaimer" /> + +### Where does Chocolatey install by default? + +As of version 0.9.8.24, binaries, libraries and Chocolatey components install in `C:\ProgramData\chocolatey` (environment variable %ProgramData%) by default. This reduces the attack surface on a local installation of Chocolatey and limits who can make changes to the directory. + +> :choco-info: **NOTE** +> +> Historically, Chocolatey installed to `C:\Chocolatey` and currently, performing an update of Chocolatey doesn't change the installation location, except for when the install path is `C:\chocolatey`. It will upgrade that path and all variables automatically. For more information about why Chocolatey used `C:\Chocolatey` as the default location, look here - <Xref title="Default Install Reasoning" value="default-chocolatey-install-reasoning" /> + +### What kind of package types does Chocolatey support? + +* Binary Packages - Installable/portable applications - This is 98% of the Chocolatey packages - most are pointers to the real deal native installers and/or zipped software. +* PowerShell Command Packages - Packages that have the suffix **.powershell** will install PowerShell scripts as commands for you to call from anywhere. +* Development Packages - Packages that have the suffix **.dev**. For instance [dropkick.dev](https://www.nuget.org/packages/dropkick.dev). +* Roadmap - Virtual Packages - Packages that are like a category, and you just want one package from that category. [Read more …](https://github.com/chocolatey/chocolatey/issues/7) + +### Do you have a roadmap I can see? + +We do, take a look at the <Xref title="roadmap" value="roadmap" /> + +## Security + +### Is Chocolatey secure? + +Yes, it is. You can read more at <Xref title="security" value="security" /> to understand the important details. + +### Why do I have to confirm packages now? Is there a way to remove this? + +tl;dr - Yes, completely possible. Use `-y` or turn on `allowGlobalConfirmation`. + +Also check out the help menus now - `choco -h`, `choco install -h` + +Longer answer, we've moved a little closer towards other package managers for security reasons, where by default we stop and confirm if you are okay with the state change. We always communicate changes in the <Xref title="release notes" value="floss-release-notes" />, so we highly recommend folks scan at least one of those to see anything tagged breaking changes. Always scan from your current version up to the one you are upgrading to so that you catch all changes. + +The one that is the most important right now is the `x.y.z` release (in this case 0.9.9), once we reach v1 we will be fully SemVer compliant and breaking changes will constitute a major version bump (we're still SemVer in a less than v1), so you can scan breaking changes and major new features in an `x` release, new compatible features in a `.y` release, and `.z` releases will only contain compatible fixes for the current release. + +0.9.9 introduced a new compiled client that was/is a total rewrite. 0.9.10 will have complete feature parity with the older client - see [FeatureParity](https://github.com/chocolatey/choco/labels/FeatureParity). Why the rewrite? For a more maintainable, faster client that can run on mono now, so you are not completely tied to Windows. We've started adding support for other install providers (like [Scriptcs](https://github.com/chocolatey/choco/issues/247)). + +The <Xref title="relevant bits of the release notes" value="floss-release-notes" anchor="099-march-3-2015" /> for the FAQ: + + - [Security] Prompt for confirmation: For security reasons, we now stop for confirmation before changing the state of the system on most commands. You can pass `-y` to confirm any prompts or set a value in the config that will globally confirm and behave like older versions of Chocolatey (`allowGlobalConfirmation`, see `choco feature -h` for how to enable). + +Some folks may find the change quite annoying. The perspective of some folks isn't the perspective of everyone and we have some very security-conscious folks that want a verification of what they requested is what they end up with. So this prompt is extremely important for them. We are moving to a more secure by default approach so this change was important to get us there. Security related changes are some of the only things you will see that affect Chocolatey in such a way. + +We spent many months stressing over this change because of the breaking part and decided it wasn't going to get easier to change later. We've added the ability for you to set Chocolatey back to the way it was before with `allowGlobalConfirmation` and if the prompts annoy you, you should probably look at making this change. + +### What doesn't the website implement x security standard? + +While we keep up with most security aspects, sometimes we miss things. Always feel free to reach out to us if you feel there is something we should implement to make that better. + +### I have other security questions + +Please see <Xref title="security" value="security" />. Please reach out to us if you cannot find answers to what you are looking for. + +## Using Chocolatey + +### Can I use Chocolatey in a cmd.exe shell? + +Yes, Chocolatey has some official clients, one of which is `choco.exe` and it is a command line tool, so it works equally well in Powershell.exe and cmd.exe. However if you have the PowerShell profile installed, you also get tab completion in Powershell.exe. + +### Tab-completion? + +See the <Xref title="troubleshooting" value="troubleshooting" /> page if `choco <tab>` doesn't work for you when you are using PowerShell. + +### What is the difference between Open Source Chocolatey, Chocolatey Pro, and Chocolatey for Business? + +Great question, we have a comparison table listed at [compare](https://chocolatey.org/compare). There is also an FAQ section related specifically to licensing. + +### I'm interested in C4B (Chocolatey for Business) but I have questions. + +Please see <Xref title="licensed editions" value="#licensed-editions" /> section below. + +### Does Chocolatey require administrative permissions to run? + +It does by default - based on where it is installed. However there is an non-administrative installation for Chocolatey under More Options at <Xref title="installation" value="setup-choco" />. Do keep in mind that there is pass through to what packages are doing that makes a determination for whether the package needs administrative permissions, and Chocolatey works within the context of Windows permissions, so you are not going to get around that (aside from what is provided with self-service, see question below). + +### I would like to be able to offer my non-admin desktop users an option for self-service type of installations. + +Yes, we absolutely support that scenario in Chocolatey for Business. See [Licensed Editions](#licensed-editions) for more information. + +### Can I use Chocolatey with existing installs? + +Fantastic question, see <Xref title="Can I use Chocolatey with existing software?" value="why" anchor="can-i-use-chocolatey-with-existing-software" /> + +### What is the default package source repository URL (community feed url)? + +That would be https://community.chocolatey.org/api/v2/ aka the Community Package Repository. + +### What can I install? + +You can package and install anything on Windows using Chocolatey - if it can be automated, Chocolatey and PowerShell can install, upgrade, and uninstall it. + +However, if you are just curious on what is available in the community, check out the community package repository at https://community.chocolatey.org/packages. Note that it does have one large limitation, distribution rights, which makes the community package repository not fully reliable like an internal repository which is not subject to distribution rights. + +You can also install packages from other sources (nuget.org, rubygems.org, web pi tools, etc). + +### What if I install X and I already have X installed? + +With most packages when you already have something installed, the Chocolatey process will just perform the install again silently. Most times this means that it does nothing and in the end you have what you already had. + +### Can I override the installation directory? + +Yes you can, see <Xref title="Overriding install directory" value="getting-started" anchor="overriding-default-install-directory-or-other-advanced-install-concepts" /> and <Xref title="Ubiquitous Install Directory Option" value="install-directory-override" />. + +### What distinction does Chocolatey make between an installable and a portable application? + +#### Installable application + +An installable application is something that comes with a native installer and ends up in the add/remove programs (in control panel of the system). +Installable applications end up where the native installer wants them to end up (i. e. Program Files). If you want to override that, please feel free to with the proper commands using InstallArgs (-ia) at the command line and possibly override - Install Command. Yes this does mean you will need to have intimate knowledge of the installer. Having Chocolatey itself make the override directory is likely at some point, but it is wwwwaaaaayyyy out on the radar (like after Rob is somehow paid to work on Chocolatey full time ;) ). + +#### Portable application - something that doesn't require a system install to use + +A portable application is something that doesn't require a native installer to use. In other words, it is not "installed" on your system (where you can go to uninstall in the control panel). It also requires no administrative access for the package install. + +Portable applications end up in the %ChocolateyInstall%/lib (i. e. C:\ProgramData\Chocolatey\lib) folder yes, but they get a "shim" to put them on the path of the machine. This behavior is very much to how Chocolatey works and is not configurable (the directory). Where the portable apps end up is still going to be %ChocolateyInstall%/lib no matter where you move the directory, unless a package itself unpacks the portable app elsewhere (as in the case of [git-tfs](https://community.chocolatey.org/packages/gittfs)). + +### Why doesn't a package install software to Program Files? + +Most packages that use native installers (MSI, InnoSetup, etc) will install to Program Files, but there are packages that do not. There are two really important reasons why: + +* Program Files is synonymous with software that has uninstall registry keys - or put another way, applications that have native installers that you can find for uninstall in the Control Panel under Programs and Features. +* Writing to Program Files requires administrative permissions and the package you are installing is likely a portable package (even if not explicitly named so, it may have a zip that it extracts). There is also a way for non-administrators to use Chocolatey and these types of packages need to work for them as well. + +It really depends on the underlying software the package "installs". If the underlying software is a native installer, then it has a machine install (meaning it gets an uninstall registry key and shows up in Programs and Features) and Program Files is the appropriate place for it. + +Chocolatey has a different avenue for portable packages that allows both admins and non-admins to be able to use these packages, after all they are just downloading and unzipping an archive. These packages either go into a Tools Root location or just get shims (executables are put on the path) and continue to stay in the Chocolatey lib directory. If we restricted a non-admin for an avenue that would work for them manually, it wouldn't make choco useful for them at all. Since we support non-admin usage of Chocolatey, packages that can support the portable model should support it. + +Also consider that if the package **is** using `$env:ChocolateyBinRoot` (which will later be named `$env:ChocolateyToolsRoot`) you can set the root under Program Files and then you get the better of both worlds. + +### What is the difference between packages no suffix as compared to *.install *.portable? + +What is the difference between packages named *.install (i. e. [autohotkey.install](https://community.chocolatey.org/packages/autohotkey.install)), *.portable (i. e. [autohotkey.portable](https://community.chocolatey.org/packages/autohotkey.portable)) and * (i. e. [autohotkey](https://community.chocolatey.org/packages/autohotkey))? + +tl;dr: Nearly 100% of the time, the package with no suffix (autohotkey in this example) is going to ensure the *.install. The package without the suffix is for both discoverability and for other packages to take a dependency on. + +Hey, good question! You are paying attention! Chocolatey has the concept of virtual packages (coming, please see [GitHub Issue](https://github.com/chocolatey/choco/issues/858)) and meta packages. Virtual packages are packages that represent other packages when used as a dependency. Metapackages are packages that only exist to provide a grouping of dependencies. + +A package with no suffix that is surrounded by packages with suffixes is to provide a virtual package. So in the case of git, git.install, and git.commandline (deprecated for .portable) - git is that virtual package (currently it is really just a metapackage until the virtual packages feature is complete). That means that other packages could depend on it and you could have either git.install or git.portable installed and you would meet the dependency of having git installed. That keeps Chocolatey from trying to install something that already meets the dependency requirement for a package. + +Talking specifically about the *.install package suffix - those are for the packages that have a native installer that they have bundled or they download and run. + +> :choco-info: **NOTE** +> +> The suffix *.app has been used previously to mean the same as *.install. But the *.app suffix is now deprecated and should not be used for new packages. + +The *.portable packages are the packages that will usually result in an executable on your path somewhere but do not get installed onto the system (Add/Remove Programs). Previously the suffixes *.tool and *.commandline have been used to refer to the same type of packages. + +> :choco-info: **NOTE** +> +> Now *.tool and *.commandline are deprecated and should not be used for new packages. + +#### Video Explanation + +Below is a video detailing the reasoning and intention behind the use of the different package naming suffixes used on the Chocolatey Community Repository. + +<div class="ratio ratio-16x9 mb-3"> + <iframe src="https://www.youtube.com/embed/aYnDDBDaAj0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen> + </iframe> +</div> + +### When I install a portable app like autohotkey.portable, how is it on my path? Without littering my path? + +When you install portable apps that have executables in the package, Chocolatey automatically creates a "shim" file and puts that in a folder that is on the path. That allows you to run a portable application by asking for it on the command line. + +When you take an application with a native installer, say like WinDirStat, it is only on your path if the native installer has put it there or the instructions in the Chocolatey package itself has requested for it to be on the path. In this case, this is the "littering" the path concept. + +### Is there a PowerShell Module for Chocolatey? + +There is not any official ones from Chocolatey Software. If and when there is, it will be provided as a binary DLL likely. + +The main Chocolatey client (choco.exe) is an executable client that has runs a PowerShell host in proc and has a PowerShell module it loads for those PowerShell automation scripts. Trying to get all of these ideas into a higher PowerShell module could be kind of difficult. + +Even through it was originally written *in* PowerShell, **Chocolatey was NEVER a PowerShell module, it just used PowerShell as a programming language and was meant to be a CLI app.** I bolded this so it might get read twice. ;) + +A little history - Chocolatey up until 0.9.9 was provided completely written in PowerShell, with the approach above. We know of no other app/tool that tried this approach when we did, which made the original Chocolatey client a rarity indeed. It paved the way for things like mocking in [Pester](https://github.com/pester/Pester) ([Matt Wrock](https://github.com/mwrock) [added mocking](https://github.com/pester/Pester/compare/b103a3db951f123c485289f02eaa1d6ef686c21b...4178c343a6574a8a9521be8a77006572fc49e311) after [Rob Reynolds](https://github.com/ferventcoder) [determined](https://github.com/chocolatey/chocolatey/commit/5b2887240dfbda86629d6a1a296129f3a561e86a#diff-b61a6d542f9036550ba9c401c80f00ef) [the](https://github.com/chocolatey/chocolatey/commit/cc4aca0dc48840c7113167bd08aeddcaf83f65c0#diff-b61a6d542f9036550ba9c401c80f00ef) [general way](https://github.com/chocolatey/chocolatey/commit/ee883242c962dc886cd1282e4dbe4121d4fcc6cd#diff-b61a6d542f9036550ba9c401c80f00ef) [it works](https://github.com/chocolatey/chocolatey/commit/654703b9d4388eb385776986ce6d0ee53485a146#diff-b61a6d542f9036550ba9c401c80f00ef) in PowerShell back in 2012). + +### Does Chocolatey run on macOS/Linux? + +Yes, for creation and maintenance of packages. See <Xref title="running on non-Windows" value="non-windows" /> for more information. + +## Troubleshooting + +### I'm running into some issue with Chocolatey, packaging, or something else. + +See <Xref title="Troubleshooting" value="troubleshooting" /> + +## Organizational Use + +### I would like to use Chocolatey in my organization, is the licensing friendly? + +Yes, it is. Chocolatey carries a FOSS Apache 2.0 license, which is extremely business friendly. You can use Chocolatey and most of its infrastructure completely free. Chocolatey also has a business edition with features organizations need for better software management . See [Compare](https://chocolatey.org/pricing) for details. + +### Should my organization depend on (use) the community feed (https://community.chocolatey.org/packages)? + +For production-level scenarios, I couldn't justify giving up that level of control and trust to the internet in an organization. It's recommended that you copy and modify existing packages and/or create your own internal packages and host them internally. That way you can completely guarantee that an install/upgrade/uninstall will always work every time. See <Xref title="Security" value="security" anchor="chocolateyorg-the-community-feed" /> for more details. + +If you are just setting up or updating developer workstations and can tolerate things breaking every once in awhile because internet/uncertainty, it's fine to use the community feed. + +### Chocolatey is great! I need it to do something additional for my organization. + +Please see https://chocolatey.org/compare - we may already support it doing that for the business edition. If not, feel free to reach out to our team. + +Also see the [Licensed Editions](#licensed-editions) section below. + +## Licensed Editions + +### What is the difference between FOSS and the licensed editions? + +A lot of that is covered in the FAQ on the [pricing](https://chocolatey.org/pricing#faq), but also be sure to check out the [comparison table](https://chocolatey.org/compare). + +### Are the licensed editions costs annual? + +They are, but we can also do multi-year contracts (with full amount paid on contract acceptance) if you need to support something closer to that model. We also have a perpetual for Chocolatey for Business. For more detail, please see the [pricing FAQ](https://chocolatey.org/pricing#faq). + +### Can you do monthly? + +Not at this current time. Please see the [pricing FAQ](https://chocolatey.org/pricing#faq) for more details. + +### What is C4B? + +That is the short name for Chocolatey for Business. + +### I have not received my license. + +The license email is sent from a support email at chocolatey dot io with an xml file (the license) attachment within 1-3 business days. If it has been 3 business days and you have not received your business license, please reach through the [sales contact](https://chocolatey.org/contact) (choose "Other") (or any method you may already have for contacting sales) to get this resolved. + +Any number of things could have happened: + +* The message could be block by your servers +* The message could be misidentified as spam + +To reduce these kind of occurrences, please make sure you have whitelisted the following email domains: + +* `chocolatey.io` +* `chocolatey.org` + +Once you receive a few emails from there, it will give you an idea of how to lock that down further to fewer email addresses. + +### I just purchased and I need my license sooner! + +Just reply to the order email you receive and let us know so we can bump the priority of your order. + +### I have a different question about the licensed edition. + +Check out the FAQ on the [pricing](https://chocolatey.org/pricing#faq). If it doesn't answer your questions, please feel free to reach out to the sales team from there! + +## Packaging + +### What can a Chocolatey Package consist of? + +See <Xref title="What are Chocolatey Packages?" value="getting-started" anchor="what-are-chocolatey-packages" /> + +### Tell me about packaging + +Chocolatey packages are what we like to think of as just fancy zip files. Zip files that have package metadata about the package and the underlying software a package may represent, dependencies, and optional binaries, files, and/or optional PowerShell automation scripts. + +### How do I create packages? + +Try running `choco new test` from a command shell and inspect the output. You will find quite a bit of helpful information and just in time documentation in there. + +### I'm creating packages with the software contained in the package. + +Great! This is the most reliable use of Chocolatey, to embed the binaries directly in the package. See the next question for more details. + +### I'm creating internal or offline packages, what do I need? + +Well, if you are not creating packages for the community package repository, you have different rules that apply. Embed as much as possible into the package (as long as it is under 500MB you should see no issues). We typically recommend 500MB as the threshhold for organizations for the following reasons: + +* a nupkg file size takes up some space +* files in the package directory (can be cleaned up as part of the script) +* the actual install location if using an installer +* MSI cache for MSIs - Windows caches the complete MSI binaries (and now you know where all that space went) + +If you are on a licensed edition of Chocolatey, you can turn on Package Reducer and the first two items above no longer take up any significant space. This can reduce space usage in the order of GBs for some installations of Chocolatey. See <Xref title="Package Reducer" value="package-reducer" /> for more details. + +### The install location displayed is incorrect or missing. + +For packages that run installers, this can be be caused by the installer not setting its install location. +For portable packages, it can be caused by not using the built in archive PowerShell helpers (e.g. because the software is not inside an archive) or by moving the extracted files after using an archive helper. + +The install location which is displayed can be manually set in the `ChocolateyInstall.ps1` with the `$Env:ChocolateyPackageInstallLocation` environment variable. + +If you are setting this variable in an installer package, do not hard code it, but instead get the location via checking the uninstall keys in the registry or similar. +If this is hard coded for a package that runs an installer, it may display an incorrect location if the install location is changed manually, by install arguments, or via the licensed ubiquitous install directory switch. + +### How do I skip the Automatic Uninstaller? + +If you are trying to uninstall a package, but Automatic Uninstall is uninstalling software you don't want uninstalled, or otherwise misbehaving, then it can be skipped by using the `--skip-autouninstaller` switch, or disabling it by setting the `autoUninstaller` feature to `false`. + +If you are creating a package, and want or need to use the `chocolateyUninstall.ps1` while not running the Automatic Uninstaller, then include a `.skipAutoUninstall` file inside the package. If a file with that name is found, then during uninstall the Automatic Uninstaller will not be run. If a `.skipAutoUninstall` file is being included, make sure that it is included in the `files` element of the `.nuspec`, either explicitly via a `file` element, or by placing the file inside a folder that is included inside the package (like the `tools` directory). + +## Videos / Reference + +### Where can I learn more? + +We have a documentation section of the site at https://docs.chocolatey.org + +### Do you have any references or videos I can see? + +Yes we do, take a look at <Xref title="videos" value="videos" /> and <Xref title="known posts, presentations, etc" value="resources" />. + +### Is there a video I can watch to show me Chocolatey in action? + +There is! This is a long video due to slow internet connections, but watch the first 1:30ish minutes and the last 1:30ish minutes and that will give you a general idea. [https://www.youtube.com/watch?v=N-hWOUL8roU](https://www.youtube.com/watch?v=N-hWOUL8roU) + +> :choco-info: **NOTE** +> +> This video shows dependency chaining, so you are seeing it install 11 applications/tools. It's also 6+ years old and there have been many, many improvements since then. + +## Community Package Repository + +### I just took over as the primary maintainer of a package. What do I need to do? +See <Xref title="Package Maintainer Handover" value="package-maintainer-handover" /> + +### What is moderation? + +Related to the community package repository only (aka the default feed aka https://community.chocolatey.org/packages), we have a concept called moderation, where submitted packages are held until they are considered safe and of minimal quality for regular consumption. + +Moderation involves checking a package version for quality (validation) and correctness, whether it installs and uninstalls correctly (verification). We have two automated services that validate and verify packages. The validator checks the quality of a package. If no requirements are flagged as failing review, it will be passed on to the verifier, which checks that the package actually works as intended (it may help to think of the validator as unit testing and the verifier as integration testing). If both of these automated reviews pass the package version is submitted to a moderator for final review and approval. + +Things to note: + +* We have trusted packages, and those packages skip human review/moderation. +* A maintainer can not moderate his/her own pkgs. +* You can see if a package has been verified by the green circle next to its name on the package page. If it is green or red, it will also be a clickable link. To see all packages verified, see https://gist.github.com/choco-bot +* Besides trusted packages, a package version is never approved without a moderator clicking approve. + +### How does the moderation review process work? + +See <Xref title="Review Process" value="moderation" anchor="package-review-process" />. + +### What is a trusted package? + +Related to the community package repository only (aka the default feed aka https://community.chocolatey.org/packages). + +A package that is considered trusted comes from the original software creator or is maintained by someone in the community who has a track record for high quality and safe packages. + +Two ways your packages can become trusted: + +* You write the underlying software that the package installs. For instance the ReSharper package that comes directly from JetBrains. +* You put in a lot of good packages and your packages will eventually become trusted. + +In most cases, a package will only be switched to trusted after a few versions have been approved by moderators without any changes being required. This is to ensure that the package has been looked at by more than one person, since automated testing does not catch everything. Switching a package to trusted status is a manual change by a moderator. It is not an automated process, and does not happen imediately even if you are the software author. + +> :choco-info: **NOTE** +> +> All packages go under automated verification, validation and virus scanning. If any of the tests don't pass, they are held for the maintainer to fix the package or to make a review comment. This includes trusted packages. + +### How do I install a package version under moderation? + +Related to the community package repository only (aka the default feed aka https://community.chocolatey.org/packages). + +You can install a version of a package version that's still under moderation - however know that if the maintainer needs to fix the package version during the review process, you will never get those fixes locally since they are updating the **SAME** version. Package versions are not immutable until they are approved. The caveat for "never" is that if you know it changed (likely you won't and there is no notification, *what you have installed technically never existed*), you could force the reinstall of that same version of the package. + +Another thing to consider: if the package version or the package as a whole is rejected (usually for renaming the package to something better to better meet naming standards), you are likely to get weird warnings later and won't see updates at all. Remember, you have installed something that technically never existed, so any thing you see related to choco not knowing about it is to be expected and not a bug. + +To actually install, see the next question. + +### How do I install an unlisted package / package version? + +You need to specify name AND version to any package to install the unlisted/unapproved version. This goes for any NuGet compatible feed that understands unlisted packages. + +### How do I install a rejected package? + +Related to the community package repository only (aka the default feed aka https://community.chocolatey.org/packages), we have a concept of packages that have been rejected. You cannot install a rejected package. It could do bad things to your system so we don't allow install from the community repository. + +### How do I self-reject a package? + +> :choco-info: **NOTE** +> +> This applies during the moderation process only on the community repository. Once approved, there is no reject. + +If you are a maintainer of a package and you would like to self-reject an older version of a package that is failing verification or validation, we support that. If however you just want to reject a working package because it is older, we don't support that. Rejected != Obsolete. It's really about when the underlying software has the same download url for every release so the older versions do not apply. If you are using checksums to verify the download (and you should be), then your older versions should start failing. + +![Reject package checkbox is only visible if the package has failed automated review](/images/faqs/package-moderation-reject-package.png) + +* Failing verification - + +![An example email which is sent to maintainer of package when an automated check has failed](/images/faqs/email-from-validator.png) + +* Failing validation - a message from the validator telling you it failed validation. + +### What is the validator? + +The <Xref title="validator" value="package-validator" /> is a service that checks the quality of a package based on requirements, guidelines and suggestions for creating packages for Chocolatey's community feed. Many of the validation items will automatically roll back into choco and will be displayed when packaging a package. We like to think of the validator as unit testing. It is validating that everything is as it should be and meets the minimum requirements for a package on the community feed. + +What does the validator check? See the <Xref title="validator docs" value="package-validator" />. + +### What is the verifier? + +The <Xref title="verifier" value="package-verifier-service" /> is a service that checks the correctness (that the package actually works), that it installs and uninstalls correctly, has the right dependencies to ensure it is installed properly and can be installed silently. The verifier runs against both submitted packages and existing packages (currently checking once a month that a package can still install and sending notice when it fails). We like to think of the verifier as integration testing. It's testing all the parts and ensuring everything is good. On the site, you can see the current status of a package based on a little colored ball next to the title. If the ball is green or red, the ball is a link to the results (only on the package page, not in the list screen). + +![Passing verification](/images/faqs/verification-successful.png) + +* Green means good. The ball is a link to the results +* Orange if still pending verification (has not yet run). +* Red means it failed verification for some reason. The ball is a link to the results. +* Grey means unknown or excluded from verification (if excluded, a reason will be listed on the package page). + +### What is the package scanner? + +All packages (and the binaries they contain or download at runtime) on community repository are scanned by 50-60 antivirus scanners. We have partnered with [VirusTotal](https://virustotal.com) to provide this information back to the website so you can know when you are on a package page whether it is something you should be concerned with or not. It falls just under the files section of the package pages. + +> :choco-info: **NOTE** +> +> Only en-US installers are tested by default via Chocolatey's Package Scanner + +> :choco-info: **NOTE** +> +> Did you know that 60% or more of the sofware that is submitted to the community repository has its first scans by VirusTotal through Chocolatey's package scanner submissions? It's helped many of those anti-virus manufacturers get a clearer picture of heuristics and hopefully ends up in better anti-virus products with less false positives. + +> :choco-info: **NOTE** +> +> Need runtime malware protection? Learn more about <Xref title="runtime malware protection" value="virus-check" /> + +### What is the package cacher? + +On the community repository, we have a CDN cache for those files that would be downloaded by packages - those remote urls are overridden by default in licensed editions of Chocolatey to use those cached binaries. This is to avoid 404 errors you would normally see if those urls changed or were removed. See <Xref title="Customer CDN Download Cache" value="private-cdn" /> for more details. + +## Comparison + +### How is Chocolatey different than OneGet/PowerShell Package Management? + +OneGet is a package manager **manager**, which means it is not really a package manager at all. Chocolatey will have a provider that plugs right into OneGet. At the current time there is a CTP available, but it is based on 2 year old Chocolatey technology (we've had security fixes since then, plus a world of features), so we can't really recommend it. But if you must use it, make sure your PowerShell execution policy is set correctly and you are in an administrative console. See https://www.hanselman.com/blog/aptget-for-windows-oneget-and-chocolatey-on-windows-10 for more details. + +Use ChocolateyGet for now. + +### How is Chocolatey different than Ninite? + +Great question, see <Xref title="Chocolatey vs Ninite" value="chocolatey-vs-ninite" />. + +### How is Chocolatey different than NuGet and/or OpenWrap? + +Chocolatey is a machine package manager. Where NuGet/OW are focused on developer library packages, Chocolatey is focused on applications and tools, and not necessarily developer focused. + +A typical way of stating the difference is "Developers use NuGet to get 3rd party libraries that they use to build the .NET tools and applications that they release with Chocolatey!" + +### How is/will Chocolatey be different than apt? + + * Chocolatey does not support the idea of source packages, which are packages that must be built to be used. For someone interested in that, check out https://github.com/Microsoft/vcpkg. + * Library packages are not completely off the plate, but mostly. How would you link the library up to the application/tool? \ No newline at end of file diff --git a/src/content/docs/en-us/features/branding.mdx b/src/content/docs/en-us/features/branding.mdx new file mode 100644 index 00000000000..e105872cf38 --- /dev/null +++ b/src/content/docs/en-us/features/branding.mdx @@ -0,0 +1,244 @@ +--- +order: 150 +xref: branding +title: Branding Chocolatey Applications (C4B) +description: Brand Chocolatey applications with your own organisational icons +--- +import Xref from '@components/Xref.astro'; + +We are aware that some of customers want to be able to brand Chocolatey GUI so +that is "looks" like their own internal applications. Out of the box, Chocolatey +GUI's main screen looks like this: + +![Chocolatey GUI Main Screen](/images/gui/main-screen.png) + +However, with branding applied, Chocolatey GUI's main screen can instead look like +this: + +![Chocolatey GUI Main Screen with Branding](/images/gui/main-screen-with-branding.png) + +Here, the logo of a company called A Squared Software Ltd is being used, instead +of the main Chocolatey logo. In addition, a _Powered By Chocolatey_ logo is added +to the bottom left corner of the application. + +## Requirements for branding + +> :choco-info: **NOTE** +> +> Branding of Chocolatey GUI is only available to our Business +License customers, and requires the **Chocolatey GUI Licensed Extension** +(chocolateygui.extension) to be installed, alongside Chocolatey GUI. + +In order for branding to work, there are a number of image files that are required. +These have to be named exactly as the following: + +* icon_256x256.ico +* logo_150x250.png +* splash_700x302.png +* splash_975x421.png +* splash_1250x540.png + + +> :choco-info: **NOTE** +> +> The reason that there are multiple splash screen images is because +Chocolatey GUI makes a decision, based on the resolution of the screen, which +splash screen image to display to the user. + +The numbers in the file names are a suggestion as to the width and height of each +image. While the images don't have to _exactly_ match these dimensions, it is +recommended that they are as close as possible to these dimensions. + +## Location of branding files + +In order for your custom branding files to be applied, you must place the above +files into one of two specific places. + +### Default Location + +By default, Chocolatey GUI will look for custom branding files in the Chocolatey +installation directory (normally `c:/programdata/chocolatey`), and then in a folder +called `branding/gui`. i.e. it will look in the following folder: + +`c:/programdata/chocolatey/branding/gui` + +### Custom Location + +It is possible to use a custom location by first settings an environment variable +called `ChocolateyBrandingLocation` to a new location. For example, if you created +this environment variable with a value of `c:/temp/branding`, then Chocolatey GUI +would then expect to find the above asset files in this location: + +`c:/temp/branding/gui` + +## ChocolateyGuiBranding.dll + +The first time Chocolatey GUI, with the Chocolatey GUI Licensed Extension installed, +is executed, and the above asset files are in one of the defined locations, a new +file will be generated in the same location called `ChocolateyGuiBranding.dll`. +The new file actually contains all the image files that were created, as they have +been embedded as resources within this assembly file. This approach is used in +order to optimize the loading of the assets. Once this ChocolateyGuiBranding.dll +has been created, Chocolatey GUI will use it each time the application runs. The +original image asset files are actually no longer required, and can be removed. +If at any point you need to re-generate the branding that is being used, simply +delete the following two files: + +* ChocolateyGuiBranding.dll +* ChocolateyGuiBranding.resources + +Then update, your image asset files, and re-run Chocolatey GUI and the branding +assembly will be re-generated. + +Using a single ChocolateyGuiBranding.dll as the source of branding makes it very +simple to generate and distribute this assembly to apply branding across your +entire organisation. + +## Branding in action + +The below GIF shows the default opening of the Chocolatey GUI application when +there is no branding applied. + +![Chocolatey GUI in action](/images/gui/in-action.gif) + +In this GIF, we see branding being applied to the Chocolatey GUI application. + +![Chocolatey GUI in action with branding](/images/gui/in-action-with-branding.gif) + +Notice that the splash screen image has been replaced, as well as the logo at the +top left of the application, and the icon in the taskbar. + +> :choco-info: **NOTE** +> +> There is an open issue regarding the icon in the taskbar not +being correctly replaced, visit https://github.com/chocolatey/chocolatey-licensed-issues/issues/157 +for more information. + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Deploying Branding + +What follows is a suggestion on how a branded version of Chocolatey GUI can be +deployed out to your environment. + +> :choco-info: **NOTE** +> +> In order for the below to work, you must have the Chocolatey GUI Licensed +> Extension (`chocolateygui.extension`) installed. You can run `choco download chocolateygui.extension --internalize` +> to download the package and then publish it to your repository. + +1. Follow the steps above to place the branding image assets into the correct location. +1. Run the Chocolatey GUI application to generate the ChocolateyGuiBranding.dll +1. Create a new folder on your file system to house the branding Chocolatey Package +1. In this folder, create a `tools` folder +1. Copy the generated `ChocolateyGuiBranding.dll` into this folder +1. Copy the following xml into a file called `chocolateygui-branding.nuspec`. + +```xml + <?xml version="1.0" encoding="utf-8"?> + <package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> + <metadata> + <id>chocolateygui-branding</id> + <version>0.1.0</version> + <title>chocolateygui-branding (Install) + __REPLACE_AUTHORS_OF_SOFTWARE_COMMA_SEPARATED__ + https://_Software_Location_REMOVE_OR_FILL_OUT_ + chocolateygui-branding SPACE_SEPARATED + __REPLACE__ + __REPLACE__MarkDown_Okay + + + + + + + + + +``` + +1. Copy the following PowerShell into a file called `tools\chocolateyInstall.ps1` + + ```powershell + $toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" + $helpersFile = Join-Path -Path $toolsDir -ChildPath 'helpers.ps1' + + . $helpersFile + + $chocolateyGuiBrandingAssembly = Join-Path -Path $toolsDir -ChildPath 'ChocolateyGuiBranding.dll' + $chocolateyGuiBrandingLocation = Join-Path -Path (Get-BrandingLocation) -ChildPath 'gui' + + if(!(Test-Path -Path $chocolateyGuiBrandingLocation)){ + New-Item $chocolateyGuiBrandingLocation -ItemType Directory -Force | Out-Null + } + + Copy-Item -Path $chocolateyGuiBrandingAssembly -Destination $chocolateyGuiBrandingLocation + ``` + +1. Copy the following PowerShell into a file called `tools\chocolateyuninstall.ps1` + ```powershell + $toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" + $helpersFile = Join-Path -Path $toolsDir -ChildPath 'helpers.ps1' + + . $helpersFile + + $chocolateyGuiBrandingLocation = Join-Path -Path (Get-BrandingLocation) -ChildPath 'gui' + $chocolateyGuiBrandingAssembly = Join-Path -Path $chocolateyGuiBrandingLocation -ChildPath 'ChocolateyGuiBranding.dll' + + Remove-Item -Path $chocolateyGuiBrandingAssembly -Force -ErrorAction Continue | Out-Null + ``` + +1. Copy the following PowerShell into a file called `tools\helpers.ps1` + + ```powershell + function Get-BrandingLocation { + <# + .SYNOPSIS + Gets the top level location for branding files used by Chocolatey + applications + .DESCRIPTION + Creates or uses an environment variable that a user can control to + communicate with packages about where they would like branding files to + be located. + .NOTES + Sets an environment variable called `ChocolateyBrandingLocation`. + .INPUTS + None + .OUTPUTS + None + #> + + $brandingLocation = $env:ChocolateyBrandingLocation + + if ($null -eq $brandingLocation) { + $chocoInstallLocation = $env:ChocolateyInstall + $brandingLocation = Join-Path -Path $chocoInstallLocation -ChildPath 'branding' + } + + # Add a drive letter if one doesn't exist + if (-not($brandingLocation -imatch "^\w:")) { + $brandingLocation = Join-Path $env:systemdrive $brandingLocation + } + + if (-not($env:ChocolateyBrandingLocation -eq $brandingLocation)) { + try { + Set-EnvironmentVariable -Name "ChocolateyBrandingLocation" -Value $brandingLocation -Scope User + } catch { + if (Test-ProcessAdminRights) { + # sometimes User scope may not exist (such as with core) + Set-EnvironmentVariable -Name "ChocolateyBrandingLocation" -Value $brandingLocation -Scope Machine + } else { + throw $_.Exception + } + } + } + + return $brandingLocation + } + ``` + +1. Run the command `choco pack` +1. Deploy the generated `chocolateygui-branding.nupkg` to the repository that you are using +1. Install the Chocolatey GUI Branding package \ No newline at end of file diff --git a/src/content/docs/en-us/features/chocolatey-central-management.mdx b/src/content/docs/en-us/features/chocolatey-central-management.mdx new file mode 100644 index 00000000000..854d3370806 --- /dev/null +++ b/src/content/docs/en-us/features/chocolatey-central-management.mdx @@ -0,0 +1,34 @@ +--- +order: 100 +xref: ccm +title: Chocolatey Central Management (C4B) - Endpoint Management +description: Centrally access information on all client machines in your environment +--- +import Xref from '@components/Xref.astro'; + +Chocolatey Central Management (CCM) provides you insights across your desktop and endpoint environments. + +Once installed and configured, you can use CCM to: + +* Bring reporting to the organizational level +* Quickly see all software across the organization and see what needs attention immediately +* Create reports for tracking and auditing purposes +* Manage endpoints with deployments through groups and collections + +> :choco-info: **NOTE** +> +> The information on this page has been spread out to an entire section and multiple pages. Links still here are due to code pointing to these. Please follow the link below for the most up-to-date information on CCM. + +Please see . + +## Roadmap + +Please see . + +## Setup + +Please see . + +## FQDN Usage + +Please see . diff --git a/src/content/docs/en-us/features/create-packages.mdx b/src/content/docs/en-us/features/create-packages.mdx new file mode 100644 index 00000000000..9ec3ef61e7b --- /dev/null +++ b/src/content/docs/en-us/features/create-packages.mdx @@ -0,0 +1,23 @@ +--- +order: 40 +xref: create-your-own-packages +title: Create your own packages +description: Information on how to create your own Chocolatey package +--- +import Xref from '@components/Xref.astro'; + +Out of the box, Chocolatey comes with the ability for you to create your own Chocolatey packages. At the heart of any Chocolatey package is (the automation language for Windows), so anything that you can imagine can go into a Chocolatey Package. This means that you can create a package for: + +- Installers +- Binaries +- Zips +- Scripts +- Anything + +We have on how to get started creating your first package, but if you want to jump straight in, after , run the following command: + +```powershell +choco new mypackage +``` + +And Chocolatey will create a package, using its built in , that also walks you through the process for finalizing your package. \ No newline at end of file diff --git a/src/content/docs/en-us/features/extensions.mdx b/src/content/docs/en-us/features/extensions.mdx new file mode 100644 index 00000000000..3dfcdcf287b --- /dev/null +++ b/src/content/docs/en-us/features/extensions.mdx @@ -0,0 +1,98 @@ +--- +order: 70 +xref: extensions +title: Extend Chocolatey With PowerShell Modules (extensions) +description: Create your own custom extensions +--- +import Xref from '@components/Xref.astro'; + +For years Chocolatey has allowed you to extend Chocolatey with your own PowerShell modules and functions. These are known as extensions. + +## Overview + +Extensions allow you to package up PowerShell functions that you may reuse across packages as a package that other packages can use and depend on. This allows you to use those same functions as if they were part of Chocolatey itself. Chocolatey loads these PowerShell modules up as part of the regular module import load that it does for built-in PowerShell modules. + +### Why Would I Create an Extension? + +To reduce code in your Chocolatey automation scripts. Packaging up logic as functions into a PowerShell module that you can version independently, fix issues in, and enhance without needing to touch existing packages that you have is pretty powerful. + +## Creating a Chocolatey Extension + +When it comes to extensions, Chocolatey takes a conventional approach. You must create a package with the suffix ".extension" and have a extensions folder with at least one PowerShell module in it. + +The name of the package should be "extensionname.extension". The name of the package minus ".extension" will be the name of the extension that is installed. + +* To create an extension package, run `choco new name.extension` and then delete everything but the nuspec. +* Then create an extensions folder in the root of the package. +* In the extensions folder, create your PowerShell module. +* The important file you will need is a PSM1 (PowerShell Module) file that loads up and ensures functions are available. Have a look at [profile module](https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/helpers/chocolateyProfile.psm1) and [chocolatey-core.extensions module](https://github.com/chocolatey-community/chocolatey-packages/blob/master/extensions/extensions.psm1). +* When those functions are loaded by Chocolatey, they will already be available when your scripts run so you won't need to load up the files again in your install scripts - the functions will already be available! + + +Here's an example: https://community.chocolatey.org/packages/chocolatey-core.extension. The source is at https://github.com/chocolatey-community/chocolatey-packages/tree/master/extensions + +Yes, it is really that easy. Enjoy! + +## Recommendations + +### Naming Your Extension + +Avoid "Chocolatey" as part of the name. Yes the example is named that, but this extension is owned by the Core Chocolatey team, so it makes sense for that to be the name. + +### PowerShell Modules + +* The recommendation is typically as few PowerShell modules as possible in an extension, just enough to represent what that extension does. Strive for one module per extension package, although that may not be realistic. +* The module should explicitly export the functions, aliases, and cmdlets that are wanted to be used in Chocolatey automation scripts. + +### Taking a Dependency on an Extension Package + +When taking a dependency on an extension package, it is recommended to take a minimum version dependency. If there is functionality that is enhanced in that extension, you should bump that dependency version. + +#### Minimum Version Depdendencies + +What does a minimum version depdency look like? + +```xml + + + +``` + +#### Avoid Version Ranges For Extensions + +Avoid version ranges when it comes to extensions as it can lock out fixes and enhancements in the future. + +```xml + + + + + + + +``` + +#### Avoid Exact Version Dependencies For Extensions at All Costs + +Try to never lock into an exact version dependency: + +```xml + + + + +``` + +This locks every other package into that singular version and does not allow for upgrades and fixes. + +#### Version-less Dependencies + +There is also the concept of versionless dependencies. + +```xml + + + +``` + +Folks typically have used these in the past. They are less bad, but it just means that any version will do. diff --git a/src/content/docs/en-us/features/hook.mdx b/src/content/docs/en-us/features/hook.mdx new file mode 100644 index 00000000000..b21454aa6fa --- /dev/null +++ b/src/content/docs/en-us/features/hook.mdx @@ -0,0 +1,71 @@ +--- +order: 75 +xref: hooks +title: Extend Chocolatey With PowerShell Scripts (Hooks) +description: Run PowerShell before and after Package Automation Scripts +--- +import Xref from '@components/Xref.astro'; + +A feature is available in Chocolatey CLI v1.2.0, which allows you to extend a package's automation script(s) with additional PowerShell scripts, called hooks. + +## Overview + +Hooks allow you to run code before a package automation script like a `chocolateyInstall.ps1` runs, or after. They even work when automation scripts are not included in the package. Each script can selectively target a single package ID, or run for all packages. Then they can be distributed using `.hook` packages. + +## Creating Hook Scripts + +Hook scripts are PowerShell `.ps1` files, and are run in the same environment as package automation scripts run, so they have access to all the same environment variables and helpers. + +The conditions for when a hook is run is based on the filename of the hook. The filename format is `--.ps1`. The first section is for the timing of when the hook script runs. Filenames that start with `pre` run before the package automation script (e.g. the `chocolateyInstall.ps1`), while filenames that start with `post` are run afterwards. The second section of the filename determines which package automation script the hook is run before or after. The third section of the filename is either a string of the package ID for which the hook should be run, or the keyword `all` to specify that the hook should be run for all package IDs. + +If a package does not contain a `chocolateyInstall.ps1`, but a `pre-install-all.ps1` hook is installed, then that hook will still run at the same point in the package installation as the `chocolateyInstall.ps1` would have been run if the package had included it. + +## Creating Hook Packages + +Hooks can be installed just like extensions, via a specific package type, namely `.hook`. The name of the installed hook folder is the package `id`, minus the `.hook`. + +How to create a Hook package: + +1. Create a package with a `.hook` suffix like `choco new name.hook` +1. Delete the created files and folders except for the `.nuspec` +1. Create a `hook` folder in the root of the package (next to the `.nuspec`). +1. Put your hook PowerShell script files inside the `hook` folder. +1. Pack and install your new Hook package. + +## Global Hooks + +These files are run either before (pre) or after (post) the normal Chocolatey install/upgrade/uninstall operation, for all Chocolatey packages. + +Once a global hook is installed (either manually or via hook package), any subsequent Chocolatey operations (say for example the installation of another package), will make use of the newly installed (or available), hook scripts. + +## Package Specific Hooks + +You can also create a package-specific hook by following the naming convention `--.ps1` where `` is the `id` of the Chocolatey package you would wish to execute hooks against. + +The hooks will behave in the same way as global hooks, running either before (pre) or after (post) the normal Chocolatey install/upgrade/uninstall operation for only a Chocolatey package whose `id` matches the `id` in the hook script name. + +## Skipping Hooks + +Chocolatey provides away for skipping the running of hooks for a particular package. If you would like to skip hooks for the installation of a particular package, simply add the `--skip-hooks` option to the list of parameters you pass to the command. + +## Recommendations + +### Still under development + +Hook scripts and packages are still new, so guidelines and best practices are still being determined. Follow along at the [Chocolatey Community Hooks Repository](https://github.com/chocolatey-community/chocolatey-hooks) for the latest information. + +### Avoid taking dependencies on regular packages + +It is best to avoid having a `.hook` package taking a dependency on regular packages. This is so the included hooks from the package can be installed before other packages get initially installed. For example, if there is a `pre-install-git.ps1` hook and the `.hook` package it is included in takes a dependency on `git`, then the `chocolateyInstall.ps1` from the `git` package would have already run before the hook is installed, which is counterproductive. + +### Do take dependencies on extension packages + +If any hook script in a `.hook` package require helpers from an `.extension` package, then make sure that the `.hook` package takes a dependency on that `.extension` package. + +### Don't take dependencies on hook packages + +Don't add a hook package as a dependency for your regular package. Hook scripts are intended to be added only by the user of Chocolatey CLI. If your package requires functionality similar to that which would normally be provided via a hook script package, then it should be added directly to the standard automation scripts for the package. Adding a hook package as a dependency to your regular package will cause the package to fail validation on the Chocolatey Community Repository. + +### Don't add hook scripts to regular packages + +Don't add hook scripts to your regular Chocolatey package. If your package requires functionality similar to that which would normally be provided via a hook script package, then it should be added directly to the standard automation scripts for the package. Adding a hook script to your regular package will cause the package to fail validation on the Chocolatey Community Repository. \ No newline at end of file diff --git a/src/content/docs/en-us/features/host-packages.mdx b/src/content/docs/en-us/features/host-packages.mdx new file mode 100644 index 00000000000..52a81cbe158 --- /dev/null +++ b/src/content/docs/en-us/features/host-packages.mdx @@ -0,0 +1,383 @@ +--- +order: 50 +xref: host-packages +title: Host packages internally +description: How to host your own Chocolatey packages, rather than use the Chocolatey Community Repository +--- +import Xref from '@components/Xref.astro'; + +> :choco-info: **NOTE** +> +> Refer to in tandem with this article. + +## Why? + +Chocolatey has had the ability to be able to work with packages from one or more sources since its inception back in 2011. With that, Chocolatey comes with a default package repository configured - the [community package repository](https://community.chocolatey.org/packages). However due to the community repository being publicly available and subject to distribution rights, it has a failure point in that it can not be 100% reliable (most packages can't contain software and must download at runtime). It's not something an organization hosting their own package repository would be subject to, so we recommend organizational use of Chocolatey should include an internal package repository. Organizations looking to use Chocolatey should review the following topics to learn more: + +* +* + +## Host your own server + +There are a few types of package repositories, [folder/unc share](#local-folder--unc-share), [simple server](#simple-server), the sophisticated [package gallery](#package-gallery), and the more sophisticated [commercial package repositories](#commercial-package-repositories). + +## Recommendations + +From the Chocolatey Software team, our current recommendations for organizational use are Artifactory, Nexus, or ProGet. All are quite robust, and two of those options can be used without cost. For more information, see [commercial package repositories](#commercial-package-repositories). + +### Known Hosting Options + +Some of these options also work from a non-Windows hosting perspective. See [Non-Windows Hosting](#non-windows-hosting). + +* File Share\UNC share (below) +* SCCM Distribution Points (when used as a file share) +* Sonatype Nexus - [Nexus2](https://books.sonatype.com/nexus-book/reference/nuget-nuget_hosted_repositories.html) / [Nexus3](https://books.sonatype.com/nexus-book/3.0/reference/nuget.html#nuget-hosted)- Sonatype Nexus has a built-in simple server +* [ProGet](http://inedo.com/proget/overview) - ProGet gives you a ready to go On-Premise option. Enterprise has replication +* [Artifactory Pro](https://www.jfrog.com/artifactory/) - see [Artifactory NuGet Repositories](http://www.jfrog.com/confluence/display/RTF/NuGet+Repositories) +* [MyGet](https://www.myget.org/) - MyGet offers public and private cloud-hosting options if you don't want to handle all of the pain of setup and administration. MyGet offers some stellar options like multi-feed aggregation, mirroring, and source package build services! +* [TeamCity](https://www.jetbrains.com/teamcity/) has built-in Simple Server +* NuGet.Server +* [NuGet Gallery](https://github.com/NuGet/NuGetGallery/wiki/Hosting-the-NuGet-Gallery-Locally-in-IIS) +* Chocolatey Gallery +* Visual Studio Team Services (use NuGet v2 urls) +* [Cloudsmith](https://cloudsmith.com) - Cloudsmith is a universal, cloud-native package management solution for Deployment or Distribution. All your packages, in any format, including Chocolatey, NuGet and Powershell, in one location and accessible across the organization. + +#### Others + +These are other known servers, but we don't know the quality or compatibility of these frameworks as they relate to Chocolatey packages. + +* [Express Chocolatey Server](https://www.npmjs.com/package/express-chocolatey-server) - Open source, OS-agnostic, read-only, does not require .NET or Windows, based on [Express](https://expressjs.com/) +* [Klondike](https://github.com/themotleyfool/Klondike) - Ember front-end that builds on NuGet.Lucene for private NuGet package hosting +* [PHP NuGet](http://www.kendar.org/?p=/dotnet/phpnuget) - Simple server built in PHP +* [LaGet](https://github.com/ikkentim/LaGet) - A NuGet server written using the Laravel PHP Framework +* [Hazel](https://github.com/MPIB/hazel) - Simple server built in Rust + +## Package Version Immutability + +A package version is immutable on some sources. This means that everybody's version 1.0.1 of a particular package is the same. You do not need to worry about this when updating with newer versions of packages, because each package version compiled nupkg has the unique version in the name (e.g `bob.1.0.0.nupkg` vs `bob.1.0.1.nupkg` ). + +Package immutability is usually desired, because then you know that everyone on v1.0.0 of a package has exactly the same code as does even everyone else. Even a broken version v1.0.0 gives you a global understanding that everyone who has v1.0.0 has exactly the same bits. This really simplifies administration. Without immutability, there is no guarantee that a version of a package installed is the same as the version of the package at the source. + +## Local Folder / UNC Share (CIFS) + +Perhaps the easiest to set up and recommended for testing quick and dirty scenarios, local folder is easily a strong point when you need a quick source for packages. + +### Advantages + +* Speed of setup (can be setup almost immediately). +* Package store is filesystem. +* Can be easily upgrade to Simple Server. +* Permissions are based on file system/share permissions. +* Can manage PowerShell gallery type packages. +* There is no limitation on package sizes (or rather, it can likely handle 100MB+ file sizes, maybe even GB sized packages). Don't create multiple GB sized packages, what is wrong with you?! ;) + +> :choco-info: **NOTE** +> +> If you must create large packages, see for keeping used space down on client machines. + +### Disadvantages + +* Anyone with permission can push and overwrite packages. +* No HTTP/HTTPS pushing. Must be able to access the folder/share to push to it. +* Starts to affect choco performance once the source has over 500 packages (maybe?). +* No tracking on number of downloads / no package statistics +* **Big disadvantage**: For a file share there is not a guarantee of package version immutability. Does not do anything to keep from package versions being overwritten. This provides no immutability of a package version and no guarantee that a version of a package installed is the same as the version in the source. + +### Local Folder Share Setup + +No really, it's that easy. Just set your permissions appropriately and put packages in the folder (no subfolders). You are already done. Okay, two additional considerations: + +* [Folder Structure](#local-folder-or-share-structure) +* [Permissions](#local-folder-permissions) + +#### Local Folder Or Share Structure + +The structure should just be a flat folder or share (no subfolders) with nupkgs inside that folder. You get that when you choco push to that location. No subfolders, no `nuget add` type of setup will work for Chocolatey with those local folders and shares. + +> :choco-info: **NOTE** +> +> If you build a local NuGet folder repository using NuGet.exe v3.4+, where you use `nuget add`, you may find that it doesn't produce the results you might expect when you are using Chocolatey. It creates subfolders and adds those nupkgs in an optimized way for query. That is fine when there is a server like Chocolatey.Server that does that but has a way to translate that to an OData feed. When Chocolatey is querying those local folders and shares, it uses what is built into the Chocolatey client (choco.exe). That is currently a very enhanced version of NuGet v2, so it won't understand that optimized subfolder structure and you may get no results. So keep things simple and flat for those types of repositories. + +#### Local Folder Permissions + +Permissions can be interesting with a file share. If you are using machine accounts like LocalSystem, they may not have access to network resources. However there is a way to handle that in domain environments. You would need to grant access to machines or anonymous access to the share (Everyone Read is likely not enough). + +A great read on your options can be found at the following Stack Exchange links: + +* https://serverfault.com/q/135867/79259 +* https://serverfault.com/q/41130/79259 + +A way to do this with LocalSystem: + +1. Create a global group on the Domain + * add all machines to this group +1. Add this group to the share permissions with "Read" Access +1. Add this group to the NTFS permissions with "Read" Access + +> :choco-info: **NOTE** +> +> You'll need to add this group itself and not nest it inside of another one. + +## Simple Server + +There is where the bulk of NuGet OData compatible servers fall (NuGet.Server, Chocolatey.Server, etc). There are simple servers that are very enhanced, which fall into the [Commercial Package Repositories](#commercial-package-repositories) section. + +* Since Chocolatey just uses an enhanced version of the NuGet framework, it is compatible everywhere you can put a NuGet package. +* We recommend Chocolatey.Server if you are choosing between these options. +* A simple server typically has one repo per instance and manages only Chocolatey / NuGet packages. + +### Known Simple Server Options + +* NuGet.Server +* [TeamCity](https://www.jetbrains.com/teamcity/) has built-in Simple Server +* [Visual Studio Team Services (NuGet v2 endpoints)](https://docs.microsoft.com/en-us/vsts/package/overview) - [Setup](https://docs.microsoft.com/en-us/vsts/package/get-started-nuget) (Remove the part of the url that is /v3/index.json and use /v2 instead) - you may also need to [setup a personal access token](https://docs.microsoft.com/en-us/vsts/accounts/use-personal-access-tokens-to-authenticate). +* [NuGet.Java.Server](http://blog.jonnyzzz.name/2012/03/nuget-server-in-pure-java.html) ([NuGet Package](https://www.nuget.org/packages/NuGet.Java.Server)) - simple server (same tool used in TeamCity) +* [PHP NuGet](http://www.kendar.org/?p=/dotnet/phpnuget) +* [Hazel](https://github.com/MPIB/hazel) +* [LaGet](https://github.com/ikkentim/LaGet) +* [Klondike](https://github.com/themotleyfool/Klondike) +* Visual Studio Team Services (use NuGet v2 urls) + +If the option you've chosen is not listed, take a look at [known hosting options](#known-hosting-options) and follow the link from there to see what the vendor provides in the way of documentation. + +### Advantages + +* Setup can be really simple - just a website and IIS for some simple servers. +* Windows is not required - there are at least two pure Java versions (see [Non-Windows Hosting](#non-windows-hosting)). +* Push over HTTP / HTTPS/TLS. +* Authentication / Authorization: + * API key for pushing packages. + * Basic Authentication with IIS. +* No direct access to packages so security can be locked down to just modify through push. +* Package store is file system. +* Can manage PowerShell gallery type packages. + +### Disadvantages + +* May only have one API key per repository. +* Starts to affect performance once the source has over 2,000 packages for some sources. It depends on how they keep that information (in a db or file scans). +* Authentication is typically limited to Basic Auth. +* No moderation. +* May not have a website for viewing package information. Use ChocolateyGUI for seeing package information. +* No package statistics for most of the simple server sources. +* Package size may be limited to 28.61MB by default on some simple servers. Depending on your simple server - For IIS simple servers package size can be controlled through [maxAllowedContentLength](https://msdn.microsoft.com/en-us/library/ms689462(v=vs.90).aspx) and [maxRequestLength](https://msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx). For others like Nexus, it may already be set very high. You can host the installer internally somewhere and access it through packaging though. + +The actual limit for package sizes varies depending on what each simple server can handle (usually determined by the limitation of pushing a package to the server). If you determine what those are, we'd be happy to list each one here. + +#### Chocolatey.Server Setup + +Please see . More details below on what this option provides. + +[Chocolatey Simple Server](https://community.chocolatey.org/packages/chocolatey.server) is a simple Nuget.Server that is ready to rock and roll. It has already completed Steps 1-3 of NuGet's [host your own remote feed](https://docs.nuget.org/Create/Hosting-Your-Own-NuGet-Feeds#creating-remote-feeds). Some things to consider with Chocolatey.Server as compared to other options: + +* Uses same enhanced NuGet that Chocolatey uses so you can see more information in search if you choose to use those things. +* Allows packages up to 2GB. Package size can be controlled through [maxAllowedContentLength](https://msdn.microsoft.com/en-us/library/ms689462(v=vs.90).aspx) and [maxRequestLength](https://msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx). + +> :choco-info: **NOTE** +> +> Commercial options of Chocolatey also may have support for the Chocolatey.Server. + +#### NuGet.Server Setup + +Setting up NuGet.Server is very much a hands on approach for a packaging server - it requires Visual Studio as you will be adding the NuGet package to a Website project. We recommend looking at Chocolatey.Server as it is nearly the same thing but fully ready to go (and with Chocolatey enhancements). + +Many google searches will throw out good ways to set up your own feed (hint: search for "host your own NuGet server feed") +Some notable references: + +* Nuget Docs [Host Your Own Remote Feed](https://docs.nuget.org/Create/Hosting-Your-Own-NuGet-Feeds#creating-remote-feeds) +* itToby - [Setup Your Own Chocolatey/NuGet Repository](http://blog.ittoby.com/2014/07/setup-your-own-chocoloateynuget.html) +* Rich Hopkins - [Bake your own Chocolatey NuGet repository](https://souladin.wordpress.com/2014/12/05/bake-your-own-chocolatey-nuget-repository/) +* Brandon - [Host NuGet Server in Azure](http://netitude.bc3tech.net/2015/01/07/create-your-own-hosted-nuget-server-in-azure/) + +## Package Gallery + +This is like what https://community.chocolatey.org (the community feed runs on). It is the most advanced, having both a file store for packages and a database for tracking all sorts of information. + +### Advantages + +* Can deal with thousands of packages with no performance issues. +* Package versions are immutable - in other words you can guarantee the version installed is the same as the version in the source. +* Package store can be File system, Azure blobs, or AWS S3 (**S3 available with Chocolatey Package Gallery only**). +* Multiple users each having their own API keys. +* User registration with email confirmation. +* Interaction and collaboration based. +* Can have administrators. +* Can take advantage of moderation (**Chocolatey Package Gallery only**). +* Package statistics (download counts, etc). +* A website to view package information. +* Can be configured to send email. +* Can manage PowerShell gallery type packages. + +### Disadvantages + +* Speed of setup (can take longer than the rest). There are many moving parts to configure. +* Requires Windows/IIS/SQL Server/SMTP (hopefully with the proper licenses on each of those). +* Not well-documented, could require some diligence to get working. +* A package should not be bigger than 150MB. You can host the installer internally somewhere and access it through packaging though. Package size can be controlled through [maxAllowedContentLength](https://msdn.microsoft.com/en-us/library/ms689462(v=vs.90).aspx) and [maxRequestLength](https://msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx). + +#### Package Gallery Setup + +Only approach this if you are a Windows Admin with significant experience in setting up SQL Server databases and IIS for ASP.NET MVC sites. We don't have resources to help support the setup, but we can point you to [NuGet Gallery Setup](https://github.com/NuGet/NuGetGallery/wiki/Hosting-the-NuGet-Gallery-Locally-in-IIS). + +##### Chocolatey Package Gallery Setup + +At this time we don't have setup instructions and are not keen to answer questions specifically surrounding the setup of a Chocolatey Gallery (the code behind chocolatey.org). This is due to specific necessary settings regarding the community packages repository and tight integration to what it offers. Chocolatey for Business is likely to offer a gallery at some point, depending on prioritization. + +## Commercial Package Repositories + +These are simple servers that have more advanced options and authentication scenarios, plus multiple repository types. This section accounts for the following types. + +### Commercial Options + +* [Artifactory Pro](http://www.jfrog.com/confluence/display/RTF/NuGet+Repositories) +* [Cloudsmith](https://cloudsmith.com/nuget-feed/) ([Chocolatey Documentation](https://help.cloudsmith.io/docs/chocolatey-repository), [NuGet Documentation](https://help.cloudsmith.io/docs/nuget-feed)) +* [Feedz.io](https://feedz.io/docs/package-types/chocolatey) +* [Nexus2](https://books.sonatype.com/nexus-book/reference/nuget-nuget_hosted_repositories.html) / [Nexus3](https://books.sonatype.com/nexus-book/3.0/reference/nuget.html#nuget-hosted) +* [MyGet](https://www.myget.org/) +* [ProGet](http://inedo.com/support/documentation/proget/installation/installation-guide) + +If the option you've chosen is not listed, take a look at [known hosting options](#known-hosting-options) and follow the link from there to see what the vendor provides in the way of documentation. + +### Advantages + +* Setup can be really simple - just a website, IIS, and a local database or file to store configuration. +* May have free tier available (Artifactory is the only known option that does not have a free tier). +* Windows is not required for Nexus, Artifactory, or Cloudsmith. +* Push over HTTP / HTTPS/TLS. +* API key for pushing packages. +* No direct access to packages so security can be locked down to just modify through push or upload. +* Authentication / Authorization: + * Multiple api keys. + * Basic Authentication through IIS. + * RBAC (role-based access control) available in some options. + * LDAP authentication in some options (although Nuget/Chocolatey may not support this for package operations). +* Package stores can be file system, database, Azure blobs, and AWS S3 depending on the product. +* Website interface. + * Uploading packages can also be done through website. +* Multiple repositories in an instance. +* Multiple repository types (not limited to just NuGet/Chocolatey types). +* HA (High Availability) available in some options. +* Replication available in some options. +* Can manage PowerShell gallery type packages. + +### Disadvantages + +* Still unlikely to have moderation. You may not want this anyway. +* Package size may be limited. Check with the vendor to learn what their limits are. You can host the installer internally somewhere and access it through packaging though. Many times these repository types will also support a binary/raw repository you can use to download installers from, keeping a single point of failure on the package repository server. + +The actual limit for package sizes varies depending on what each server can handle (usually determined by the limitation of pushing a package to the server). If you determine what those are, we'd be happy to list each one here. + +### Commercial Repository Setup + +Most hosting options have great information on how to set up the package repository. Please see the documentation with each vendor to learn what options are available and how to set up. + +### Commercial Repository System Requirements + +For commercial options, we've compiled a list of recommended needs for your server repositories. For Chocolatey clients, please see . What you will see below are not the minimum values, you can typically get that at each of the links. These are what we typically recommend for use with Chocolatey. All of these options support High Availability (HA) options as well, so if you need something like that for a geographically diverse enterprise, there are options to meet those needs. Keep in mind pricing of each of these goes up based on your needs. + +#### Artifactory Pro + +* Windows or Linux Server +* CPU - 8-16 cores +* RAM - 16GB+ RAM (12GB of RAM reserved specifically for JVM heap) +* Storage (HDD) - At least 2-5TB of free space for a local file store of artifacts (you need 3 times the size of artifacts you will store). +* Chocolatey Repository Type: NuGet + +See https://www.jfrog.com/confluence/display/RTF/System+Requirements for more details. + +**PRICING**: Starts at $2,950/year (for Artifactory Pro). No free option for Chocolatey/NuGet type packages - https://jfrog.com/pricing/. + +#### Artifactory Enterprise with High Availability + +* Artifactory Cluster Server (Each): Windows or Linux Server with 8-16 cores (CPU), 16GB+ RAM (12GB of RAM reserved specifically for JVM heap), and probably at least 100GB of free space (as the artifacts are stored over on the NFS). This is similar to Artifactory Pro section above. +* Network: High Speed LAN (all Artifactory Servers must be on same LAN for syncing purposes). +* Shared Storage: NFS, AWS S3, Google Cloud Storage, or Local File System - Recommend NFS with 3 times the total size of what you will store (and a backup SAN) - 2-5TB+ space. +* Database: You must use an external database (one between all nodes), and it must be VERY powerful. Pretty much the highest specs you can configure on a Windows machine if you use SQL Server. It must support the max number of connections possible from all Artifactory cluster nodes in your system. 16+ cores (CPU), 64GB+ RAM, 5TB+, etc +* Load Balancer: Assume powerful - this will be software-based (such as nginx or HAProxy) or an appliance (such as F5 or Citrix). +* May or may not support cross-datacenter replication. + +See https://www.jfrog.com/confluence/display/RTF/Artifactory+High+Availability for more details. + +**PRICING**: Starts at $29,500/year (for Artifactory Enterprise) - https://jfrog.com/pricing/. + +#### Sonatype Nexus Repository Manager 2 + +* Windows, Mac OSX, or Linux Server +* CPU - 2-4 cores (Recommend 4+) +* RAM - 16GB+ (4GB of RAM reserved specifically for JRE) +* Storage (HDD) - At least 2-5TB of free space for a local file store of artifacts. [How much space do you need?](https://blog.sonatype.com/2012/01/sizing-nexus-how-much-space-do-you-need/) +* Chocolatey Repository Type: NuGet + +See https://help.sonatype.com/repomanager2/system-requirements for more details. + +**PRICING**: Starts at free (for Sonatype Nexus Repository Manager) - https://www.sonatype.com/nexus-product-pricing. + +#### Sonatype Nexus Repository Manager 3 + +* Windows, Mac OSX, or Linux Server +* CPU - 4 cores (Recommend more) +* RAM - 16GB+ (4GB of RAM reserved specifically for JRE) +* Storage (HDD) - At least 2-5TB of free space for a local file store of artifacts. [How much space do you need?](https://blog.sonatype.com/2012/01/sizing-nexus-how-much-space-do-you-need/) +* Chocolatey Repository Type: NuGet + +See https://help.sonatype.com/repomanager3/installation/system-requirements for more details. + +**PRICING**: Starts at free (for Sonatype Nexus Repository Manager) - https://www.sonatype.com/nexus-product-pricing. + +#### Sonatype Nexus Repository Manager 3 High Availability + +* 3 Node Cluster of Nexus Repository Manager Pro (NXRM Pro) instances (see Nexus 3 above for requirements). +* Network: High Speed LAN (all NXRM Pro Servers must be on same LAN for syncing purposes). +* Shared Storage: Appliance-based (such as NAS), or software-based (such as SMB). This will be shared across all Servers, so they will need to be able to read and write to it at high speed. Recommend appliance-based (NAS) with 3 times the total size of what you will store (and a backup) - 2-5TB+ space. +* Load Balancer: Assume powerful - this will be software-based (such as nginx or HAProxy) or an appliance (such as F5 or Citrix). +* Does not support cross-datacenter replication - only supports single datacenter. + +See https://help.sonatype.com/repomanager3/high-availability for details. It is very light on requirements, so assume similar to Artifactory's HA setup, minus a need for an external database. + +**PRICING**: Please see https://www.sonatype.com/nexus-product-pricing and contact Sonatype as it is not clear. You need at least 3 NXRM (Nexus Repository Manager) Pro licenses. There may be additional costs. + +#### ProGet + +* Windows Server or Linux (Docker) +* CPU - 2 to 4 cores +* RAM - 4GB to 8GB +* Storage (HDD) - we recommend 2-5TB of free space for a local file store of artifacts (ProGet itself requires less than 100MB free space) +* Database: SQL Server (built-in SQL Express is fine, or use your existing SQL Server) +* Chocolatey Repository Type: Chocolatey or NuGet + +See https://inedo.com/support/documentation/proget/installation/installation-guide for more details. + +**PRICING**: Starts at free (for ProGet) - https://inedo.com/proget/pricing. + +#### ProGet Enterprise High Availabilty + +* Windows Server Cluster or Kubernetes Cluster, each with similar specifications as above; note that artifacts are stored on shared storage +* Shared Storage: Appliance-based (such as NAS), or software-based (such as SMB). This will be shared across all Servers, so they will need to be able to read and write to it at high speed. Recommend appliance-based (NAS) with 3 times the total size of what you will store (and a backup) - 2-5TB+ space. +* Database: SQL Server with Database Clustering Recommended; high specs are not a requirement +* Load Balancer: Assume powerful - this will be software-based (such as nginx or HAProxy) or an appliance (such as F5 or Citrix). +* Supports cross-datacenter replication with multiple instances + +See https://inedo.com/support/documentation/proget/administration/high-availability for details. + +**PRICING**: Starts at $9,995 (for ProGet Enterprise) - https://inedo.com/proget/pricing. + +#### Cloudsmith + +* Cloudsmith is a universal, cloud native package management solution. It is cloud hosted so no infrastructure requirements are required. +* Chocolatey Repository Type: NuGet https://help.cloudsmith.io/docs/chocolatey-repository + +**PRICING**: A range of tiers are available, to suit all sizes of teams, for internal and external distribution, public and private - https://cloudsmith.com/product/pricing/. + +## Non-Windows Hosting + +If you don't want to host on Windows you have only the following options (from least advanced to most advanced - these options typically also work on Windows): + +* CIFS share +* [Express Chocolatey Server](https://www.npmjs.com/package/express-chocolatey-server) - Open source, OS-agnostic, read-only, does not require .NET or Windows, based on [Express](https://expressjs.com/) +* [NuGet.Java.Server](http://blog.jonnyzzz.name/2012/03/nuget-server-in-pure-java.html) ([NuGet Package](https://www.nuget.org/packages/NuGet.Java.Server)) - simple server (same tool used in TeamCity) +* [TeamCity](https://www.jetbrains.com/teamcity/) - contains built-in simple server +* [PHP NuGet](http://www.kendar.org/?p=/dotnet/phpnuget) - Simple server built in PHP +* [Hazel](https://github.com/MPIB/hazel) - Simple server built in Rust +* [Cloudsmith](https://cloudsmith.com) - see [Cloudsmith NuGet Repositories](https://help.cloudsmith.io/docs/nuget-feed) +* [Artifactory Pro](https://www.jfrog.com/artifactory/) - see [Artifactory NuGet Repositories](http://www.jfrog.com/confluence/display/RTF/NuGet+Repositories) +* [Sonatype Nexus](https://books.sonatype.com/nexus-book/reference/nuget-nuget_hosted_repositories.html) diff --git a/src/content/docs/en-us/features/index.mdx b/src/content/docs/en-us/features/index.mdx new file mode 100644 index 00000000000..ce2b168d089 --- /dev/null +++ b/src/content/docs/en-us/features/index.mdx @@ -0,0 +1,8 @@ +--- +order: 30 +xref: features +title: Features +description: Information about the different features that Chocolatey has +--- +import Xref from '@components/Xref.astro'; + \ No newline at end of file diff --git a/src/content/docs/en-us/features/install-directory-override.mdx b/src/content/docs/en-us/features/install-directory-override.mdx new file mode 100644 index 00000000000..d250f100a55 --- /dev/null +++ b/src/content/docs/en-us/features/install-directory-override.mdx @@ -0,0 +1,75 @@ +--- +order: 180 +xref: install-directory-override +title: Ubiquitous Install Directory Option (Pro+) +description: Override the install directory for native installers +--- +import Xref from '@components/Xref.astro'; + +The ubiquitous install directory switch for [customers](https://chocolatey.org/pricing)! The only switch you will ever need for overriding the install directory for native installers! When working with packages that use native installers (software that actually installs on a machine), Chocolatey is able to override the default installation directory from a simple switch you pass to choco. + +It can be a pain determining the native installer type (MSI, NSIS, InnoSetup, etc) for a piece of software and then determining what the install directory argument should look like. While you , you will see that the ubiquitous switch makes it very easy and a low amount of work on your part. + +With the ubiquitous switch, you are not only saving time, but also possible errors in passing the wrong arguments to an installer! + +## Usage + +Just pass `--install-directory=value` along and Chocolatey will determine what the actual call to the native installer needs to be and manage that for you! + +![choco install 1password --install-directory c:\1password](/images/chocopro_features_installdirectory.png) + +![Install override - if you are on https://docs.chocolatey.org/en-us/features/install-directory-override, see commented html below for detailed description of image](/images/features/features_override_install_directory.png) + +{/* */} + +## See It In Action + +![Directory override in action](/images/gifs/chocopro_features_installdirectory.gif) + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Options and Switches + +The following options are added to install and upgrade commands. + +```powershell + --dir, --directory, --installdir, --installdirectory, --install-dir, + --install-directory=VALUE + Install Directory Override - Override the default installation + directory. Chocolatey will automatically determine the type of + installer and pass the appropriate arguments to override the install + directory. The package must use Chocolatey install helpers and be + installing an installer for software. Licensed versions only. +``` + +## FAQ + +### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro and/or Business). Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need more business friendly features from their software management tool. + +### I'm a licensed customer, now what? + +You just create a package or find a package you want to install that uses a native installer (ends up in Programs and Features). + +### How does it work? + +Chocolatey is able to inspect the installer file to learn what it is and can do this for almost 15 different types of installers (there are over 20)! Once it understands what type of file it is, it knows how to install/upgrade/uninstall that piece of software. + +The recommended calls for installing native installers are to use `Install-ChocolateyPackage` (or `Install-ChocolateyInstallPackage`). This allows Chocolatey to override that directory automagically. + +### Do you have plans to make this work for zip files? + +We do have plans to extend this to archive packages as well. diff --git a/src/content/docs/en-us/features/integrations.mdx b/src/content/docs/en-us/features/integrations.mdx new file mode 100644 index 00000000000..6634478fed6 --- /dev/null +++ b/src/content/docs/en-us/features/integrations.mdx @@ -0,0 +1,228 @@ +--- +order: 60 +xref: integrations +title: Integrates with everything +description: Information on how Chocolatey can integrate with almost every tool +--- +import Xref from '@components/Xref.astro'; +import ConfigurationManagers from '@components/docs/ConfigurationManagers.mdx'; + +Chocolatey integrates with several infrastructure automation tools! + +With most of these tools, the interface you would interact with Chocolatey would be through the tool or through the interfaces of the tool, like in scripts. + +## Summary + +### Chocolatey Integration Implementation with Common Configuration Managers + + + +## Ansible + +Ansible has the `win_chocolatey` module that manages both packages and the installation of Chocolatey itself. + +```yaml +win_chocolatey: + name: git + source: https://my.internal.repository/api/v2/ +``` + +[Read More...](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_source_module.html) + +## Boxstarter + +Boxstarter is a lightweight configuration management utility. + +> Repeatable, **reboot resilient** Windows environment installations made easy using Chocolatey packages. When its time to repave either **bare metal or virtualized instances**, locally or on a **remote machine**, Boxstarter can automate both trivial and highly complex installations. Compatible with all Windows versions from **Windows 7/2008 R2 forward**. + +[Read more...](http://boxstarter.org/) + +## Chef + +Chef 12.7+ has a [built-in](https://www.chef.io/blog/2016/02/12/chef-client-12-7-released/) `chocolatey_package` resource to use with Chocolatey. + +```ruby +chocolatey_package 'git' do + action :install + source 'https://my.internal.repository/api/v2' +end +``` + +[Resource - Read More...](https://docs.chef.io/resource_chocolatey_package.html) + +When you need to also install Chocolatey, you would use the community cookbook to do so. The cookbook is maintained by the Chocolatey team. It has a package resource that can be used with older Chef versions. + +```ruby +include_recipe 'chocolatey' +``` + +[Cookbook - Read More...](https://supermarket.chef.io/cookbooks/chocolatey/) + +### Example + +Here's a more in depth example from [Nordstrom](https://github.com/Nordstrom/chefdk_bootstrap/blob/master/recipes/windows.rb): + +```ruby +include_recipe 'chocolatey' + +home = Dir.home +%W( + #{home}/.chef + #{home}/chef + #{home}/chef/cookbooks +).each do |directory| + directory directory +end + +packages = node['chefdk_bootstrap']['package'] + +packages.each do |pkg, install| + include_recipe "#{cookbook_name}::#{pkg}" if install +end +``` + +Another example from [Facebook](https://github.com/facebook/IT-CPE/tree/master/chef/cookbooks/cpe_choco): + +```ruby +node.default['cpe_choco']['sources']['bacon'] = + 'source' => 'http://bacon.es.yummy', +} +``` + +## Octopus Deploy + +Octopus is a friendly deployment automation tool for .NET developers. It integrates with lots of utilities, and they have a template for installing Chocolatey packages: https://library.octopusdeploy.com/step-template/actiontemplate-chocolatey-install-package + +[Read more...](https://octopus.com/) + +## Otter + +Otter has an [open source Chocolatey extension](https://github.com/Inedo/inedox-chocolatey) that allows installing and uninstalling packages, specifying package versions, chocolatey sources, chocolatey features, and installing chocolatey itself. + +Otter also keeps an inventory of Chocolatey packages installed on any or all servers. + +```powershell +Chocolatey::Ensure-Package +( + Name: 7zip.install, + Version: 18.5, + Source: https://proget.local/chocolatey +); + +Chocolatey::Ensure-Installed +( + Version: latest, + Source: https://proget.local/chocolatey +); + +Chocolatey::Ensure-Source +( + Name: Internal, + Url: https://proget.local/chocolatey, + Credential: DomainCred +); + +Chocolatey::Ensure-Feature +( + Feature: checksumFiles, + Enabled: false +); +``` + +[Read More...](https://inedo.com/den/otter/chocolatey) + +## PowerShell DSC + +PowerShell DSC (Desired State Configuration) has a cChoco module that can manage both packages and the installation of Chocolatey itself. + +```powershell + cChocoInstaller installChoco + { + InstallDir = "c:\ProgramData\chocolatey" + } + + cChocoPackageInstaller installGit + { + Name = "git" + DependsOn = "[cChocoInstaller]installChoco" + } +``` + +[Read More...](http://www.powershellgallery.com/packages/cChoco/) + +## PowerShell PackageManagement + +> :choco-info: **NOTE** +> +> Chocolatey has a prototype provider for the built-in package manager on Windows 10/Windows Server 2016 that was created by Microsoft awhile back. It is not fully functional and it may have security issues. If you want to use Chocolatey with PackageManagement, we recommend using ChocolateyGet, which is a nice bridge until an official one is implemented. No ETA has been defined. + +[PowerShell PackageManagement (aka OneGet)](https://github.com/OneGet/oneget) is a package manager **aggregator** that depends on the existence of package managers as providers to work, one of which is Chocolatey. + +## PSDeploy + +PSDeploy is a quick and dirty module to simplify PowerShell based deployments. + +```powershell +Deploy SingleChocolateyPackage { + By Chocolatey { + FromSource 'c:\ChocolateyPackages\examplepackage.0.1.1.nupkg' + To "http://your-choco-repo.internal.com/" + WithOptions @{ + ApiKey = 'yourAPIkey' + Force = $true + } + } +} +``` + +[Read More...](http://psdeploy.readthedocs.io/en/latest/Example-Chocolatey-Deployment/) + +## Puppet + +Puppet has a [Supported module](https://forge.puppet.com/supported) for Chocolatey `puppetlabs/chocolatey`. Note that there is also a `chocolatey/chocolatey` module, the supported module is a drop in replacement for the `chocolatey/chocolatey` module - please use `puppetlabs/chocolatey` as it has full configuration of Chocolatey. + +```puppet +include chocolatey + +package { 'git': + ensure => latest, + provider => 'chocolatey', + source => 'https://my.internal.repository/api/v2', +} +``` + +Puppet has some great documentation on getting started with Chocolatey. Be sure to check that out at [Create, Install, and Repackage with Chocolatey](https://puppet.com/docs/pe/2021.7/managing_windows_nodes.html#create_install_repackage_with_chocolatey). + +The Chocolatey team is most familiar with Puppet and has written some documentation for using Puppet with Chocolatey. Please see + +* [Install with Puppet](https://chocolatey.org/install#install-with-puppet) +* + +> :choco-info: **NOTE** +> +> If anyone would be interested in providing documentation similar to the above for other frameworks, we'd accept it as Pull Requests at https://github.com/chocolatey/docs. + +[Read More...](https://forge.puppet.com/puppetlabs/chocolatey) + +## Saltstack + +Salt has a Chocolatey module that manages both packages and the installation of Chocolatey itself. + +```python +salt '*' chocolatey.bootstrap +salt '*' chocolatey.install git +``` + +[Read More...](https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.chocolatey.html) + +## System Center Configuration Manager + +Chocolatey integrates with SCCM by handling the software management, and pointing to [distribution points](https://docs.microsoft.com/en-us/mem/configmgr/core/servers/deploy/configure/install-and-configure-distribution-points) as the source for packages. This allows folks to get packages and larger binaries out to their network without constraints and still take advantage of Chocolatey's fantastic abilities! + +To direct Chocolatey package installs, you can still write GPOs to ensure this. + +## Microsoft Intune + +Chocolatey's Intune Integration is only available to our Chocolatey for Business customers. It allows you to take any Chocolatey package and convert them into an `.intunewin` format for pushing to your Intune tenant for hosting and distribution. + +To get started with the Chocolatey Intune Integration please reference our [setup and use documentation](https://docs.chocolatey.org/en-us/licensed-extension/intune/). diff --git a/src/content/docs/en-us/features/made-for-automation.mdx b/src/content/docs/en-us/features/made-for-automation.mdx new file mode 100644 index 00000000000..66bdb6e55b8 --- /dev/null +++ b/src/content/docs/en-us/features/made-for-automation.mdx @@ -0,0 +1,12 @@ +--- +order: 10 +xref: made-for-automation +title: Made for Automation +description: Chocolatey is built with automation in mind, and can integrate into any workflow +showInSideBar: false +--- +import Xref from '@components/Xref.astro'; + +> :choco-warning: **WARNING** +> +> This is a Work in Progress. Please check back later. \ No newline at end of file diff --git a/src/content/docs/en-us/features/package-anything.mdx b/src/content/docs/en-us/features/package-anything.mdx new file mode 100644 index 00000000000..10199bb1acc --- /dev/null +++ b/src/content/docs/en-us/features/package-anything.mdx @@ -0,0 +1,28 @@ +--- +order: 30 +xref: package-anything +title: Package anything +description: With Chocolatey you can package up anything, whether it is installers, application, zip, scripts, etc +--- +import Xref from '@components/Xref.astro'; + +Chocolatey brings with it the concept of a Universal Packaging format for Windows. At the heart of this is , the automation language for Windows. + +Since on a Windows machine you can pretty much do "anything" with PowerShell, you can pretty much do "anything" within a Chocolatey package. If you need to + +- install an msi or an exe +- deploy a standalone binary +- unzip an archive file +- place some scripts into a particular folder + +Then you can do all of these with Chocolatey. The benefit comes that you will then know exactly what version of these artifacts are deployed onto any machine, and as a result, you will know when some of these artifacts need to be updated. Gone are the days of guessing at what version of a binary is deployed onto any given machine. + +When you couple this with the knowledge that a single Chocolatey package can take a dependency on another Chocolatey package, then you can quite quickly see how simple it can be to chain together a complex installation scenario. For example, let's imagine that you want to install the [`vscode` package](https://community.chocolatey.org/packages/vscode), but you also wanted to perform some custom configuration after the installation was performed. You could create a separate package called `vscode-config`, which takes a dependency on `vscode`, and in that package, you could perform all the necessary configuration that you wanted to achieve. Then, when you run: + +```powershell +choco install vscode-config +``` + +Chocolatey will first ensure that all dependencies for this package are met, and will install the `vscode` package. Once complete, the installation of the `vscode-config` package will happen, and your custom configuration will be applied. The beauty of this approach is separation of concerns that can be achieved. Here the installation of `vscode` is completed as a single unit of work, and then the custom configuration is applied afterward. + +On top of this, Chocolatey has the concept of , which means that you can encapsulate common operations into a single Chocolatey package, which can then be used as a dependency on any other package that needs that functionality. This makes it incredibly simple to consolidate re-usable scripts into a versioned package, that can be used across multiple computers, and packages. A prime example of this is the [`chocolatey-core.extension`](https://community.chocolatey.org/packages/chocolatey-core.extension) package which was created by the Chocolatey Community to provide additional functionality on top of the core functions of Chocolatey itself. \ No newline at end of file diff --git a/src/content/docs/en-us/features/package-audit.mdx b/src/content/docs/en-us/features/package-audit.mdx new file mode 100644 index 00000000000..bc07a317c53 --- /dev/null +++ b/src/content/docs/en-us/features/package-audit.mdx @@ -0,0 +1,113 @@ +--- +order: 130 +xref: package-audit +title: Package Audit (C4B) +description: Know who installed what package and when +--- +import Xref from '@components/Xref.astro'; +import TabsPane from '@components/tabs/TabsPane.astro'; +import TabsPaneContainer from '@components/tabs/TabsPaneContainer.astro'; +import TabsTabContainer from '@components/tabs/TabsTabContainer.astro'; + +> Know who installed what package and when. + +Reporting is very important, and auditing not only when your installations occurred but who installed them can be critical. There is nothing that presents this kind of information as easily as you will be able to gather it with Chocolatey for Business (C4B) and Package Audit. + +## Usage + +When calling `choco list` (`choco list -lo` in Chocolatey CLI v1.x), add `--audit` to see information on who installed and when. + +### Requirements + +* Chocolatey (`chocolatey` package) v0.10.7+. +* Chocolatey for Business (C4B) Edition. +* Chocolatey Licensed Extension (`chocolatey.extension` package) v1.12.0+. + +## See It In Action + +> :choco-note: **NOTE** +> +> Packages installed prior to installation of Chocolatey Licensed Extension will only mention Id and Version of each package. + +export const tabsOne = [ + { id: 'choco-v2-image', title: 'Chocolatey CLI v2.x', isActive: true }, + { id: 'choco-v1-image', title: 'Chocolatey CLI v1.x' } +]; + + + + + ![Package Audit - if you are on https://docs.chocolatey.org/en-us/features/package-audit, see commented html below for detailed description of image](/images/features/features_package_audit_v2.png) + + + ![Package Audit - if you are on https://docs.chocolatey.org/en-us/features/package-audit, see commented html below for detailed description of image](/images/features/features_package_audit.png) + + + +When shown, the user and domain are for the user who actually performed the installation. The "Original User" is the user who requested the install (outside of , it would be the same as the installing user). The Installation Date and Time are in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time. + +{/* */} + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Options and Switches + +export const tabsTwo = [ + { id: 'choco-v2-options', title: 'Chocolatey CLI v2.x', isActive: true }, + { id: 'choco-v2-options', title: 'Chocolatey CLI v1.x' } +]; + + + + + When calling `choco list`: + + ```powershell + --audit, --showaudit, --show-audit, --show-audit-info + Show Audit Information - Display auditing information for a package. + Available in business editions only. + ``` + + + + When calling `choco list -lo`: + + ```powershell + --audit, --showaudit, --show-audit, --show-audit-info + Show Audit Information - Display auditing information for a package. + Available in business editions only. + ``` + + + + +## FAQ + +### How do I take advantage of this feature? + +You must have a [Business edition of Chocolatey](https://chocolatey.org/compare). Business editions are great for organizations that need to manage the total software management lifecycle. + +### I'm a licensed customer, now what? + +Once you have Chocolatey for Business properly set up, any installations or upgrades performed will be automatically audited. All existing installs will not have audit information, so we recommend the first thing you install after Chocolatey is chocolatey.extension v1.12.0+. + +### How does it work? + +It just works. When you install/upgrade packages, the auditing information is automatically tracked. To see the information, you simply call `choco list --audit` (`choco list -lo --audit` in Chocolatey CLI v1.x) and if you want to see it in machine parseable format, add `-r` to the end of the command. + +### I only see the audit information on packages I've installed updated since switching over to C4B. + +This is expected. You need Chocolatey Licensed Extension v1.12.0+ installed and configured prior to installing/upgrading apps. + +### What is the difference between user and original user? + +User is the user that performed the installation/upgrade. When using the self-service feature, original user will be the original user who requested the install/upgrade. diff --git a/src/content/docs/en-us/features/package-builder.mdx b/src/content/docs/en-us/features/package-builder.mdx new file mode 100644 index 00000000000..750f0004e6c --- /dev/null +++ b/src/content/docs/en-us/features/package-builder.mdx @@ -0,0 +1,202 @@ +--- +order: 120 +xref: package-builder +title: Package Builder (C4B) +description: Create fully ready to go software deployments for Windows in 5-10 seconds +--- +import Xref from '@components/Xref.astro'; + +> Chocolatey's Package Builder allows you to create fully ready to go software deployments for Windows in 5-10 seconds! There is nothing faster than Chocolatey when it comes to preparing software for an unattended deployment across your organization. + +* Generate packages based on installers and zips +* Generate packages by reflecting over Programs and Features +* Generate packages from the Package Builder UI + +Creating packages is a pretty quick process as compared to manually installing software on multiple machines. There is still some time involved to create a package. Even the best packagers take between 5-10 minutes to create a package. Chocolatey's Package Builder creates high quality packages in 5-10 seconds when pointed to native installers and zips! You can even point package builder to both a 32-bit and 64-bit url and seconds later you have a fully functioning package using all local/embedded resources! + +Chocolatey for Business is able to inspect an installer and determine silent arguments and complete packaging components for you, saving you hours of time in packaging and maintaining software! + +## Usage + +### Command Line + +When calling `choco new`, just add `--file=value` to point to a native installer and Chocolatey for Business will automatically determine the silent arguments, create the packaging and wrap that all around the installer. + +![Create Packages from Installers - if you are on https://docs.chocolatey.org/en-us/features/package-builder, see commented html below for detailed description of image](/images/features/features_packages_from_installers.png) + +{/* */} + +### Package Builder UI + +Starting in version 1.8.0 of the licensed editions, you have access to the Package Builder UI. + +Simply right click on an installer, executable, or zip type and select "Create Chocolatey Package..." + +![Package Builder UI](/images/package-builder/package-builder-ui.png) + +Then just add in and fill out the requested information. It uses `choco new` under the covers allowing you to really ramp up fast, especially when you don't have a lot of command line experience. + +Another way to bring up the ui is to call `packagebuilder` from the command line. + +## See It In Action + +### Package Builder CLI and Scripts + +We've prepared a short video going over the concepts: + +[![Chocolatey's Package Builder - Package Builder CLI and Scripting](/images/package-builder/package-builder-cli-video.png)](https://www.youtube.com/watch?v=6TXY5Ie-3wg&list=PLfn-TaDnc1us5X-PVlxW8M1h-6mXEXZSG&index=1 "Chocolatey's Package Builder - Package Builder CLI and Scripting") + +Quickly script out creating packages for your entire organization's cache of software, allowing you to completely automate your Windows installations in moments, not months. You can do that with a simple script: + +```powershell +# Path to your installers, will navigate subdirectories +$path = '\\company.file.server\installers' + +# Generate packages over supported types of files +$supportedTypes = @('.exe', '.msi', '.7z', '.zip', '.msu', '.msp') +Get-ChildItem -Path $path -Recurse | ?{ + $extension = [System.IO.Path]::GetExtension($_.Name) + $supportedTypes.Contains($extension) + } | %{ + Write-Host "$($_.FullName)" + # Run choco new against the installer + & choco new --file "$($_.FullName)" --build-package --outputdirectory $pwd +} +``` + +As you see this script, it is doing the following: +* Taking a path to where installers, zips, etc are located (`$path = '\\company.file.server\installers'`) +* Setting up support types of files to use with Package Builder (`$supportedTypes = @('.exe', '.msi', '.7z', '.zip', '.msu', '.msp')`) +* Looping over all that it finds in that folder and all subdirectories (`Get-ChildItem -Path $path -Recurse`) +* Find files that apply (`$supportedTypes.Contains($extension)`) +* Run choco new, but point it to the full path to the file (`& choco new --file "$($_.FullName)"`), ask it to attempt to build the package (`--build-package`) and have the output in present working directory (` --outputdirectory $pwd`) + +### Package Builder UI + +Not every person is going to love the command line or may not be familiar with the command line and at Chocolatey we realize this. We've spent countless hours talking to customers and with their feedback we're introducing Package Builder UI. This also gives you an opportunity to transition from existing UI tools while taking advantage of powerful Chocolatey concepts! + +We've prepared a short video to show the power of the UI: +[![Chocolatey's Package Builder - Package Builder UI](/images/package-builder/package-builder-ui-video.png)](https://www.youtube.com/watch?v=qJNKR_PEQqY&list=PLfn-TaDnc1us5X-PVlxW8M1h-6mXEXZSG&index=2 "Chocolatey's Package Builder - Package Builder UI") + +### Generate Packages from Programs and Features + +Another way Package Builder can generate packages is based on looking at what is installed on a system in Programs and Features. This gives you lightning quick ramp up time in both package and automating your Windows software installations! + +[![Chocolatey's Package Builder - Generate Packages from Programs and Features Automatically!](/images/package-builder/package-builder-programs-features-video.png)](https://www.youtube.com/watch?v=Mw_ReipnskI&list=PLfn-TaDnc1us5X-PVlxW8M1h-6mXEXZSG&index=3 "Chocolatey's Package Builder - Generate Packages from Programs and Features Automatically!") + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +### More business concepts + +![auto package creation/synchronize](/images/gifs/choco_business_features.gif) + +## Options and Switches + +When running `choco new` in the Business editions, pass the following: + +```powershell + --file, --url=VALUE + Inspect a file (native installer, zip, patch/upgrade file, or remote url + to download first) to to completely create a package with proper silent + arguments! Can be 32-bit or 64-bit architecture. Available in Business + editions only. + + --file64, --url64=VALUE + Optional - used when specifying both a 32-bit and a 64-bit file. Can be + an installer or a zip, or remote url to download. Available in Business + editions only. + + --keepremote, --originallocation, --original-location, --useoriginallocation, --use-original-location, --useoriginalfileslocation, --use-original-files-location + Use Original Files Location - when using file or url, use the original + location in packaging. Available in Business editions only. + + --checksum, --downloadchecksum, --download-checksum=VALUE + Download Checksum - checksum to verify File/Url with. Defaults to empty. + Available in Business editions only. + + --checksum64, --checksumx64, --downloadchecksumx64, --download-checksum-x64=VALUE + Download Checksum 64-bit - checksum to verify File64/Url64 with. + Defaults to empty. Available in Business editions only. + + --checksumtype, --checksum-type, --downloadchecksumtype, --download-checksum-type=VALUE + Download Checksum Type - checksum type for File/Url (and optional + separate 64-bit files when specifying both). Used in conjunction with + Download Checksum and Download Checksum 64-bit. Available values are + 'md5', 'sha1', 'sha256' or 'sha512'. Defaults to 'sha256'. Available in + Business editions only. + + --pauseonerror, --pause-on-error + Pause on Error - Pause when there is an error with creating the package. + Available in Business editions only. + + --buildpackage, --build-package + Build Package - Attempt to compile the package after creating it. + Available in Business editions only. +``` + +## FAQ + +### How do I take advantage of Package Builder? + +You must have a [Business edition of Chocolatey](https://chocolatey.org/compare). Business editions are great for organizations that need to manage the total software lifecycle. + +### I'm a licensed customer, now what? + +When you run `choco new`, you can add `--file` and point Chocolatey at the installer file and let Chocolatey figure out everything for creating a package and the silent arguments and wrap that around the installer. + +### Will this become available for lower editions of Chocolatey? + +Package Builder will only be available in C4B (Chocolatey for Business). + +### How does it work? + +It inspects the installer file using a series of rules that helps determine the installer type. From there it builds a package with the information it is able to extract from the installer. + +### What types of extensions are supported? + +Package Builder supports `.exe`, `.msi`, `.msu`, `.msp`, `.7z`, and `.zip`. + +### Will it catch all types of installers? + +It is able to detect 12 types of installers currently. + +### Does it always find the silent uninstall arguments? + +In over 70% of the cases it will, but not always. Even with this in mind, it still removes 90% of the packaging work. When it can't create a fully unattended softare deployment, it will create a TODO file for you to complete. See the next question on how to handle cases where it can not. + +### This was unable to detect custom installer arguments. + +Unfortunately, some installers out there are just a pain to work with. In the case of custom installers, you may be able to find the silent arguments for install and uninstall by searching online. If you can not find anything, consider unpacking the installer and putting the software binaries directly in the package. + +### Does it create auto unattend files? + +Unfortunately, it is not able to do this. See the to take advantage of thousands of existing packages without a need for internet access. + +### Does it work with zip archive? + +Yes, but somewhat naively. It will generate the packaging to unpack the archive for both 7z and zip files. + +### Does this work with keeping the installer on a UNC share or elsewhere yet? + +Yes, as of Licensed version v1.6.0+. Use `--use-original-location`. + +## Common Issues and Resolutions + +### I get "Name is required. Please pass in a name for the new package." + +This occurs when you are not running Chocolatey for Business or don't have your client properly licensed. Please see for more details. diff --git a/src/content/docs/en-us/features/package-internalizer.mdx b/src/content/docs/en-us/features/package-internalizer.mdx new file mode 100644 index 00000000000..365b0b8f5b5 --- /dev/null +++ b/src/content/docs/en-us/features/package-internalizer.mdx @@ -0,0 +1,122 @@ +--- +order: 110 +xref: package-internalizer +title: Package Internalizer (C4B) +description: Automatically internalize/recompile existing packages +--- +import Xref from '@components/Xref.astro'; + +Automatically Internalize/Recompile Existing Packages (Business and MSP Editions Only) + +There are thousands of existing packages on the ). There is a process for downloading and internalizing packages to use internal or embedded locations for that software that is called **internalizing** (also known as recompiling). + +Chocolatey for Business is able to automatically download packages and resources, edit the scripts, and recompile packages to internalize and remove internet dependencies from those packages, saving you hours of time in ! + +## Usage + +Call `choco download` with options including the name of an existing package for Chocolatey for Business to download and download all existing remote resources. + +![Internalize Existing Packages, Recompiling Resources - if you are on https://docs.chocolatey.org/en-us/guides/create/recompile-packages, see commented html below for detailed description of image](/images/features/features_recompile_packages.png) + +{/* */} + +## See It In Action + +![automatic recompile](/images/gifs/choco_business_features_recompile.gif) + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Options and Switches + +When running `choco download` in the Business editions, pass the following: + +```powershell + --outputdirectory=VALUE + OutputDirectory - Specifies the directory for the downloaded Chocolatey + package file. If not specified, uses the current directory. + + -i, --ignoredependencies, --ignore-dependencies + IgnoreDependencies - Ignore dependencies when installing package(s). + Licensed editions v1.9.0+ Defaults to false. + + --recompile, --internalize + Recompile / Internalize - Download all external resources and recompile + the package to use the local resources instead. Business editions only + (licensed version 1.5.0+). + + --resources-location=VALUE + Resources Location - When internalizing, use this location for resources + instead of embedding the downloaded resources into the package. Can be a + file share or an internal url location. When it is a file share, it will + attempt to download to that location. When it is an internal url, it + will download locally and give further instructions on where it should + be uploaded to match package edits. Business editions only (licensed + version 1.5.1+). + + --download-location=VALUE + Download Location - OPTIONAL - when internalizing, download the + resources to this location. Used with Resources Location (and defaults + to Resources Location when not set). Business editions only (licensed + version 1.8.3+). + + --append-useoriginallocation, --append-use-original-location + Append -UseOriginalLocation - When `Install-ChocolateyPackage` is + internalized, append the `-UseOriginalLocation` parameter to the + function. Business editions only (licensed version 1.7.0+). Requires at + least Chocolatey v0.10.1 for `Install-ChocolateyPackage` to recognize + the switch appropriately. Overrides the feature + 'internalizeAppendUseOriginalLocation' set to by default to 'False'. +``` + +See for more information. + +## Resources + +Community posts that include Package Internalizer: + +* [Getting Started With Chocolatey 4 Business & Jenkins CI](https://blog.pauby.com/post/getting-started-with-chocolatey-and-jenkins/) +* [Automating Chocolatey package internalizing with PowerShell](https://winsysblog.com/2017/10/automating-chocolatey-package-internalizing-with-powershell.html) ([archive.org](https://web.archive.org/web/20201025112142/https://winsysblog.com/2017/10/automating-chocolatey-package-internalizing-with-powershell.html)) +* [Recompiling Chocolatey packages](https://winsysblog.com/2017/08/recompiling-chocolatey-packages.html) ([archive.org](https://web.archive.org/web/20210815015512/https://winsysblog.com/2017/08/recompiling-chocolatey-packages.html)) + +## FAQ + +### How do I take advantage of this feature? + +You must have a [Business edition of Chocolatey](https://chocolatey.org/compare) or Chocolatey for MSP. Business editions are great for organizations that need to manage the total software management lifecycle. + +### I'm a licensed customer, now what? + +You can run `choco download` and point it to an existing package name on any remote resource, typically folks point to `https://community.chocolatey.org/api/v2/` and let Chocolatey do all of the work of getting the package and remote resources to recompile the package. + +### How does it work? + +It downloads a package locally. Then it looks at the install script to determine if there are remote resources, which are downloaded to a directory in the package (or with another switch will be placed on a file share or setup for an http location). Then it edits the install script to use the local resources instead and recompiles the package. The process takes about as long as it takes to download the remote resources. + +### Does it work with all types of packages? + +Some packages are already internalized or don't have remote resources. In those cases it will just download the existing package and have it available for pushing to an internal repository. + +### It was not able to download a resource. Why not? + +This feature is in preview, but is able to download/recompile quite a few packages. There are a few that it may have issues with, especially if variables with methods are used (e.g. `$(somevar).Replace(".","")`). In those cases it attempts to warn you ahead of time that it cannot handle those yet. + +Future versions of the licensed edition will support advanced scenarios such as these. + +### Are all packages guaranteed to be compatible? + +Unfortunately not all packages on the community repository are created equal, even with the rigorous moderation process. A few packages do not use the built-in functions for acquiring files from the internet, so they don't lend well to automatic recompiling. Typically Chocolatey will let you know when this is the case and allow you to inspect the package to allow you to finish up the next steps of recompiling. As a future enhancement, it's possible this scenario would also be supported, although it is a very small subset of packages that are created in this way. diff --git a/src/content/docs/en-us/features/package-reducer.mdx b/src/content/docs/en-us/features/package-reducer.mdx new file mode 100644 index 00000000000..db8af13e770 --- /dev/null +++ b/src/content/docs/en-us/features/package-reducer.mdx @@ -0,0 +1,234 @@ +--- +order: 140 +xref: package-reducer +title: Package Reducer (Pro+) +description: Reduce the size of your package installations automatically +--- +import Xref from '@components/Xref.astro'; + +> Reduce the size of your package installations automatically! + +If you have a significant number of Chocolatey packages you manage, you may notice that you also may have a pretty significant space usage under the Chocolatey lib directory. Package reducer automatically decreases the size of nupkg files to around 5KB and removes installers and zips automatically from your package install directories. This may allow you to save GBs of usage for a large amount of packages being managed! + +## Automatic + +### Usage + +When you normally create packages that embed or download resources, the impact on a system includes the following: + +* A nupkg file size takes up some space - this is like a fancy zip file and may contain binaries +* Files extracted or downloaded to the package directory - this may include zips and installers +* The actual install location if using an installer +* MSI cached by Windows - Windows caches the complete MSI binaries + +Typically with this in mind, the size of nupkg could account for an up to 4x impact on a system considering the above. So we typically recommend organizations set a comfortable threshold for package sizes (around 500MB) before splitting out binaries to downloaded resources. + +Package Reducer nearly removes that need as it reduces the nupkg file to 5KB by removing all the embedded files. Then it takes it a step further and removes zip and installers from the package directory automatically (configurable by a feature switch, see [Setup](#setup)). + +When you turn on Package Reducer, the first two items above no longer take up any significant space. This can reduce space usage in the order of GBs for some installations of Chocolatey. + +With Package Reducer: + +* nupkg file is reduced to 5KB or less, no matter the size on install +* zips / installers are automatically removed from the package directory if they are found + +The following file extensions are removed automatically: + +* 7z / zip / rar / gz / tar / sfx +* iso +* msi / msu / msp +* exe files if they are detected to be an installer + +So the space usage impact changes to what you'd normally experience outside of Chocolatey: + +* the actual install location (package directory, Program Files, etc) +* MSI cache for MSIs + +#### Requirements + +* Chocolatey (`chocolatey` package). +* Chocolatey Licensed Edition +* Chocolatey Licensed Extension (`chocolatey.extension` package). + +#### Setup + +To turn on Package Reducer, you need to run the following: + +* `choco upgrade chocolatey.extension ` +* `choco feature enable --name reduceInstalledPackageSpaceUsage` +* If you want to limit to just nupkg files being reduced and not automatically removing zips and installers, run the following: `choco feature enable --name reduceOnlyNupkgSize` + +### See It In Action + +![Package Reducer - if you are on https://docs.chocolatey.org/en-us/features/package-reducer, see commented html below for detailed description of image](/images/features/features_package_reducer.png) + +{/* */} +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +### Package-specific Control Of Package Reducer + +It is possible to control Package Reducer at a package level. This is useful where you have enabled `reduceInstalledPackageSpaceUsage` globally, but wish to maintain the +files within a particular package (perhaps a portable package, or binary package). There are 2 options available at the package level to control behavior: + +#### Skip Entire Reducer Functionality + +To completely bypass Package Reducer during a `choco install` or `choco upgrade` operation, add a `.SkipReducer` file to the root of your package. + +#### Skip Extracted Files + +To bypass reducer for extracted files in a package, add a `.SkipReducerFiles` file to your package. This is the same as enabling `ReduceOnlyNupkgSize`. + +### Options and Switches + +Global Config Setting: + + * `reduceInstalledPackageSpaceUsage` - Reduce Installed Package Size (Package Reducer) - Reduce size of the nupkg file to very small and remove extracted archives and installers. + + +`choco install` / `choco upgrade` provide the following option(s): + +``` + --reduce, --reduce-package-size, --deflate, --deflate-package-size + Reducer Installed Package Size (Package Reducer) - Reduce size of the + nupkg file to very small and remove extracted archives and installers. + Overrides the default feature 'reduceInstalledPackageSpaceUsage' set to + 'False'. Licensed editions only. See + https://docs.chocolatey.org/en-us/features/package-reducer + + --no-reduce, --no-reduce-package-size, --no-deflate, --no-deflate-package-size + Do Not Reduce Installed Package Size - Leave the nupkg and files alone + in the package. Overrides the default feature + 'reduceInstalledPackageSpaceUsage' set to 'False'. Licensed editions + only. See https://docs.chocolatey.org/en-us/features/package-reducer + + --reduce-nupkg-only, --deflate-nupkg-only + Reduce Only Nupkg File Size - reduce only the size of nupkg file when + using Package Reducer. Overrides the default feature + 'reduceOnlyNupkgSize' set to 'False'. Licensed editions only. + See https://docs.chocolatey.org/en-us/features/package-reducer +``` + +### FAQ + +#### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, MSP, or Business) and use the community package repository to install/upgrade packages. Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions are for managed service providers and contain the same features as Pro (minus VirusTotal integration). + +#### I'm a licensed customer, now what? + +Once you have set up the feature(s), it will automatically reduce the size of the packaging on install and upgrade. + +#### How does it work? + +It just works. When you install or upgrade a package, it will automatically reduce the size of the installation directory if you've set up Package Reducer properly. + +#### How do I turn this feature on? + +* Globally - `choco feature enable --name reduceInstalledPackageSpaceUsage` +* Per command - use the option `--reduce-package-size` with install/upgrade commands. + +#### How do I turn this feature off? + +* Globally - `choco feature disable --name reduceInstalledPackageSpaceUsage` +* Per command - use the option `--no-reduce-package-size` with install/upgrade commands. + +#### Can I just deflate nupkg file sizes? + +Yes! + +* Globally - `choco feature disable --name reduceInstalledPackageSpaceUsage` +* Per command - use the option `--reduce-nupkg-only` with install/upgrade commands. + +#### Can I apply reducer to already installed packages? + +See the next section, the `choco optimize` command. + +## Optimize Command + +Package Reducer's Package Optimizer is available in all licensed editions. It is similar to the automatic reduction, except it reduces the size of existing installations. + +With Package Optimizer: + +* nupkg file is reduced to 5KB or less, no matter the size. +* zips / installers are automatically removed from the package directory if they are found. +* zips / installers are removed from TEMP cache if found. + +The following file extensions are removed automatically: + +* 7z / zip / rar / gz / tar / sfx +* iso +* msi / msu / msp +* exe files if they are detected to be an installer + +### Usage + +```powershell +choco optimize [] +``` + +#### Requirements + +* Chocolatey (`chocolatey` package) +* Chocolatey Licensed Edition +* Chocolatey Licensed Extension (`chocolatey.extension` package) + +### Examples + +```powershell +choco optimize +choco optimize --reduce-nupkg-only +``` + +### See It In Action + +![choco optimize - if you are on https://docs.chocolatey.org/en-us/features/package-reducer, see commented html below for detailed description of image](/images/features/features_package_reducer_optimize.png) + +{/* */} + + +### Options and Switches + +```powershell + --reduce-nupkg-only, --deflate-nupkg-only + Reduce Only Nupkg File Size - reduce only the size of nupkg file when + using Package Optimizer. Licensed editions only. +``` + + +### FAQ + +#### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, MSP, or Business) and use the community package repository to install/upgrade packages. Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions are for managed service providers and contain the same features as Pro (minus VirusTotal integration). + +#### I'm a licensed customer, now what? + +You can just run `choco optimize`. Couple it with package reducer features to automatically ensure your Chocolatey installation stays very small. + +#### How does it work? + +It goes through all existing packages and removes unnecessary installers and zips. It also deflates nupkg files down to 5KB or less. diff --git a/src/content/docs/en-us/features/package-synchronization/automatic-sync.mdx b/src/content/docs/en-us/features/package-synchronization/automatic-sync.mdx new file mode 100644 index 00000000000..62efb0b7562 --- /dev/null +++ b/src/content/docs/en-us/features/package-synchronization/automatic-sync.mdx @@ -0,0 +1,97 @@ +--- +order: 10 +xref: automatic-sync +title: Automatic Sync (Pro+) +description: Ensure that any operation on an application, i.e. it is uninstalled, or upgraded, is tracked within Chocolatey as well +--- +import Xref from '@components/Xref.astro'; + +## Automatic Synchronize + +In all licensed editions, Chocolatey syncs the state of **already installed Chocolatey packages** (nupkg files) to the state of the software they are linked up with - so if the software is uninstalled or upgraded outside of Chocolatey, it removes the package or notes the upgrade. This behavior is known as automatic synchronization or autosync for short. There is also choco sync, which is different and is covered in [Sync Command](#sync-command) below. + +There is an important distinction between packages and software to understand with Chocolatey. Chocolatey manages packages (nupkg files), and packages manage software. Many packages are what we call "installer packages" - packages that manage an installer and an installation into Programs and Features. Once that software is in Programs and Features, it could be manipulated outside of Chocolatey. If it is removed without the command going through Chocolatey, open source Chocolatey will still have the package installed (which is technically correct from a package manager state, but incorrect based on expectations). With open source you end up with a disconnect if you are not careful. Licensed editions of Chocolatey are able to see system state and correct this discrepancy with autosync by updating the state of the package based on what has occurred outside of Chocolatey. + +For software management, which encompasses package management and above that for Windows, the state of the software is really what should be reflected with those installed packages. So if that software has been uninstalled from Programs and Features or upgraded outside of Chocolatey, autosync removes those packages to match that state or notes the upgrade (note it doesn't change the version of the package - that's much trickier to get correct). + +As commercial editions lean more towards software management, they have much better system integration. Autosync is great for ensuring that Chocolatey matches the state of changes on the system for what the packages it is tracking. + +### Usage + +> :choco-warning: WARNING +> +> The following image shows this behavior in Chocolatey CLI v1.x. Chocolatey CLI v2.x has the same behavior, but uses `choco list` instead of `choco list -lo` to list local packages. + +![Automatic Synchronize - if you are on https://docs.chocolatey.org/en-us/features/package-synchronization, see commented html below for detailed description of image](/images/features/features_synchronize.png) + +In the image above, someone manually removed the 1Password software. On the next run of Chocolatey, auto sync sees the software has been removed, so it removes the package tracking to that software in response to those system changes. + +{/* */} + +#### Automatic Updating Software? + +When you have software like Google Chrome that automatically updates, it is recommended typically that you pin the package to let the software automatically upgrade. Chocolatey's autosync will track the software updates in the background and store those which will be helpful if you later remove the software from Programs and Features directly or want to run choco uninstall on the package to remove the software. + +#### More Details On External Upgrades + +You could also upgrade the software directly outside of Chocolatey, which would similarly create a discrepancy between the software being on a newer version than the package shows. + +Chocolatey's autosync understands that an upgrade occurred and tracks that for the software, but not the packaging. So you won't see anything visual that indicates the sync as the package version will remain the same. + +> :choco-info: **Why doesn't Chocolatey upgrade the package version?** +> +> There is not always a one to one line up between package version and software version. The version of software you think you are based on the software telling you and what that software reports as the version in the registry are different many times, unfortunately. This makes it very difficlt to update a package version correctly. + +For example, for the longest time Google Chrome had a version number in the registry at 65.x when the version being displayed to users was at like 59.x. The packaging was at 59.x following what people note as the version based on what Google Chrome tells them. This is just one of many examples. + +> :choco-info: **Software version tracking assists in uninstallations where Chocolatey's autouninstaller is invoked.** + +If the software is an MSI, the Product Guid is used for managing uninstalls. Guess what typically changes on every upgrade? Yes, the Product Guid. So autosync is keeping track of the new ones as the software automatically upgrades. Without tracking that, if you were to say `choco uninstall googlechrome` without autosync and there was no `chocolateyUninstall.ps1` in the package, then the software could potentially be left on the system because Chocolatey's automatic uninstaller wouldn't have the right Product Guid and thus be unable to handle software uninstallation. + +### See It In Action + +![auto package creation/synchronize](/images/gifs/choco_business_features.gif) + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +### Options and Switches + +There are none - automatic sync just happens every run. + +### FAQ + +#### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, MSP, or Business). Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions contain a subset of the Business edition features. + +#### I'm a licensed customer, now what? + +It just works. + +#### How does it work? + +Chocolatey tracks applications that it installs, so it is able to keep up with those applications as they are upgraded and uninstalled, even outside of Chocolatey. + +#### Sync is not tracking upgrades to applications + +Currently, AutoSync does not support upgrades of the underlying synced Chocolatey Package to reflect new versions of synced software being installed. +Software installers have the following mechanisms to display their information, with no consistent standard: + +- Display Version in the registry (which isn't required and quite a few apps don't populate the field at all) +- Display Name as shown in Programs and Features +- Version field in the uninstaller registry + +Due to the fact that an installer version doesn't have to match the software version (Google's msi is a great example), and the consistency issues with where the information can potentially come from, Chocolatey cannot _reliably_ track application upgrades. diff --git a/src/content/docs/en-us/features/package-synchronization/index.mdx b/src/content/docs/en-us/features/package-synchronization/index.mdx new file mode 100644 index 00000000000..e4bc5b89f26 --- /dev/null +++ b/src/content/docs/en-us/features/package-synchronization/index.mdx @@ -0,0 +1,13 @@ +--- +order: 200 +xref: package-synchronization +title: Package Synchronization +description: Keep changes made to applications outside of Chocolatey in sync +--- +import Xref from '@components/Xref.astro'; + +Chocolatey maintains its own state of the world, while Windows maintains the state of Programs and Features. If an application is upgraded or uninstalled outside of Chocolatey, such as is the case with Google Chrome and its auto updating utility, Chocolatey open source doesn't know about the change. The synchronize features in licensed editions keep Chocolatey's state in sync with Programs and Features, removing possible system-installed state drift. + +* +* (currently Business edition only - check https://chocolatey.org/compare#compare for availability) +* \ No newline at end of file diff --git a/src/content/docs/en-us/features/package-synchronization/packages-to-programs.mdx b/src/content/docs/en-us/features/package-synchronization/packages-to-programs.mdx new file mode 100644 index 00000000000..10904cf9276 --- /dev/null +++ b/src/content/docs/en-us/features/package-synchronization/packages-to-programs.mdx @@ -0,0 +1,63 @@ +--- +order: 30 +xref: packages-to-programs +title: Packages to Programs (C4B) +description: Add an entry into Add/Remove programs for every package that is under Chocolatey management +--- +import Xref from '@components/Xref.astro'; + +## All Packages in Programs and Features + +In C4B, you can flip a switch and see all packages in Programs and Features, even those packages that don't have underlying native installers! This makes reporting back to legacy inventory reporting systems a snap. + +### Usage + +![All Packages in Programs And Features - if you are on https://docs.chocolatey.org/en-us/features/package-synchronization, see commented html below for detailed description of image](/images/features/features_packages_in_programs_and_features.png) + +{/* */} + +### Requirements + +* Chocolatey (`chocolatey` package) v0.10.7+. +* Chocolatey for Business (C4B) Edition. +* Chocolatey Licensed Extension (`chocolatey.extension` package) v1.10.0+. + +### Setup + +* `choco feature enable --name showAllPackagesInProgramsAndFeatures` + +### Options and Switches + + Global Feature Setting: + + * `showAllPackagesInProgramsAndFeatures` - Package Synchronizer's Packages In Programs And Features Synchronization - Show all packages in Programs and Features, not just packages that use a native installer. + +### FAQ + +#### How do I take advantage of this feature? + +You must have the [business edition of Chocolatey](https://chocolatey.org/pricing). Business editions are great for organizations that need to manage the total software management lifecycle. + +#### I'm a business customer, now what? + +Once you set the feature, it just works automatically. + +#### How does it work? + +Chocolatey tracks packages that manage natively installed software. For packages that are zip archives or configuration, Chocolatey will add an entry into Programs and Features based on the nuspec. It's smart enough not to add an entry for a meta-package - say `notepadplusplus` and `notepadplusplus.install` are installed. The meta-package would be `notepadpluplus`. + +### Packages in Programs and Features Known Issues + +* MSU type packages will show up - Chocolatey doesn't automatically track Windows Updates types of installers. So if you install WMF 5 through Chocolatey and turn this feature on, it will show up as well. +* You must run choco at least one more time after setting the feature for it to take effect. So flip the feature and then run `choco -v`. diff --git a/src/content/docs/en-us/features/package-synchronization/sync-command.mdx b/src/content/docs/en-us/features/package-synchronization/sync-command.mdx new file mode 100644 index 00000000000..a481c86dc0d --- /dev/null +++ b/src/content/docs/en-us/features/package-synchronization/sync-command.mdx @@ -0,0 +1,101 @@ +--- +order: 20 +xref: sync-command +title: Choco Sync Command (C4B) +description: Use choco sync to bring already installed applications under Chocolatey management +--- +import Xref from '@components/Xref.astro'; + +## Sync Command + +Starting in 1.9.0 of the licensed extension, sync has been added as a preview feature for organizations to try out. Currently Business edition only, but expected to be in Pro+ at some point - check https://chocolatey.org/compare#compare for availability. + +Sync looks at all software that is in Programs and Features that is not being managed with Chocolatey packages and brings them under management. This means you can run one command and suddenly, all of the software installed on a machine is under management by Chocolatey! + +### Usage + +To synchronize your system, Simply call `choco sync` and Chocolatey will ensure that all software in Programs and Features comes under Chocolatey management and provides you the packages/package sources so you can add them to source control for managing those packages over time. + +#### Setup + +At 1.9.0, sync is in preview. You need to turn it on by enabling the feature `allowPreviewFeatures`: + +* `choco feature enable --name allowPreviewFeatures` + +### See it in action + +We've prepared a short video to show sync in action: + +[![Chocolatey's Package Synchronizer - Sync Command](/images/features/sync-command-video.png)](https://youtu.be/tzSsYHYsjf4 "Chocolatey's Package Synchronizer - Sync Command") + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +In the following image, sync is run on a system that has 18 applications installed and a base Chocolatey for Business install. Note after running sync, all software on the machine is now being managed by Chocolatey. + +![Chocolatey's Package Synchronizer Sync Command - if you are on https://docs.chocolatey.org/en-us/features/package-synchronization, see commented html below for detailed description of image](/images/features/features_choco_sync.png) + +{/* */} + +### Options and Switches + +The following are available in the command. + +``` + --id=VALUE + Id - The Display Name from Programs and Features + + --out, --outdir, --outputdirectory, --output-directory=VALUE + OutputDirectory - Specifies the directory for the generated Chocolatey + package file(s). If not specified, uses a subdirectory of the current + directory. +``` + +### FAQ + +#### How do I take advantage of this feature? + +You must have the [business edition of Chocolatey](https://chocolatey.org/pricing). Business editions are great for organizations that need to manage the total software management lifecycle. + +#### I'm a business customer, now what? + +You would periodically run `choco sync`. + +#### How does it work? + +Chocolatey takes a look at all software in Programs and Features that is not under Chocolatey management, generates packages on the fly and baselines them under the Chocolatey install, ensuring all of the links are tracked. + +#### Do I get the packages to add to source? + +Yes! Chocolatey will tell you the location of the sync files so you can put them into source control. + +#### Some packages have a TODO list + +Generating packages on the fly from Programs and Features for non-MSI installers doesn't provide everything necessary to ensure an actual install. So when you take those packages back to source, you will need to finish out the packaging for those so that later when you upgrade, things will work appropriately. + +#### How do I get machine parseable output? + +Use `-r`. `choco sync -r`. + +#### What if I have an existing package that is just not tracking to Programs and Features? + +Synchronize can recognize existing packages and sync to those as long as the name of the package is a close match to the software name (e.g. Google Chrome becomes either google-chrome or googlechrome). + +### Sync Command Known issues + +* Any packages you've installed side by side (`-m`) will show up every time during sync. +* If you have both a 64-bit and 32-bit version of some software installed, sync will track to one on the first run and the other on the next run. This is not a normal scenario. \ No newline at end of file diff --git a/src/content/docs/en-us/features/package-throttle.mdx b/src/content/docs/en-us/features/package-throttle.mdx new file mode 100644 index 00000000000..d899a382b2f --- /dev/null +++ b/src/content/docs/en-us/features/package-throttle.mdx @@ -0,0 +1,88 @@ +--- +order: 190 +xref: package-throttle +title: Package Throttle (Pro+) +description: Use Chocolatey in low bandwidth environments +--- +import Xref from '@components/Xref.astro'; + +> Use Chocolatey in low bandwidth environments + +By default, Chocolatey downloads packages and any resources the packages use as fast as it can. In most cases, this is exactly the behavior you want. However, low bandwidth areas would be overwhelmed with this behavior and so you need to slow Chocolatey down. Package Throttle covers these low bandwidth scenarios automatically. + +## Usage + +Adding the option or config setting for maximum download rate will slow down the speed a package and any resources are downloaded to a particular machine. This is done in "bit per second" (b/s or bps), which is a common unit of data transmission rate (bandwidth) in computers. The symbol bps is often pronounced "bips." + +A good way to find what you need is to translate from Kbps to bits: [Google Kbps to bps](https://www.google.com/search?q=2+Kb/s+%3D+?+bps) or KB/s (bytes) to bits: [Google KB/s to bps](https://www.google.com/search?q=2+KB/s+%3D+bps). + +### Requirements + +* Chocolatey (`chocolatey` package) v0.10.7+. +* Chocolatey Licensed Edition. +* Chocolatey Licensed Extension (`chocolatey.extension` package) v1.10.0+. + +## See It In Action + +![Package Throttle downloading a package and resources - - if you are on https://docs.chocolatey.org/en-us/features/package-throttle, see commented html below for detailed description of image](/images/features/features_package_throttle.png) + +{/* */} + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Options and Switches + +Global Config Setting: + + * `maximumDownloadRateBitsPerSecond` - The maximum download rate in bits per second. '0' or empty means no maximum. A number means that will be the maximum download rate in bps. Defaults to ''. + + +`choco install` / `choco upgrade` provide the following option(s): + +```powershell + --bps, --maxdownloadrate, --max-download-rate, --maxdownloadbitspersecond, --max-download-bits-per-second, --maximumdownloadbitspersecond, --maximum-download-bits-per-second=VALUE + Maximum Download Rate Bits Per Second - The maximum download rate in + bits per second. '0' or empty means no maximum. A number means that will + be the maximum download rate in bps. Defaults to config setting of '0'. + Available in [licensed editions](https://chocolatey.org/compare). See https://chocolate- + y.org/docs/features-package-throttle +``` + +## FAQ + +### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, MSP, or Business) and use the community package repository to install/upgrade packages. Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions are for managed service providers and contain the same features as Pro (minus VirusTotal integration). + +### I'm a licensed customer, now what? + +It works to slow the download rate when you provide the maximum download rate as an argument or as a set feature. + +### How does it work? + +It sees a resource being downloaded and throttles the download to lower download speeds, ensuring it doesn't go over a set number of bits per second during the entire course of the download. + +### Package Throttle didn't slow down the downloads of resources in my package + +Package Throttle only works for resources downloaded with built-in Chocolatey PowerShell functions. It will not be able to slow down downloads using WebClient, and it's an anti-pattern in packaging to use WebClient anyways. + +### How do I turn this feature on? + +* Globally - `choco config set --name maximumDownloadRateBitsPerSecond --value ` +* Per command - use the option `--max-download-bits-per-second="''"` with install/upgrade commands. + +### How do I turn this feature off? + +* Globally - `choco config unset --name maximumDownloadRateBitsPerSecond` +* Per command - don't specify the `--max-download-bits-per-second` option (and don't have the config set) or `--max-download-bits-per-second="'0'"` if you want to temporarily disable it but keep the config setting. diff --git a/src/content/docs/en-us/features/powershell.mdx b/src/content/docs/en-us/features/powershell.mdx new file mode 100644 index 00000000000..ceb348deecd --- /dev/null +++ b/src/content/docs/en-us/features/powershell.mdx @@ -0,0 +1,29 @@ +--- +order: 20 +xref: packaging-for-the-masses +title: Packaging for the masses - PowerShell +description: At its heart, Chocolatey uses the Windows Automation Language, PowerShell, to perform its different operations +--- +import Xref from '@components/Xref.astro'; + +Released in November 2006, Windows PowerShell, quickly became the defacto way to automate tasks on Windows. Whether it was automating the creation of Users within Active Directory, or configuring/maintaining your Exchange Server, PowerShell was the way to do it. + +When Chocolatey started, it was clear that PowerShell was going to be at the heart of how it works as well, and that continues to this day. + +Within a Chocolatey package, there are three main PowerShell files: + +- chocolateyInstall.ps1 +- chocolateyUninstall.ps1 +- chocolateyBeforeModify.ps1 + +> :choco-info: **NOTE** +> +> Not all of these files are required within every Chocolatey package, as Chocolatey performs a number of tasks automatically, and overriding the default functionality is only required when you want to do something different. + +When a Chocolatey package is installed/uninstalled, these files are executed at , giving a full control over exactly what actions are performed within a package. + +This flexibility allows for the creation of simple packages (that simply execute a native installer) all the way up to highly complicated installations that perform several operations. + +On top of this, Chocolatey ships with a number of , to help with the specific tasks of installing applications, binaries, zips, and scripts. + +When you need to create your own custom PowerShell functions, Chocolatey provides the ability to create , to allow the sharing of code across multiple packages, rather than duplicating it. \ No newline at end of file diff --git a/src/content/docs/en-us/features/private-cdn.mdx b/src/content/docs/en-us/features/private-cdn.mdx new file mode 100644 index 00000000000..e5ce4d4aa7a --- /dev/null +++ b/src/content/docs/en-us/features/private-cdn.mdx @@ -0,0 +1,97 @@ +--- +order: 170 +xref: private-cdn +title: CDN Download Cache (Pro+) +description: No more 404s! +--- +import Xref from '@components/Xref.astro'; + +Chocolatey offers a customer CDN cache of download content for [customers](https://chocolatey.org/pricing)! The internet is unpredictable and sometimes sites go down, the cache ensures that the packages on the community repository are not broken by issues with the internet. We lovingly call this the "**No more 404s feature**". + +We do this by caching a copy of the content on our private CDN. This content also gets virus checked and checksummed to verify that it matches what was originally intended by package maintainers and moderators for you to receive. + +## Important Information for Software Vendors + +When our customers download content from you, we may cache a copy of that content on our customer CDN to ensure that later our licensed customers will be able to access that content again. This allows predictable and reliable installations of packages. Like most CDNs, no changes are made, we are simply ensuring the content stays available for our private customers. We are not modifying, selling, renting, leasing, lending, or sub-licensing this content in any way. + +This private content cache is **only** available as a service for our [licensed customers](https://chocolatey.org/pricing). + +If you have questions or **prefer to opt out**, please [contact us](https://chocolatey.org/contact) and select "Software Vendor Opt Out" (vendor requests only please). + +## Usage + +This is mostly automatic, but in case the feature is turned off, you may turn it on by setting the feature `downloadCache` (`choco feature enable --name downloadCache`). + +To see if a package has content cached on the CDN, you can run `choco info packagename` and it will give you detailed information pertaining to a package. + +![choco info packagename](/images/choco_info_cached.png) + +When you install, you will see a message similar to the following when the cached content is used: + +![Pro install with CDN cache](/images/choco_install_cached.png) + +## Options and Switches + +Global Feature: + +* `downloadCache` - Download Cache - use the private download cache if available for a package. + + +`choco install` / `choco upgrade` provide the following option(s): + +``` + --sdc, --skipdownloadcache, --skip-download-cache + Skip Download Cache - Use the original download even if a + private CDN cache is available for a package. + Overrides the default feature 'downloadCache' set to 'True'. Licensed + versions only. + + --dc, --downloadcache, --download-cache, --use-download-cache + Use Download Cache - Use private CDN cache if + available for a package. Overrides the default feature 'downloadCache' + set to 'True'. Licensed versions only. +``` + +## FAQ + +### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, MSP, or Business) and use the community package repository to install/upgrade packages. Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions are for managed service providers and contain the same features as Pro (minus VirusTotal integration). + +### I'm a licensed customer, now what? + +When you install packages from the community repository and a private cache becomes available, it will use that cache automatically. You don't have to do anything additional. + +### How do I turn this feature on? + +* Globally - `choco feature enable --name downloadCache` +* Per command - use the switch `--use-download-cache` with install/upgrade commands. + +### How do I turn this feature off? + +* Globally - `choco feature disable --name downloadCache` +* Per command - use the switch `--skip-download-cache` with install/upgrade commands. + +### Is the content modified? + +No, this is the original content as it would have been downloaded. + +### Is the content publicly available? + +No, this is a private CDN cache available only for [licensed customers](https://chocolatey.org/pricing). + +### Why isn't a cache available for x package? + +There are a variety of factors that go into suitability for a package. + +* If the software vendor has opted out, there will be no cache for a package that uses that software. +* If the package doesn't actually download anything, there will be no cache. +* If the package downloads resources, but not in the recommended way, there may not be a cache available. + +### Does this grant me a license to the software? + +No, you still need to work with the software vendor to obtain a license, if required. + +### I'm a vendor and wish to opt out. + +Please see [important information for software vendors](#important-information-for-software-vendors). diff --git a/src/content/docs/en-us/features/self-service-anywhere.mdx b/src/content/docs/en-us/features/self-service-anywhere.mdx new file mode 100644 index 00000000000..b49fffdf5b9 --- /dev/null +++ b/src/content/docs/en-us/features/self-service-anywhere.mdx @@ -0,0 +1,265 @@ +--- +order: 90 +xref: self-service-anywhere +title: Self Service Anywhere (C4B) - Support modern workforce +description: Install packages as a non-administrator user +--- +import Xref from '@components/Xref.astro'; + +## Summary + +> Empower your users and give your IT folks the precious gift of time to invest into taking your organization to the next level! + +The Chocolatey Agent service allows you to go further with your software management, bringing Chocolatey to desktop users in organizations that have controlled environments. This provides users in controlled environments more empowerment and instant turn around on required software. This frees up IT folks and admins time to spend on making the organization even better. + +The Chocolatey agent enables multiple features: + +* The Background Service, aka Self-Service Anywhere +* Conmmunication to Chocolatey Central Management (CCM) + * Reporting information to CCM + * Deployments from CCM (endpoint management tasks) + +The Chocolatey Agent can be independently configured to support any or all of these modes of operation independently. + +## Chocolatey Background Service / Self-Service Installer + +When an administrator installs the agent, they can configure Chocolatey to use background mode so that non-administrators can still perform installations of approved software as configured by an administrator. + +Why this is desirable: + +* Users do not need to be administrators but are still empowered to install and upgrade software (functions are configurable with Chocolatey Extension v1.12.4+) +* Users can **only** run install and upgrade in an administrative context by default. This is configurable to other commands as of Chocolatey Licensed Extension 1.12.4+.. +* Shortcuts, desktop icons, etc created through Chocolatey functions will end up with the proper user (still coming). +* Users can only install approved software based on admin configured sources. +* This frees up precious IT bandwidth to work on other engagements. +* Empowers users, so they feel more in control. + +This makes for happy users and happy admins as they are able to move quicker towards a better organization. + +### Background Service Restricted Options + +> :choco-info: **NOTE** +> +> The restricted options cannot be customised at this time. We will add this ability in upcoming versions. +> +> The options restrictions affect the following versions of Chocolatey Agent and Chocolatey Licensed Extension: +> +> | Product | Versions Affected | +> |------------------------------ |--------------------------------------------------------------- | +> | Chocolatey Agent | 1.1.3 and later 1.x versions, and 2.1.1 and later 2.x versions | +> | Chocolatey Licensed Extension | 5.0.4 and later 5.x versions, and 6.1.1 and later 6.x versions | + + +Chocolatey CLI allows a number of different options that can be used to configure package management when using the Background Service. To help minimise issues and improve security, the following options, along with their aliases, cannot be used in Chocolatey CLI or Chocolatey GUI when using the Background Service: + +* Added in Chocolatey Agent 1.1.3 / 2.1.1 and Chocolatey Licensed Extension 5.0.4 / 6.1.1: + * `--cache-location` + * `--install-arguments` + * `--not-silent` + * `--install-args-global` + * `--install-arguments-sensitive` + * `--install-directory` +* Added in Chocolatey Agent 1.1.4 / 2.1.2 and Chocolatey Licensed Extension 5.0.5 / 6.1.2: + * `--allow-empty-checksums` + * `--allow-empty-checksums-secure` + * `--download-checksum` + * `--download-checksum-x64` + * `--from-programs-and-features` + * `--ignore-checksums` + * `--override-arguments` + * `--proxy` + * `--proxy-bypass-list` + * `--proxy-bypass-on-local` + * `--skip-virus-check` + * `--uninstall-arguments` + * `--uninstall-arguments-sensitive` + * `--use-system-powershell` + * `--virus-positives-minimum` + +### See It In Action + +* Chocolatey's Self-Service Installer - Part 1: + +[![Chocolatey's Self-Service Installer - Part 1](/images/features/features_selfservice_video1.jpg)](https://www.youtube.com/watch?v=Thw9GpQaZ6M "Chocolatey's Self-Service Installer - Part 1") + +* Chocolatey's Self-Service Installer - Part 2: + +[![Chocolatey's Self-Service Installer - Part 2](/images/features/features_selfservice_video2.jpg)](https://www.youtube.com/watch?v=BnnAwFftUwU "Chocolatey's Self-Service Installer - Part 2") + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +Consider the following image: + +![Attempting to install software as non-admin - if you are on https://docs.chocolatey.org/en-us/features/self-service-anywhere, see commented html below for detailed description of image](/images/features/features_non_admin_installer.png) + +{/* */} + +This is the status quo for a non-administrative user. Can't install software without the help of an administrator. That takes up time, time for both the user waiting to get work done and the IT admin that performs the work. + +Now, how does that change once we have background mode? + +![Installing software with Chocolatey's background mode from the command line. - if you are on https://docs.chocolatey.org/en-us/features/self-service-anywhere, see commented html below for detailed description of image](/images/features/features_non_admin_selfservice.png) + +{/* */} + +Once you've configured background mode and configured approved sources for installation, a user can install only those approved applications using the command line or the Chocolatey GUI. + +Now, if a user wants to install from a non-approved source, they are met with the following message: +![Not able to install from custom source](/images/features/features_non_admin_custom_source_error.png) + +This ensures non-admin users can only install from sources that you configure. + +## Scenarios With Self-Service + +We'll add more scenarios as we come across them from questions, etc. This is meant to address situations you might find yourself in and how best to apply recommendations work through them. + +### Managing Very Large Installation Media + +If you are managing something like SQL Server, Office, or Autodesk, you may already know you need to split the binaries away from the Chocolatey packaging. Where do you put it and how can you ensure it can be installed with background service? + +#### Option 1 - Binary/Raw Repository + +You can store big binaries in a raw/binary repository that comes with the following repository servers: Nexus, Artifactory, and ProGet. You could also just put things on a web host that gives bare downloads when accessed. + +**Pros:** +* Very reliable - once files are in the binary/raw repository, moving them around would require being very intentional. Since the binary/raw repository sits directly next to the Chocolatey package repositories, they are going to work well together. +* Low maintenance - you don't need to remember to add new computers to any AD groups. +* Could be accessed anywhere - aside from open credentials being necessary right now, once that is adjusted in Chocolatey itself, this would allow you to get to the installation media from anywhere in the world if you chose to open it up that way. + +**Cons:** +* Initial setup - it will take a moment to get this setup, but it can be done really fast if you already followed Chocolatey recommendations on using Nexus, Artifactory, or ProGet for your repository needs. +* No credentials on binary/raw repository - The Chocolatey built-in functions like `Get-ChocolateyWebFile` don't have the ability to directly pass credentials yet. +* Requires a local download - if the installation media is big enough, you may prefer installing from a network share and not want to download the components first to each machine. + +#### Option 2 - File Share + +You may choose that you want to store files on a network share as that is where you may have a lot of your installation media currently and you don't want to set up somewhere else that you would need to duplicate what is already done. + +Just like in the cases of Puppet, Chef, or other things that run under a Windows Service, the account that runs the Chocolatey Agent by default is a local Windows account. So it is not going to have permission to see a file share by default. There are two methods you can employ to handle this situation. + +Pick from one of two different methods: + +1. Use a LDAP account for the service - you can always run the service under a different user. See . +1. Give the computer read access to the share - If you are on Active Directory, you can add all computers to a global group and give that group read access to the share. This requires being explicit on that with no nesting. See . + +**Pros:** +* Easy setup - you are simply creating a file share. +* Enables network installs - no need to download anything locally. + +**Cons:** +* Not very reliable - If a file gets deleted, renamed, or moved, you now have a broken package you need to go fix. This could happen simply as the files here may be dual-purposed and other folks don't realize they are breaking your packages. You must be diligent in here that you don't mess things up. +* Can not be used outside of network - if you have clients that need to install packages but are outside your network, they are going to fail. +* Method 2 requires maintenance - every time you add new computers you need to remember to explicitly add them to the AD global group. + +#### Option 3 - File Share Managed Outside of Self-Service + +If you are unable to use one of the two methods to gain access to the file share, your last option is really to manage those packages that have the bigger binaries outside of self-service. + +* Make sure you have the feature `useBackgroundServiceWithSelfServiceSourcesOnly` enabled. +* Create another Chocolatey/NuGet repository and put those non-self-service useable packages in that repository instead. +* When configuring that source on your machines, don't add the `--allow-self-service` to that repository. That repository is now invisible to self-service and won't be considered whenever referring back to the background service. + +**Pros:** +* Same Pros as in Option 2. Additionally: +* Packages being managed separately will be skipped automatically on upgrade all. + +**Cons:** +* Same Cons as seen in Option 2. Additionally: +* You must manage installs/upgrades separately. +* Still can't manage it with other infrastructure management / endpoint management tools either - most tools, like Puppet, Chef, possibly SCCM, are still going to have trouble seeing that file share. Unless of course you have given those Windows services an account that has network share access. + +#### Recommendation + +When you can, prefer option 1 (Binary/Raw Repository). This gives you the most flexibility. However depending on your needs, you may see a combination of any of the above. + +### Managing Non-Silent Installers + +Sometimes you come across non-silent installers. These are things that occur that would block an install/upgrade from finishing until there is a user interaction, like a pop-up or opening a browser and directing to a site. And it doesn't matter what you pass for silent arguments, the installer will still present these user interactions. + +With Chocolatey, like with other deployment or endpoint management tools, an installer must be made completely silent/unattended to work in automated deployment scenarios. + +#### Option 1 - MSI Repackaging + +The best way to handle installers that do not play nice is called MSI repackaging (records installation and produces an MSI you use instead). MSI repackaging technology has been around for about 20 years and once you have that produced MSI, it will work in all deployment scenarios. + +**Pros:** +* Produced MSI can be used in all automation scenarios - works with any deployment scenario, including those that are run by a Windows service. +* Produced MSI is solid - there are unlikely to be issues with deploying this in any environment. +* Not much learning required to create MSI - depending on what tool you use for MSI repackaging, it's really easy to do. +* You can trust produced MSI - you created it, you know nothing is gonna hack your environment with specially crafted scripts in the MSI. +* Can be done reasonably quickly - it doesn't take a lot of time to run MSI repackaging once you are set up, you might want to use a clean VM with a snapshot you can go back to after each time you complete. + +**Cons:** +* You must repackage for each new version of the software +* Media is not the same as the original - what you actually deploy is not the same as the original installation media. +* No examples to look at - read more below. +* Produced binaries still subject to distribution rights - however if you are keeping everything internal, you never need to worry about this. You just can't share what you've done on something like the community repository as it is public. + +> :choco-info: **NOTE** +> +> Unfortunately you are unlikely to find any packages on the Chocolatey Community Repository that are able to take advantage of MSI repackaging - this is due to both distribution rights and verification/security. + +* Redistribution of installation media often requires permission - that would include anything that mimics what is done (like the produced MSI). +* Then verification and security - even if redistribution is allowed, you step into trust and verification of this unknown binary that moderators and the community at large are unlikely to trust. When you are doing MSI repackaging internally and housing the bits on your internal repo, you can typically more fully trust what you are doing there versus some random maintainer on the internet doing similar. + +#### Option 2 - Use Chocolatey Software's Professional Packaging Support Services + +When you are customer, you can engage with Chocolatey Software to create the MSI for you for a flat rate fee. + +**Pros:** +* Same Pros as in Option 1. Additionally: +* Easy - you hand off the media to our team and you get an MSI and Chocolatey package back. +* Affordable - there is a flat rate fee associated. So you pay the same price whether it takes our team 2 hours or 5 days. +* Turnaround is fast - depending on the queue, you can have something in your hands in less than two weeks. +* Built by Chocolatey - these MSIs are produced by our team, so you can trust that it's not someone random person out there making these. + +**Cons:** +* Same Cons as in Option 1. Additionally: +* Turnaround time is 5-10 business days - if you need something in a rush, you may need to complete Option 1. +* Requires prepayment - you must pay for this in advance. +* Each version counts as a use - each time you reach out, including having upgrades for a piece of software, counts as an engagement and is subject to the fee. + +#### Option 3 - Window Automation Scripting + +There are tools like Autohotkey (AHK) and AutoIT that can handle the user interaction for you. The bonus is that you get to use the original installation media and have a script that handles all of the failure points for the non-silent installer. + +**Pros:** +* Uses original installation media - the script clicks the buttons or closes the windows for you +* Script may work with newer versions - the script may not require any updating whenever newer versions of software come out. +* Examples may already exist - the community package repository can use this method to automate badly behaved installers b/c the original installation media is being used. + +**Cons:** +* Requires interactive session - will fail as soon as you have a Windows service attempt to run this in a headless operation. +* Requires learning the automation scripting syntax - if you dislike learning new tools, you will find this an issue. +* Can be fragile - whenever you have tools that are clicking on buttons for you, depending on how the scripts are written, can still be fragile. + +#### Recommendation + +MSI repackaging is always preferred. At the end of creating that, you have something that can be deployed silently with any method you prefer to deploy it with. + +## Chocolatey Central Management + +Chocolatey for Business has centralized reporting and supports endpoint management through . On machines that will take advantage of CCM, you will need the Chocolatey Agent installed and properly configured to manage them centrally. + +For more information on Central Management, please see . diff --git a/src/content/docs/en-us/features/shim.mdx b/src/content/docs/en-us/features/shim.mdx new file mode 100644 index 00000000000..a622531b51e --- /dev/null +++ b/src/content/docs/en-us/features/shim.mdx @@ -0,0 +1,131 @@ +--- +order: 80 +xref: shim +title: Executable shimming (like symlinks but better) +description: Information on how Chocolatey creates shims to installed executables +--- +import Xref from '@components/Xref.astro'; + +Shimming is like symlinking, but it works much better. It's a form of redirection, where you create a "shim" that redirects input to the actual binary process and shares the output. It can also work to simply call the actual binary when it shims GUI applications. + +We like to call this "batch redirection that works". + +This also allows applications and tools to be on the "PATH" without cluttering up the PATH environment variable. + +## Benefits + +These are the benefits of creating a shim: + + * Provides an exe file that calls a target executable. + * Runs the target executable where it is, which means all dependencies and other things used are all in the original location + * When items require elevated privileges, shims will raise UAC prompts. + * The exe can be called from powershell, bash, cmd.exe, or other shells just like you would call the target. + * Blocks and waits for command line apps to finish running, exits immediately when running a GUI app. + * Uses the icon of the target if the target exists on creation. + * Works better than symlinks. Symlinks on Windows fall down at file dependencies. So if your file depends on other files and DLLs, all of those need to also be linked. + * Does not require special privileges like creating symlinks (symbolic links) do. So you can create shims without administrative rights. + +## Usage + +Chocolatey automatically shims executables in package folders that are not explicitly ignored, putting them into the `"$($env:ChocolateyInstall)\bin"` folder (and subsequently onto the PATH). This typically resolves to `C:\ProgramData\chocolatey\bin` unless you customized your install options or a non-administrator install. + +These executables can come as part of the package or downloaded to the package folder during the install script. + +Chocolatey ensures the folder `"$($env:ChocolateyInstall)\bin"` in the PATH environment variable, allowing you to put tools on the PATH without cluttering up the PATH. + +## See It In Action + +![Shimming - if you are on https://docs.chocolatey.org/en-us/features/shim, see commented html below for detailed description of image](/images/features/features_shimgen.png) + +{/* */} + +## Options and Switches + +You pass these arguments to an executable that is a shim (e.g. executables in the bin directory of your Chocolatey install, not choco.exe): + + * `--shimgen-help` - shows this help menu and exits without running the target + * `--shimgen-log` - logging is shown on command line + * `--shimgen-waitforexit` - explicitly tell the shim to wait for target to exit - useful when something is calling a gui and wanting to block - command line programs explicitly have waitforexit already set. + * `--shimgen-exit` - explicitly tell the shim to exit immediately. + * `--shimgen-gui` - explicitly behave as if the target is a GUI application. This is helpful in situations where the package did not have a proper .gui file. + * `--shimgen-usetargetworkingdirectory` - set the working directory to the target path. Useful when programs need to be running from where they are located (usually indicates programs that have issues being run globally). + * `--shimgen-noop` - Do not actually call the target. Useful to see what would happen if you ran the command. + +## FAQ + +### How do I take advantage of this feature? + +This works with all versions of Chocolatey. Just use packages and when those packages have exe files, those are automatically shimmed so they are on the PATH. + +### How does it work? + +Chocolatey uses a tool called ShimGen that inspects an executable and creates a small binary, known as a "shim", that simply calls the executable. Then it places that shim in the `"$($env:ChocolateyInstall)\bin"`. It creates the shim by generating it at runtime based on the actual binary's information. + +### How is this better than symlinks? + +When you symlink a file on Windows, you must symlink all of its dependencies like dlls and config files. If you put that all into the `"$($env:ChocolateyInstall)\bin"` folder to take advantage of being on the PATH, you can quickly see that you will get into a form of "DLL hell" when other executables depend on different versions of the same DLL. You would also need to symlink folders and files for things like plugins, extensions, skins, and other things that are in the original directory. If you are trying to create a symlink to not add more locations to your PATH environment variable, then this particular shortcoming defeats that purpose entirely. + +Shimming by design does not run into this issue. + +### Does it require admin rights? + +No, and this is another thing that sets it apart from symlinks. To create symlinks on Windows, you need to have `SeCreateSymbolicLinkPrivilege`, which is one of the privileges granted to Administrators. + +### Does the shim work with UAC? + +Yes! When a shim detects that elevation is required, it will automatically request elevation. + +### Why not simple batch redirection? + +We tried using batch ("*.bat") files, and it mostly works, but when applications calling other applications expect the file name to be ".exe", a file named "*.bat" doesn't work. Batch files also don't work in all shells, and shims do. + +### Have you thought about shimming in more places? + +Yes, but we have not decided whether shimming Program Files is a good idea yet or not. Packages can explicitly enforce shims with . + +### I need to shim a non-exe file. + +If you are creating a package and you need to shim a file that doesn't end in .exe (like a .bat file), you should look at . + +### I need to exclude a file from shimming. + +If you are creating a package and you want to skip creation of a shim for a particular file, you can create a "*.ignore" file. + +Set an empty file next to the executable (or where it will be downloaded/unpacked to), sharing the same name with the executable and appending ".ignore". For example, if your file is named "`bob.exe`", you need a file named "`bob.exe.ignore`" (pay attention to case - "`BOB.exe.ignore`" may not work with all versions of Chocolatey). + + + +### I have architecture specific binaries to shim + +If you are creating a package where you have two binaries (or sets of binaries) to shim depending on architecture, one for x86 and one for x64, you can put them in sub-folders and the correct one(s) will be shimmed. + +Specifically, include 32-bit binaries in "`tools\x86`" and 64-bit binaries in "`tools\x64`". + +This may eliminate the need to include a "`chocolateyInstall.ps1`" in the package to create "`.ignore`" files for the other architecture. + +### How can I ensure a GUI shim? + +Chocolatey will automatically detect GUI applications and adjust the shim accordingly. The detection may not always be accurate, and older versions of Chocolatey don't handle this, so it's best to create a "*.gui" file to direct the shim creation to be for a GUI application. + +If you are creating a package and want the shim to exit immediately after calling the application, create an empty "*.gui" file next to where the exe file is (or where it will be downloaded/unpacked to), sharing the same name with the executable and appending ".gui". For example, if your file is named "`bob.exe`", you need a file named "`bob.exe.gui`" (pay attention to case - "`BOB.exe.gui`" may not work with all versions of Chocolatey). + + + +### A package messed up and should have set up a shim as a GUI. + +Call the shim with `--shimgen-gui` to target the correct behavior. + +### An executable requires being run from the folder where it actually is. + +Call the shim with `--shimgen-usetargetworkingdirectory`. There are badly behaved applications that don't run well from anywhere, and they require some extra help so they will run correctly. diff --git a/src/content/docs/en-us/features/virus-check.mdx b/src/content/docs/en-us/features/virus-check.mdx new file mode 100644 index 00000000000..2e479328610 --- /dev/null +++ b/src/content/docs/en-us/features/virus-check.mdx @@ -0,0 +1,162 @@ +--- +order: 160 +xref: virus-check +title: Runtime Malware Protection (Pro+) +description: Virus checking via VirusTotal or Generic scanner +--- +import Xref from '@components/Xref.astro'; + +We are pleased to offer runtime malware protection for our [customers](https://chocolatey.org/pricing)! +Virus checking is available in two flavors - VirusTotal and Generic malware verification. + +Both forms of virus scanning will only scan files **downloaded** from an external source during the package installation process. +Packages which embed the software binaries will not have their binaries scanned by Chocolatey during installation. + +## Usage + +When a binary is not flagged: + +![Virus scan pass](/images/virus_scan_normal.png) + +When a binary is flagged: + +![Virus scan failure](/images/virus_scan_flagged.png) + +### VirusTotal + +We've teamed up with the amazing [VirusTotal](https://virustotal.com/) to offer a second opinion to your built-in anti-virus solution. When your packages download content from the internet, Chocolatey CLI will automatically check the executables prior to running any content. If a certain number of positives have been identified (configurable), Chocolatey CLI will fail the install automatically (but can be overridden). + +VirusTotal scans binaries against over 50 different anti-virus scanners. Chocolatey CLI will use the information based on sending a SHA256 checksum of the binary to VirusTotal and evaluating what the scans have determined. + +By default, the virus scanner is already enabled and set to VirusTotal for Pro licenses. Organizations are usually more wary about reaching out to the internet, so the feature is set to Generic and the virus scanner may not be enabled by default (because it needs configuration). If you need to configure the virus scanner to use VirusTotal, please run the following two commands: + +> :choco-warning: **WARNING** +> +> If package contents are not recognized by VirusTotal they may be uploaded to be scanned, and be viewable in public. If you package internal components we do not recommend you enable this feature with the VirusTotal `virusScannerType`. + + * `choco config set --name virusScannerType --value VirusTotal` + * `choco feature enable --name virusCheck` + +Because some scanners can be quite aggressive and may falsely identify a binary as a false positive for malware, Chocolatey CLI doesn't flag a binary until a certain number of scanners have identified the binary as malware. This number defaults to `5` in the configuration. This means 5 anti-virus scanners need to flag the binary for Chocolatey CLI to stop and fail the install or upgrade. You can adjust this value in two ways, by adjusting the configuration and per Chocolatey CLI command. + +To adjust the configuration value, which will globally set the number, please run the following replacing `##` with the value you want as a minimum: + + * `choco config set --name virusCheckMinimumPositives --value ##` + +If you need to override the minimum number of positives just for one install or upgrade, you can do that by passing `--virus-positives-minimum=VALUE` with your install or upgrade commands. + +### Generic + +If you are an organization, and you do not want to reach out to the internet for virus scan verification, you will want to take advantage of hooking Chocolatey CLI up to your existing AV solution. + +Chocolatey CLI will just need to know the full path to the anti-virus command line executable, the arguments to pass, and valid exit codes (comma separated). +Then you will get the same benefit of runtime virus checking as an added benefit on top of the protection it is already providing. + +If you need to configure the virus scanner to use your built-in anti-virus solution, please run the following two commands: + + * `choco config set --name virusScannerType --value Generic` + * `choco config set --name genericVirusScannerPath --value "full path to av command line"` + * `choco config set --name genericVirusScannerArgs --value "[[File]]"` + * `choco config set --name genericVirusScannerValidExitCodes --value "0, ##"` + * `choco feature enable --name virusCheck` + +The `genericVirusScannerPath` should be the full path to the anti-virus command line executable. What we are looking for is the command line interface to the scanner. + +In `genericVirusScannerArgs`, these are the arguments that Chocolatey CLI will pass to the anti-virus console. Chocolatey CLI will automatically replace `[[File]]` with the full path to the binary that it is scanning. + +In `genericVirusScannerValidExitCodes`, these are exit codes that indicate that a binary is okay. This defaults to `0`, but you can configure this with as many exit codes as necessary by adding them to the configuration as comma separated values. + +#### Windows Defender Example Configuration + +```powershell +choco config set --name="'virusScannerType'" --value="'Generic'" +choco config set --name="'genericVirusScannerPath'" --value="'C:\Program Files\Windows Defender\MpCmdRun.exe'" +choco config set --name="'genericVirusScannerArgs'" --value="-Scan -ScanType 3 -File '[[File]]'" +choco config set --name="'genericVirusScannerValidExitCodes'" --value="'0'" +choco feature enable --name="'virusCheck'" +``` + +## See It In Action + +![Pro install in action](/images/gifs/chocopro_install_stopped.gif) + +> :choco-info: **NOTE** +> +> To see all feature videos for Chocolatey for Business, please visit https://chocolatey.org/resources/features#c4b. + +## Options And Switches + +The following options are added to install and upgrade commands. + +``` + --svc, --skipvirus, --skip-virus, --skipviruscheck, --skip-virus-check + Skip Virus Check - Skip the virus check for downloaded files on this ru- + n. Overrides the default feature 'virusCheck' set to 'True'. Licensed + versions only. + + --virus, --viruscheck, --virus-check + Virus Check - check downloaded files for viruses. Overrides the default + feature 'virusCheck' set to 'True'. Licensed versions only. + + --viruspositivesmin, --virus-positives-minimum=VALUE + Virus Check Minimum Scan Result Positives - the minimum number of scan + result positives required to flag a package. Used when + virusScannerType is VirusTotal. Overrides the default configuration + value 'virusCheckMinimumPositives' set to '5'. Licensed versions only. +``` + +## FAQ + +### How do I take advantage of this feature? + +You must have a [licensed edition of Chocolatey](https://chocolatey.org/pricing) (Pro, Business, or MSP). Pro is a personal, named license that costs about the price of a lunch outing per month and comes with several other features. Business editions are great for organizations that need to manage the total software management lifecycle. MSP editions contain a subset of the Business edition features. MSPs are only able to use the Generic Virus Scanner. + +### I'm a licensed customer, now what? + +> :choco-warning: **WARNING** +> +> If package contents are not recognized by VirusTotal they may be uploaded to be scanned, and be viewable in public. If you package internal components we do not recommend you enable this feature with the VirusTotal `virusScannerType`. + +When you install a package that download content, those items will automatically be verified if the feature is turned on (it is automatically turned on for Pro users). We don't turn it on automatically in Business editions because many organizations are wary about reaching out to the internet and the generic virus scanner requires additional configuration. + +### How do I turn this feature on? + +> :choco-warning: **WARNING** +> +> If package contents are not recognized by VirusTotal they may be uploaded to be scanned, and be viewable in public. If you package internal components we do not recommend you enable this feature with the VirusTotal `virusScannerType`. + +* Globally - `choco feature enable --name virusCheck` +* Per command - use the switch `--virus-check` with install/upgrade commands. + +You need to provide additional configuration if you are using the Generic virus scanner. + +### How do I turn this feature off? + +* Globally - `choco feature disable --name virusCheck` +* Per command - use the switch `--skip-virus-check` with install/upgrade commands. + +### How do I override the minimum number of positives? + +* Globally - `choco config set --name virusCheckMinimumPositives --value ` +* Per command - use the option `--virus-positives-minimum=` with install/upgrade commands. + +### How does the VirusTotal integration work? + + * After a download, Chocolatey CLI will check a file against Virus Total's scan engines to determine how safe the file is as a secondary check to the virus scanner you may already have running. + * If there are existing scan results, it will determine based on the number of positives whether the file is likely safe or not (you can adjust the minimum positives number up or down). + * If the number is over the minimum positives, it will require you to make the determination on the safety of the file. In other words, it will protect you by failing the install, but it will give you instructions on how to override Chocolatey CLI. + * If Chocolatey CLI doesn't find a virus scan has been completed before, it will ask you if you want to upload the file. It will default to no (some users will have things they don't want pushed publicly). + * Whether or not you choose to upload a file when no scan is found, the virus check will fail the install as a matter of protection. Chocolatey CLI will not make the determination if you got the file you were supposed to get from the source you thought you were getting it from, so it errors on the side of caution. + * A scan across all the engines can take a while, so it will fail with an error and notes on how you can move forward immediately if you trust the file. Virus scans can take up to 15 minutes, so it will request you try again in about 15 minutes. + +### How does VirusTotal verify the binary? + +Chocolatey CLI gets the binary's signature by getting a SHA256 checksum of the binary. A SHA256 checksum is extremely secure and accurate, SHA256 has not been broken. It then submits that value to VirusTotal to see if there are pre-existing results. If there are, due to the checksum, the file is **the *exact* same binary**. Then Chocolatey CLI inspects the results and determines if the file is safe or if it should fail. + +### What if VirusTotal doesn't have results for a binary? + +Chocolatey CLI will ask if you want the binary submitted to VirusTotal to be scanned (if the file is under 500MB). Then it will upload the binary their servers, ask you to try the install again in 15 minutes and fail the install. If this is running as a script, the question will time out after 30 seconds and default to no upload. + +### Do you have plans to offer better integration with particular anti-virus scanners? + +Yes! If you are considering or have a business edition of Chocolatey, please let us know what you need, and we can get that scanner on the list. There are so many virus checking solutions and a generic scanner provides the best opportunity to serve all of them. diff --git a/src/content/docs/en-us/getting-started.mdx b/src/content/docs/en-us/getting-started.mdx new file mode 100644 index 00000000000..79c941dbd79 --- /dev/null +++ b/src/content/docs/en-us/getting-started.mdx @@ -0,0 +1,203 @@ +--- +order: 70 +xref: getting-started +title: Getting Started +description: Introduction to Chocolatey +--- +import Xref from '@components/Xref.astro'; + +## What is Chocolatey? + +Chocolatey is a software management solution unlike any you've ever experienced on Windows. Think of it like this - you create a software deployment package using a little PowerShell, then you can deploy it anywhere you have Windows with everything (like Puppet, SCCM, Altiris, Connectwise Automate, etc). + +> Write your deployment once for any software, then deploy it with any solution everywhere you have Windows. + +You know those massively complicated, complex, and expensive software management solutions where you typically need to buy more machines and hire consultants to help you configure/maintain them? Yeah, [that's not us](#requirements). We believe in simple solutions to complex problems. Software on Windows is already complex enough, we've designed our tools to be able to be simple to use, extremely powerful, flexible to fit nearly any situation, to work with your existing infrastructure, and for scale. And the best part is you can take advantage of Chocolatey without any cost (yes, even internally for an organization)! + +### Features + +* **Deploy Anywhere You Have Windows**/**Cloud Ready** (except Nano, sorry little buddy!). Yes, that includes Server.Core and [Windows Docker Containers](https://github.com/Microsoft/vsts-agent-docker/blob/f870fbf259a803c6a6d902e1c01f631936069d66/windows/servercore/10.0.14393/standard/VS2017/Dockerfile). Windows 7+/Windows 2003+ (although, we have been scaling down on 2003. I mean, 2003 is a bit long in the tooth, but some customers are still using it). Requires PowerShell v2+ (not PowerShell 6 yet - you're doing amazing if you are already on this, but give us some time) and Microsoft .NET Framework 4.x. You can deploy on prem, to Azure, AWS, or any cloud provider you might be looking at. +* **Deploy with Everything.** Anything that can manage endpoints or do remote deployments can either direct Chocolatey through commands, batches, or scripts. Full configuration management solutions like Ansible, Chef, PowerShell DSC, Puppet or Salt typically have providers/modules that allow you to work within their languages to manage both Chocolatey installation/configuration and software. +* **All Software Is a First Class Citizen.** You know how for most things, they only manage/report on the things installed in Add/Remove Programs (Programs and Features)? We count it all, because Windows software is more than just installers, and they all have security findings. So deploy your installers, your scripts, zips, runtime binaries, and yes, internal software all with one simple solution. Then lean on the reporting and inventory to be aware of all aspects of software you are managing. +* **Packages are Independent and Portable.** When you deploy through multiple systems or want to migrate from one to another, you can take the work you've done with Chocolatey with you. How is that for some major time-savings? +* **Test Your Deployments.** When's the last time you tested that deployment script you wrote for SCCM? Write it as a Chocolatey package instead and then you can test your infrastructure to be more comfortable when you push that change out to your constituents. +* **Completely Offline and Secure.** Chocolatey has zero call home, requires no network access to use (although we recommend for ease of management, you at least have internal network access!). Chocolatey does come with a default source that is the community repository. Turn that off and set up your own sources (FOR FREE). See our to get started (it even has scripts!). +* **Create Your Own Deployment Packages** (FOR FREE) and, get this, **use them internally** (FOR FREE). Get started as simply as `choco new ` and then check out the "just in time" documentation interweaved right into the output! +* **PowerShell Automation.** You know those little scripts you've been writing for software deployments for years? Welcome to a breath of fresh air, you are going to love Chocolatey! +* **Manage Dependencies With Ease.** You ever have a very complex, specific installation order? It becomes suddenly very easy when you are using a package manager like Chocolatey. Then you can concentrate on harder problems, like what flavor to add to your coffee today. +* **Open Source Licensing Is Ready for Business.** We have [Apache v2 licensing](https://github.com/chocolatey/choco/blob/master/LICENSE), no special restrictions need apply. Our commercial options come with a more business friendly [Software License agreement](https://chocolatey.org/support#business-legal) (and yes, we do have a redline format). +* **Commercial Options Add Support + AMAZING Features.** Our top of the line [Chocolatey for Business (C4B) edition](https://chocolatey.org/compare#compare) includes over 20+ features that take Chocolatey to the next level and make it a full software management solution and not just a package manager. Go ahead, right click on an installer and create a fully unattended software deployment in 5 seconds! If you have any issues, our support team is ready and waiting to help you move forward. +* **Customers Help Define Our Work.** We determine and prioritize our work based on where customers want things to go. We are building a platform, and we are working with you to make it better. +* **Security Is Our Focus.** Take a stroll through our . With everything we design, we focus on simplicity, scalability, and security. +* **Bridge the Gap.** Have you started to look at moving from those legacy automation systems to something more modern like Ansible, Puppet, or Chef and didn't know where to start? Start shifting the software management over to Chocolatey and taking those existing infrastructure/end point management tools back to just the remote deployment. Then when you are ready, you shift over to those modern automation solutions without needing to rewrite everything! Those Chocolatey packages work with all systems! +* **Scale With Ease.** There are massive deployments of Chocolatey, even the open source edition, in large enterprises. Chocolatey is deployed in everything from small startups all the way up to those fortune 500 companies. + +### Common Thoughts + +**"Some of the software I manage is extremely complex and difficult to install."** You mean like [Office](https://community.chocolatey.org/packages/Office365ProPlus), [SQL Server](https://github.com/DarwinJS/ChocolateyDesignPatterns/tree/af7896893de95bdd5c3c430a8cf7a1b6aa8f0983/mssqlserver-standard), or Oracle? How about MatLab? AutoCAD? All can be more easily managed with Chocolatey. Stop torturing yourself, give Chocolatey a shot. Trust us, you'll never go back to those earlier methods. Come into modern software management and automation. It's available, and it's for Windows!! + +**"I deal with software installers that don't install silently."** There are solutions for those badly behaved installers. If your team doesn't have the skillset for something like MSI repackaging, you can lean on our packaging support team that can whip those badly behaved installers into shape for a low cost (provided you are using a commerical edition of Chocolatey). + +**"But I'm not a developer, why should I learn PowerShell?"** Okay, time for some serious talk. If you are not learning better automation now, your peers are. They are going to move into this modern automation (DevOps as some might call it) and you might end up asking folks if they "want fries with that?". We are professionals that typically can call for higher salaries - that means we need to continue to provide value for the organizations that employ us. If we are not already familiar, we should learn to work with automation (PowerShell) and some basic foundational concepts of development (like source control). It's not hard, you might find it addictive. + +**"I like GUIs or my coworkers like GUIs."** We understand that aspect, that's why [our business edition offering](https://chocolatey.org/compare#compare) employs many more visual interfaces. + +### Summary + +All we're saying is, it's time to step out of the dark ages and stop either doing things manually or stop killing yourself trying to work directly with those complex systems. Rub a little Chocolatey on them, stop powering through extra work at night, and go home to see your family in the evening because you use modern software automation and tools. Have confidence in your deployments and get the right information back to fix quickly when things go wrong. Chocolatey has been around for nearly ten years, thousands of companies and hundreds of thousands of people use it. Lean on a solution that has been proven to work over and over again. It will change your life, it may even get you a raise! You will get more done in the same amount of time, and your employer will take notice. Windows deserves better automation and so do you. + +### Already familiar with other package managers? + +Chocolatey is like dpkg (Apt-Get)/RPM, but built with Windows in mind (there are differences and limitations). It can also do configuration tasks and anything that you can do with PowerShell. Another notable difference, it is really easy to create and maintain packages compared to those older, existing solutions for POSIX. + +Chocolatey manages packages (strictly nupkg files) and those packages manage software (could be installers, could be runtime binaries, could be zips or scripts). + +> Chocolatey is a software management tool that is also a package manager. It functions fantastically well when the runtime software is all included in the package and it doesn't make use of native installers. However to approach the Windows ecosystem a package manager also needs to know how to manage actual software installations, thus why Chocolatey does that as well. For publicly available packages, copyright keeps from having binaries embedded in packages, so Chocolatey is able to download from distribution points and checksum those binaries. + +## Requirements + +### Chocolatey Clients + +With Chocolatey clients, we ensure that Chocolatey is going to run with low memory footprints because you will have all aspects of things you will need to manage and different space and memory available across all of those clients. Chocolatey has a very wide reach into where it can be installed. + +For Chocolatey clients, you will need the following: + +* Windows 7+/Windows 2003+ (Server Core also, but not Windows Nano Server) +* Windows PowerShell v2+ (not PowerShell Core aka PowerShell 6 yet) +* .NET Framework 4.x+ + +#### Chocolatey Components + +* Chocolatey CLI aka choco (or choco.exe) is a client (not a Windows service) that provides the core of Chocolatey and the installation store for locally installed packages. This is important as Chocolatey manages packages, not Programs and Features directly - Programs and Features is limited only to software that has "installers" and Chocolatey treats all aspects of Windows software as first class citizens (zips, scripts, binaries, installers), thus it needs to track and manage those things separately. +* Chocolatey GUI is an application that runs when a user runs it (also not a Windows Service). +* Chocolatey Agent (aka chocolatey-agent) is a Windows service available in Chocolatey for Business. It is used for and Chocolatey Central Management. + +#### Space Requirements + +* Chocolatey CLI has an impact of 15 MB on default install plus the space the installed packages use up. +* Chocolatey GUI takes up another 50-100 MB of space on default installation. +* Chocolatey Agent (aka chocolatey-agent) is a Windows service available in Chocolatey for Business - it has an impact of about 10 MB. + +**RECOMMENDATION**: We recommend enough free space for the applications you will install plus another 1 GB for allowing Chocolatey to process that. You will want to turn on Package Reducer (commercial editions) if you have it to really reduce the impact of embedded packages, which bring reliability but also increase footprint (unless you have Package Reducer). If you don't have Package Reducer and you are embedding binaries into nupkgs, you will need 3 times the space of what you are installing unless you explicitly clean up the extracted installers/zips in your automated scripts - then you will need 2x the space when considering the nupkg will still contain embedded binaries (and the nupkg must stick around). Unfortunately, this is going to be a calculation to understand exact space requirements and it really depends on what you will install. + +#### Memory Requirements + +* Chocolatey CLI only runs when called. It falls into managed memory thus can work in environments with low amounts of memory provided that they have enough memory available to manage software installations. +* Chocolatey GUI only runs when the application is open and is also in managed memory. It can work on systems with low amounts of memory. +* Chocolatey Agent (aka chocolatey-agent) - it is always running but has a very low footprint unless it is processing something. + +**RECOMMENDATION**: At least 2GB of RAM at a bare minimum, but recommend at least 8GB for managing installations. + +### Chocolatey Repository Servers + +Unforunately it's harder to make recommendations here as it is really dependent on the repository that you choose and what requirements they have. It varies from a Windows deployment to Linux deployed repositories, from Java-based, to .NET-based, to PHP, and Rust-based repositories. The requirements vary wildly, plus you may use those repositories that address multiple types of packages and would need to figure out the space available for that. + +**SPACE RECOMMENDATION**: Have enough space for 10x the size of the installers and other software you will store. This will allow for some default growth. We would recommend 100 GB at a minimum. + +We've compiled a list of requirements for . Chocolatey Simple Server (Chocolatey.Server) can be put on really minimum hardware that could be 1-2GB of RAM, low CPU, and as little as 5 GB of space (number of packages you store will drive this). You will just want the network transfer to be fast. + +### Chocolatey Central Management + +Requirements coming soon. Just imagine normal recommendations for an ASP.NET IIS deployment, a SQL Server back end, and 1+ Windows Services (depending on scale). + +## Using Chocolatey + +Now that you have Chocolatey on your machine (), you can run several commands. + +Take a look at the . We are going to be using the . + +Let's install [Notepad++](https://notepad-plus-plus.org/). + +1. Open a command line as an administrator. +1. Type `choco install notepadplusplus` and press Enter. +1. That's it. Pretty simple but powerful little concept! + +### Overriding default install directory or other advanced install concepts + +1. Yes we support that through the use of install arguments - see +1. If you wanted to pass native argument to the installer, like the install directory, you would need to know the silent argument passed to that particular installer and then you would specify it on the command line or in the packages.config. +1. If it was an MSI, then usually you could pass `-ia "INSTALLDIR=""D:\Program Files"""` (for cmd.exe, it's different for PowerShell). See for specifics on passing quoted values through. +1. For example, Notepad++ uses the [NSIS](https://nsis.sourceforge.io/Main_Page) (NullSoft Scriptable Install System) installer. If we look at the silent options, we see that [/D](https://nsis.sourceforge.io/Docs/Chapter3.html#installerusagecommon) is how we influence the install directory. So we would pass `choco install notepadplusplus.install -ia "'/D=E:\SomeDirectory\somebody\npp'"` -note that we are looking at the specific package over the virtual (although you can do the same with notepadplusplus as well). + +Is there a better way? Absolutely, see ! + +## Terminology + +Software and Package are not terms used interchangeably in the Chocolatey community. It's important to understand the distinction between them and how they are related. + +* **Chocolatey** - Windows package manager for software management, can also be considered a framework +* **Chocolatey.org** - Website that is one stop shop for Chocolatey information and contains a community maintained package repository. It is important to understand that Chocolatey and the community feed are not intertwined, they are not the same thing. See to get a better understanding. +* **NuGet** - Framework and .NET package manager for software libraries. Chocolatey uses the NuGet packaging framework +* **Package** - See [What are Chocolatey Packages?](#what-are-chocolatey-packages). Packages can contain the software they represent and the final location of software may or may not be in the package. +* **Software** - Software refers to the actual runtime software that a package represents. This can be installed to the system through native installers, or come from zip/archive files or just dropping the runtime software right into the package. +* **Native Installer** - Actual installers that install software into Programs and Features, "natively" on a Windows machine. This is like MSI, InnoSetup (exe), NSIS (exe), InstallShield (exe/msi), etc. Windows has over 20 different installer formats. +* **Install Package** - packages that wrap native installers +* **Portable Package** - packages that use zip or just contain the runtime software. Usually these packages do not require administrative privileges to install or run. See +* **Extension Package** - packages that provide extensions to Chocolatey's PowerShell module through additional PowerShell modules. +* **Template Package** - packages that have packaging templates in them, used in package creation. See . +* **Metapackage** - packages that only exist to take dependencies on other packages, usually as a way of providing one command to get a complete setup. Some metapackages exist to provide discoverability, such as "git" versus 'git.install." The git package just depends on git.install, so running the install for either package will result in the git software being installed on the machine. +* **Virtual package** - a concept that a package can "provide" some functionality and any package that meets that provides will be considered a dependency met. For example, if you need to take a dependency on a pdf reader, you wouldn't want to take a hard dependency on AdobeReader, but instead you would hope that adobereader provides pdf as well as other packages like SumatraPDF and FoxitReader. Then you could take a dependency on pdf and if any of those packages are installed, the dependency is met. Otherwise an algorithm would determine which one to install. THIS IS NOT IMPLEMENTED AT THIS TIME WITH CHOCOLATEY. + +## What Are Chocolatey Packages? + +Chocolatey packages are known as nupkg files, which is a compiled NuSpec or a fancy zip file that knows about package metadata (including dependencies and versioning). These packages are an enhanced NuGet package, they have additional metadata that is specific to Chocolatey. Chocolatey is also compatible with vanilla NuGet packages. A Chocolatey package can contain embedded software and/or automation scripts. + +Chocolatey packages are not just something fancy on top of MSI/Exe installers. Chocolatey definitely supports that avenue and, with the addition of unzipping archives, it is the most widely used aspect of Chocolatey, especially when you see the packages on the community feed (https://community.chocolatey.org/packages aka dot org). Chocolatey is about managing packages, and it works best when those packages contain all of the software instead of reaching out to external/internet resources for the software those packages represent. When you look at the community feed, you are seeing one representation of the way you can build packages, mostly driven by that govern when packages can redistribute software or not. Those distribution rules do not govern private/internal packages, so the rules are a bit different. Packages internal to organizations are wide open to do quite a bit more. You can do software embedded packages where executables are automatically added to the path (shimmed) and/or PowerShell automation scripts to do pretty much anything, including running native installers that may be embedded or downloaded as part of the automation script (again, one of the most widely seen aspects on dot org). + +Packages with everything embedded are much more deterministic and repeatable, things most businesses require. You just won't see that as often on the community feed due to the aforementioned . + +The closer the underlying software a package represents is to the package (as in executables and files included in the package), the more Chocolatey behaves like a package manager. + +## How does Chocolatey work? + +How the heck does this all work? + +### Installation + +1. Chocolatey uses NuGet (NuGet.Core.dll) to retrieve the package from the source. This is typically a nupkg that is stored in a folder, share, or an OData location (HTTP/HTTPS). For more information on sources, please see and . +2. The package is installed into `$env:ChocolateyInstall\lib\`. The package install location is not configurable - the package must install here for tracking, upgrade, and uninstall purposes. The software that may be installed later during this process **is** configurable. See [Terminology](#terminology) to understand the difference between "package" and "software" as the terms relate to Chocolatey. +3. Choco determines if it is self-contained or has automation scripts - PowerShell scripts (*.ps1 files) and possibly other formats at a later date. +4. Choco takes a registry snapshot for later comparison. +5. If there are automation scripts, choco will run those. They can contain whatever you need to do, if they are PowerShell you have the full power of Posh (PowerShell), but you should try to ensure they are compatible with Posh v2+ (PowerShell v2 and beyond). +6. Choco compares the snapshot and determines uninstaller information and saves that to a .registry file. +7. Choco snapshots the folder based on all files that are currently in the package directory. +8. Choco looks for executable files in the package folder and generates shims into the `$env:ChocolateyInstall\bin` folder so those items are available on the path. Those could have been embedded into the package or brought down from somewhere (internet, ftp, file folder share, etc) and placed there. If there is a shim ignore file `.exe.ignore`, then Chocolatey will not generate a shim in the bin folder. + +### Upgrade + +1. Starting in 0.9.10, Chocolatey will look for and run a chocolateyBeforeModify.ps1 file in the existing package prior to upgrading or uninstalling a package. This is your opportunity to shut down services and/or processes. This is run from the existing package, not the new version of the package. If it fails, it just passes a warning and continues on. +2. Similar to install, except choco will make a backup of the package folder (and only the package folder) prior to attempting upgrade. +3. The files snapshot is used to determine what files can be removed from the package folder. If those files have not changed, they will be removed. +4. If the upgrade fails, choco will ask if you want to rollback the package folder to the previous version. If you choose to move roll back, it will put the backed up package directory back in place. This does not fix any folders you may have been using outside of the package directory, such as where the native installer may have installed a program to nor the location of `Get-ToolsLocation` (e.g. `c:\tools`). You will need to handle those fixes on your own. Chocolatey also doesn't rerun any install scripts on rollback. + +### Uninstall + +1. Choco makes the determination that the package is actually installed. +2. Starting in 0.9.10, Chocolatey will look for and run a chocolateyBeforeModify.ps1 file in the existing package prior to upgrading or uninstalling a package. This is your opportunity to shut down services and/or processes. If it fails, it just passes a warning and continues on. +3. Choco will make a backup of the package folder. +4. The automation script is run if found. This should be used to clean up anything that is put there with the install script. +5. If auto uninstaller is turned on, choco will attempt to run the auto uninstaller if a silent uninstall can be determined. Otherwise it will prompt the user (unless -y) to ask if they want the uninstaller to continue. The auto uninstaller can automatically detect about 80% of the different native uninstallers and determine or use the silent uninstall arguments. +6. If everything is successful so far, the files snapshot is used to determine what files can be removed from the package folder. If those files have not changed, they will be removed. +7. If everything is deleted from the package folder, the folder is also removed. + +When a package has an exe file, Chocolatey will create a link "shortcut" to the file (called a shim) so that you can run that tool anywhere on the machine. See for more information. +When a package has a chocolateyInstall.ps1, it will run the script. The instructions in the file can be anything. This is limited only by the .NET framework and PowerShell. +Most of the Chocolatey packages that take advantage of the PowerShell download an application installer and execute it silently. + +## Where are Chocolatey packages installed to? + +Chocolatey packages are installed to `ChocolateyInstall\lib`, but the software could go to various locations, depending on how the package maintainer created the package. + +Some packages are installed under `ChocolateyInstall\lib`, others - especially packages that are based on Windows installers (.msi files) - install to the default path of the original installer (which is most likely within `Program Files`). + +There are also packages for which you can set a custom installation path. These packages (like ruby) use the `$env:ChocolateyBinRoot` environment variable. If this variable does not exist, it will be created as `c:\tools` e.g. `C:\tools\ruby193`. To change this behavior, you can set `$env:ChocolateyBinRoot` to an existing folder, e. g. `C:\somestuff`. Packages that use the environment variable, will then be installed in the given subfolder, f. ex. `C:\somestuff\ruby193`. + +## How does Chocolatey work with Programs and Features? Existing installs? + +Many packages use native software installers, so Chocolatey allows the installer itself to handle install/upgrade/uninstall scenarios. This means it can work directly with already installed software just by using `choco install` to make Chocolatey aware of existing software. You can also use a specially crafted install command (skip powershell) to allow choco to install a package without installing the already installed native software. + +## Where does Chocolatey install packages from? + +By default it installs packages from community.chocolatey.org (the community feed). But you can change this by adding default sources and/or using the `--source` switch when running a command. + +When you , those packages can embed software and/or point to internal shares. You are not subject to software distribution rights like the packages on the community feed, so you can that are more reliable and secure. See [What are Chocolatey Packages](#what-are-chocolatey-packages) for more details. diff --git a/src/content/docs/en-us/guides/create/create-cli-package.mdx b/src/content/docs/en-us/guides/create/create-cli-package.mdx new file mode 100644 index 00000000000..aab81df160f --- /dev/null +++ b/src/content/docs/en-us/guides/create/create-cli-package.mdx @@ -0,0 +1,134 @@ +--- +order: 4 +xref: howto-create-cli-package +title: How To Create a CLI Executable Package +description: A walkthrough creating a package containing a CLI executable application +--- +import Xref from '@components/Xref.astro'; + +Chocolatey packages can also just contain executables - and you won't even need to write an installation script to use them! We're going to walk you through creating a CLI executable package now - assuming you've already run through . + +### What Is a CLI Executable + +We'd class just about any executable (or EXE file) that can be run without installation as a CLI executable, and developers of software projects will sometimes publish a separate version of software available to just download and run rather than install. + +### Why Might You Use an Executable Package + +These packages can be very helpful for users who want to have tools quickly available without installation - sometimes referred to on the Chocolatey Community Repository as portable packages. + +They're generally extremely quick to install, as there's no additional logic being run, and leave little to no footprint on the computer after removal. + +This can be very helpful on a build container, or for tools that just don't need to be installed. + +### Using Shimgen + +Normally, we'd talk about a function included with Chocolatey CLI that allows us to install some files - in this case, we're just dropping an EXE onto disk (and in the package directory, at that) - how is this going to work? Nobody will want to find and use the entire path to the tool every time! Happily, this has been solved for a while: + + is a long-term feature included with Chocolatey CLI, and is used so that you can have items available on the `PATH` (allowing them to be run on the command-line) without adding a new entry to the `PATH` for every package that needs it. + +EXEs that are found within the package directories at the end of installation have a shim created in the `$env:ChocolateyInstall\bin` folder, which is on the `PATH`. + +If you have an EXE file within your package that you don't want to have shimmed, you should create an empty file named `.ignore` in the same directory as the EXE will be found. + +You can find more details around uses for Shimgen on . + +#### Creating a CLI Executable Package + +In this example, we will create a package that contains `gh.exe`, the GitHub CLI executable. + +> :choco-info: For this example, we'll provide URLs that are based on versioned URL that worked at the time of writing. +> These were found in the [GitHub releases](https://github.com/cli/cli/releases) for the tool. + +#### Creating Package Structure + +This package type is very simple, mostly needing the EXE itself, and a package metadata file - often referred to as the `.nuspec`. + +1. In your `tutorials` folder, create a new folder for this package. For the example, we will call it `gh.portable`. +1. Within this folder, create `gh.portable.nuspec`, with the content as [shown below](#package-metadata-content). +1. Navigate to the [GH GitHub Releases](https://github.com/cli/cli/releases/) page, and download the latest version of `GitHub CLI windows amd64` (e.g. `GitHub CLI 2.39.2 windows amd64.zip` - you may need to click `Show all releases` to find it). + a. This will be a zip file so, after the download has completed, extract it directly into the package directory. + +##### Package Metadata Content + +```xml + + + + + gh.portable + $version$ + __REPLACE_YOUR_NAME__ + GitHub CLI (Portable) + GitHub + https://cli.github.com/ + https://github.com/cli/cli/blob/trunk/LICENSE + https://github.com/cli/cli/ + https://github.com/cli/cli/issues + gh cli portable example + GitHub on the Command Line + https://github.com/cli/cli/releases + + + + + + +``` + +You'll want to update the following fields in the `metadata` section: + +* **owners**: This field shows who maintains the package - your name or handle should be added! + +We have already filled many of the other included fields, including the following: + +* **id**: We have chosen the example package name, including the `.portable` suffix - which is often used to denote non-install packages on the Chocolatey Community Repository. +* **version**: We have used `$version$` here, as we're going to introduce a neat trick later to update this during `choco pack`. +* **files**: We have added paths matching the files within the release artifact you downloaded above in order to pack the extracted files correctly. + +### Compiling Your Package + +You can now run `choco pack` to compile your Chocolatey package, creating a file with a `.nupkg` extension, ready for installation! + +1. In VS Code, press `Ctrl+Shift+ P` or use the **View** menu and click on **Command Palette**. +1. Select `Chocolatey: Package Chocolatey package(s)` from the prompt. +1. Select `gh.portable.nuspec` from the prompt. +1. Add `--version 2.39.1` (or the most recent version), which will override the version in the metadata, and press **Enter**. + +You should have a new package generated in your root directory. + +### Installing Your Package + +You can now test installation of the package. + +> :choco-warning: **Beware** that installing and uninstalling the example package may affect existing installations (as you're essentially testing in production). We recommend testing on a separate environment that is not crucial to your workflow. + +In an _elevated PowerShell command prompt_, run the following: + +```powershell +choco install gh.portable --source='tutorials' -y +``` + +The command should run, and `gh.exe` should now be available on the command line. You should be able to run it: + +```powershell +# Should produce output +gh.exe --version + +# Should show the path to the shim, within chocolatey/bin +Get-Command gh.exe +``` + +### Uninstalling Your Package + +Similarly, you should be able to test the uninstall. + +```powershell +choco uninstall gh.portable -y +``` + +The same tests shown above should now show an error, and no command found. + +### Conclusion + +You should now have a grasp of the potential for portable / CLI packages! Congratulations. Have fun, and try creating your own! \ No newline at end of file diff --git a/src/content/docs/en-us/guides/create/create-config-package.mdx b/src/content/docs/en-us/guides/create/create-config-package.mdx new file mode 100644 index 00000000000..8c41aa1dcc8 --- /dev/null +++ b/src/content/docs/en-us/guides/create/create-config-package.mdx @@ -0,0 +1,198 @@ +--- +order: 6 +xref: howto-create-config-package +title: How To Create a Configuration Package +description: A walkthrough creating a package that configures your computer +--- +import Xref from '@components/Xref.astro'; + +Some people are surprised when they learn that Chocolatey packages don't always install software. + +Sometimes, you may want to apply configuration to software you've installed. Sometimes, you just need to drop a file into the right place. + +In this how-to, we'll talk about how to make a package that doesn't install anything - and just applies configuration. + +### What Is a Configuration Package + +A configuration package, predictably, applies configuration during the installation stage. You can also use this sort of package to drop files into the right place. + +### Why Would I Want To Use One? + +An example of a basic configuration package would be a package that drops a license file to the right location on a computer, or a package that configures a web-server with some known values that you want to be used across a set of computers. + +We actually suggest something like this for Chocolatey for Business customers to ensure their Chocolatey licenses are in-date and easily maintained! + +### Using `Copy-Item` (and Friends) + +A lot of package types have Chocolatey helper-functions ready to be used. However, configuration and file-distributing packages don't have specific functions shipped for the purpose. + +We'll be using built-in PowerShell functions and cmdlets instead, such as `Copy-Item`. + +#### Creating a Configuration Package + +In this example, we're going to create an example package to license and configure an example application, helpfully titled `exampleapp`. + +We can run `choco new` to create a basic package, and then remove everything we don't need: + +1. Open your `tutorials` folder in VSCode. +1. Press **Ctrl+Shift+P** or use the **View** menu and click on **Command Palette**. +1. Select `Chocolatey: Create new Chocolatey package`. +1. Give your package a name, e.g. `example-config`. +1. Select the default template, and press **Enter**. + +This should result in a new directory, containing the following files: + +```text +example-config +├── tools +│ ├── chocolateyBeforeModify.ps1 +│ ├── chocolateyInstall.ps1 +│ ├── chocolateyUninstall.ps1 +│ ├── LICENSE.txt +│ ├── VERIFICATION.txt +├── example-config.nuspec +├── ReadMe.md +``` + +Delete the `chocolateyBeforeModify.ps1`, `VERIFICATION.txt`, and `ReadMe.md` files from the folder structure. + +You'll want to open the `example-config.nuspec` file, and fill out the following fields in the `metadata` section if required: + +* **packageSourceUrl**: This can be removed, or updated with your source URL. +* **owners**: This field shows who maintains the package - your name or username is appropriate! +* **authors**: The authors of the software in question - this should be updated with your name or username. +* **projectUrl**: The URL of the software in question - for this example package, this should be removed. +* **tags**: Tags for the repository you're publishing the package to. These can be updated however you prefer, though the Chocolatey Community Repository has some guidance on what is needed there. +* **summary**: This is a summary of the package contents. For this example, you could add that this package will license and configure your example software. +* **description**: This is a description of the package contents, and generally contains more detail than the summary - including things like package parameters. It supports markdown. We won't be dealing with anything that complex here! + +You can now fill or remove any other commented out sections of the `example-config.nuspec` file, if you want. Your file should end up looking something like this: + +```xml + + + + + example-config + 0.1.0 + Example Configuration + PackageMaintainer + example config-only + A package that configures 'example' + Further detail about the configuration that is applied, and any package parameters. + + + + + +``` + +#### Creating Your Install Script + +Install may be a bit of a misnomer, here, but as the script that runs when the package is "installed" is called `chocolateyInstall.ps1`, it seems appropriate. + +The new package you have created will already have an install script in the `tools` directory. + +You can remove the contents of the script, as it's the familiar template - and we won't be installing anything. + +Instead, replace it with some sample content for our planned configuration: + +```powershell +$ErrorActionPreference = 'Stop' +$ToolsDir = Split-Path $MyInvocation.MyCommand.Definition -Parent + +$ConfigDirectory = "C:\ProgramData\exampleapp\" + +# Ensure the license directory exists +if (-not (Test-Path $ConfigDirectory)) { + $null = New-Item $ConfigDirectory -ItemType Directory +} + +# Copy the license to the correct path +Copy-Item -Path (Join-Path $ToolsDir "LICENSE.txt") -Destination $ConfigDirectory + +# Backup the existing Configuration file, if it exists +$ConfigFile = Join-Path $ConfigDirectory "config.json" +if (Test-Path $ConfigFile) { + Copy-Item $ConfigFile -Destination "$ConfigFile.backup" +} + +# Write Configuration File +@{ + LicensePath = Join-Path $ConfigDirectory "LICENSE.txt" + ComputerName = $env:ComputerName +} | ConvertTo-Json | Set-Content $ConfigFile +``` + +#### Considering Uninstallation + +There's no automatic procedure for uninstalling configuration. In this case, you can add an uninstall script that rolls back your changes. + +If you wanted to do this, you would overwrite the contents of the `chocolateyUninstall.ps1` script with something like this: + +```powershell +$ConfigDirectory = "C:\ProgramData\exampleapp\" +$LicensePath = Join-Path $ConfigDirectory "LICENSE.txt" +$ConfigPath = Join-Path $ConfigDirectory "config.json" + +# Remove the license flie if it exists +if (Test-Path $LicensePath) { + Remove-Item $LicensePath +} + +# Remove the config file if it exists +if (Test-Path $ConfigPath) { + Remove-Item $ConfigPath +} + +# And restore the backup, if it exists +if (Test-Path "$ConfigPath.backup") { + Move-Item "$ConfigPath.backup" -Destination $ConfigPath +} + +# Clean up the config directory, if it's empty +if (-not (Get-ChildItem $ConfigDirectory)) { + Remove-Item $ConfigDirectory +} +``` + +> :choco-warning: Please note that this uninstall script is quite naive, as you would need to consider updated backups and what state you would want to restore to. + +### Compiling Your Package + +You can now run `choco pack` to compile your Chocolatey package, creating a file with a `.nupkg` extension, ready for installation! + +1. In VSCode, press **Ctrl+Shift+P** or use the **View** menu and click on **Command Palette**. +1. Select `Chocolatey: Package Chocolatey package(s)` from the prompt. +1. Select `example-config.nuspec` from the prompt. +1. Press **Enter**, providing no additional input. + +You should have a new package generated in your current working directory. + +### Installing Your Package + +You can now test installation of your package. + +In many cases, we would recommend testing on a dedicated test system that will not be affected by a package being installed - but as this package is entirely made up, there is nearly no consequence of installing and uninstalling it (assuming you don't have an application called `exampleapp` that stores data in the way we've used, here). + +In an _elevated PowerShell command prompt_, run the following: + +```powershell +choco install example-config --source='tutorials' -y +``` + +The command should run, and opening the `C:\ProgramData\exampleapp` directory should show your license and config file. + +### Uninstalling Your Package + +If you did update the uninstall script, you should be able to run `choco uninstall`: + +```powershell +choco uninstall example-config -y +``` + +The package should be uninstalled successfully, and checking `ProgramData` should show that the `exampleapp` directory (and the contained files) should have been removed. + +### Conclusion + +At this point, you should have a package that licenses and configures an (imaginary) application! Congratulations! Hopefully the lessons here can be applied to your more specific applications. \ No newline at end of file diff --git a/src/content/docs/en-us/guides/create/create-custom-package-templates.mdx b/src/content/docs/en-us/guides/create/create-custom-package-templates.mdx new file mode 100644 index 00000000000..f295d71d0e7 --- /dev/null +++ b/src/content/docs/en-us/guides/create/create-custom-package-templates.mdx @@ -0,0 +1,128 @@ +--- +order: 40 +xref: create-custom-package-templates +title: Create Custom Package Templates +description: How to create custom package templates +--- +import Xref from '@components/Xref.astro'; + +As of [choco 0.9.9.9](https://github.com/chocolatey/choco/issues/76), you can create your own custom package templates when the built-in template is not enough. + +## Overview + +A template is used for creating packages. Chocolatey (choco) has a built-in template that it uses when generating a new package from the command . + +### Where do Templates go? + +If you drop a template into `$env:ChocolateyInstall\templates` folder, you can use `-t name_of_template` to generate a choco template based on that. So for: + +![Windows Explorer showing the installation location for a new template with the name of Organization](/images/features/choco-templates-location.png) + +You would call `choco new pkgname -t organization` and choco will use the template folder instead of the built-in template. + +### Can I replace the built-in template? + +If you are using a version of Chocolatey CLI earlier than 0.12.0, you can replace the built-in template by copying the template to a folder called `default`. The `choco new` command will then use that by default. + +Chocolatey CLI version 0.12.0 or later introduced the . You can use it to list the installed templates and to set the template to be used by default when running the `choco new` command. You can also still copy the template files that worked with previous versions. + +### What values can I template? + +You can get the names by running `choco new -h`: + +``` +Possible properties to pass: + packageversion + maintainername + maintainerrepo + installertype + url + url64 + silentargs +``` + +However `PackageName` and `PackageNameLower` also show up as they are based on the name of the package that you pass e.g. "bob" in `choco new bob` + +Then you surround those templated values with `[[]]` to make them templated for choco to use. + +> :choco-info: **NOTE** +> +> You can set and pass arbitrary values through as well. This is shown in the example with `CustomValue`. + +## Template Example + +This is a template for embedding an MSI into a package. This removes almost everything that is unnecessary for embedding software into packages. And because the autoUninstaller handles MSIs without an issue, we don't need a chocolateyUninstall.ps1. + +A file with the extension `.nuspec`: + +```xml + + + + [[PackageNameLower]] + [[PackageName]] (Install) + [[PackageVersion]] + Original authors + [[MaintainerName]] + __REPLACE__MarkDown_Okay [[AutomaticPackageNotesNuspec]] + + [[PackageNameLower]] admin + + + + + + +``` + +> :choco-info: **NOTE** +> +> Ensure that the template nuspec is encoded as UTF8 with BOM to avoid issues with non-ascii characters. The final package source generated by the template will contain the correct nuspec without a BOM. + +`tools\chocolateyInstall.ps1`: + +```powershell +# Custom value: [[CustomValue]] +$ErrorActionPreference = 'Stop'; # stop on all errors + +[[AutomaticPackageNotesInstaller]] +$packageName = '[[PackageName]]' +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +$fileLocation = Join-Path $toolsDir 'NAME_OF_EMBEDDED_INSTALLER_FILE' + +$packageArgs = @{ + packageName = $packageName + file = $fileLocation + fileType = '[[InstallerType]]' #only one of these: exe, msi, msu + + #MSI + silentArgs = "/qn /norestart /l*v `"$env:TEMP\chocolatey\$($packageName)\$($packageName).MsiInstall.log`"" + validExitCodes= @(0, 3010, 1641) + #OTHERS + #silentArgs ='[[SilentArgs]]' # /s /S /q /Q /quiet /silent /SILENT /VERYSILENT -s - try any of these to get the silent installer + #validExitCodes= @(0) #please insert other valid exit codes here +} + +Install-ChocolateyInstallPackage @packageArgs +``` + +Once installed, call this with `choco new test -t