[{"data":1,"prerenderedAt":858},["ShallowReactive",2],{"page-\u002Fworkflows\u002Fconcurrency":3,"all-pages":524},{"id":4,"title":5,"body":6,"description":515,"extension":516,"meta":517,"navigation":356,"path":518,"robots":519,"seo":520,"sitemap":521,"stem":522,"__hash__":523},"content\u002F01.workflows\u002F05.concurrency.md","Concurrency",{"type":7,"value":8,"toc":506},"minimark",[9,18,41,49,58,191,194,215,220,259,289,300,313,406,415,431,434,438,502],[10,11,12,13,17],"p",{},"BountyHub provides ",[14,15,16],"strong",{},"structured concurrency",": branches are declared in the\nworkflow, their lifecycle is tracked durably by the runner, and synchronization\nis explicit. There are three primitives:",[19,20,21,29,35],"ul",{},[22,23,24,28],"li",{},[25,26,27],"code",{},"step.parallel(branches)"," — run groups of steps concurrently and wait for all.",[22,30,31,34],{},[25,32,33],{},"step.spawn(steps)"," — start an independent branch without blocking.",[22,36,37,40],{},[25,38,39],{},"step.join(handles)"," — block until one or more spawned branches finish.",[42,43,45,46],"h2",{"id":44},"parallel-branches-stepparallel","Parallel Branches: ",[25,47,48],{},"step.parallel",[10,50,51,53,54,57],{},[25,52,48],{}," takes an ",[14,55,56],{},"outer list of branches",". Each branch is a list of\nsteps that run sequentially; all branches run concurrently. The step completes\nwhen every branch reaches a terminal state:",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-bhw shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","activity(\n    name = \"surface-scan\",\n    triggers = [trigger.cron(\"0 0 * * *\")],\n    steps = [\n        # Subdomain enumeration, port scanning, and directory brute-forcing\n        # are independent — run them at the same time.\n        step.parallel([\n            [\n                step.exec(command = [\"subfinder\", \"-d\", config.var(\"target_domain\"), \"-o\", \"subs.txt\"]),\n            ],\n            [\n                step.exec(command = [\"naabu\", \"-host\", config.var(\"target_domain\"), \"-o\", \"ports.txt\"]),\n            ],\n            [\n                step.exec(command = [\"ffuf\", \"-w\", \"dirs.txt\", \"-u\", \"https:\u002F\u002F{}\u002FFUZZ\".format(config.var(\"target_domain\")), \"-o\", \"ffuf.json\"]),\n            ],\n        ]),\n        # Runs only after ALL branches above have finished successfully.\n        step.script(content = \"echo surface scan complete\"),\n    ],\n)\n","bhw","",[25,66,67,75,81,87,93,99,105,111,117,123,129,134,140,145,150,156,161,167,173,179,185],{"__ignoreMap":64},[68,69,72],"span",{"class":70,"line":71},"line",1,[68,73,74],{},"activity(\n",[68,76,78],{"class":70,"line":77},2,[68,79,80],{},"    name = \"surface-scan\",\n",[68,82,84],{"class":70,"line":83},3,[68,85,86],{},"    triggers = [trigger.cron(\"0 0 * * *\")],\n",[68,88,90],{"class":70,"line":89},4,[68,91,92],{},"    steps = [\n",[68,94,96],{"class":70,"line":95},5,[68,97,98],{},"        # Subdomain enumeration, port scanning, and directory brute-forcing\n",[68,100,102],{"class":70,"line":101},6,[68,103,104],{},"        # are independent — run them at the same time.\n",[68,106,108],{"class":70,"line":107},7,[68,109,110],{},"        step.parallel([\n",[68,112,114],{"class":70,"line":113},8,[68,115,116],{},"            [\n",[68,118,120],{"class":70,"line":119},9,[68,121,122],{},"                step.exec(command = [\"subfinder\", \"-d\", config.var(\"target_domain\"), \"-o\", \"subs.txt\"]),\n",[68,124,126],{"class":70,"line":125},10,[68,127,128],{},"            ],\n",[68,130,132],{"class":70,"line":131},11,[68,133,116],{},[68,135,137],{"class":70,"line":136},12,[68,138,139],{},"                step.exec(command = [\"naabu\", \"-host\", config.var(\"target_domain\"), \"-o\", \"ports.txt\"]),\n",[68,141,143],{"class":70,"line":142},13,[68,144,128],{},[68,146,148],{"class":70,"line":147},14,[68,149,116],{},[68,151,153],{"class":70,"line":152},15,[68,154,155],{},"                step.exec(command = [\"ffuf\", \"-w\", \"dirs.txt\", \"-u\", \"https:\u002F\u002F{}\u002FFUZZ\".format(config.var(\"target_domain\")), \"-o\", \"ffuf.json\"]),\n",[68,157,159],{"class":70,"line":158},16,[68,160,128],{},[68,162,164],{"class":70,"line":163},17,[68,165,166],{},"        ]),\n",[68,168,170],{"class":70,"line":169},18,[68,171,172],{},"        # Runs only after ALL branches above have finished successfully.\n",[68,174,176],{"class":70,"line":175},19,[68,177,178],{},"        step.script(content = \"echo surface scan complete\"),\n",[68,180,182],{"class":70,"line":181},20,[68,183,184],{},"    ],\n",[68,186,188],{"class":70,"line":187},21,[68,189,190],{},")\n",[10,192,193],{},"Key semantics:",[19,195,196,199,206,212],{},[22,197,198],{},"The outer list is the concurrency: three branches above run at the same time.",[22,200,201,202,205],{},"Each inner list is sequential: ",[25,203,204],{},"ffuf"," waits for the wordlist download within\nits own branch only.",[22,207,208,211],{},[25,209,210],{},"parallel([])"," is an immediate no-op.",[22,213,214],{},"A flat (non-nested) list is rejected — wrap single steps in their own lists.",[216,217,219],"h3",{"id":218},"failure-behavior","Failure behavior",[10,221,222,223,225,226,229,230,233,234,237,238,241,242,244,245,248,249,252,253,255,256,258],{},"If a branch fails, ",[25,224,48],{}," fails — but running siblings are ",[14,227,228],{},"not","\ncancelled. They finish naturally; the join simply reports failure. Use\n",[25,231,232],{},"allow_failure = True"," on steps inside branches so a noisy optional phase\ncannot fail the whole scan. ",[25,235,236],{},"cond"," and ",[25,239,240],{},"allow_failure"," are also accepted on ",[25,243,48],{}," itself\nto gate or soften the entire barrier. Per-branch ",[25,246,247],{},"name","\u002F",[25,250,251],{},"timeout"," cannot be\nset on ",[25,254,48],{},"; set ",[25,257,251],{}," on the steps inside each branch.",[59,260,262],{"className":61,"code":261,"language":63,"meta":64,"style":64},"step.parallel([\n    [step.exec(command = [\"nuclei\", \"-l\", \"live.txt\", \"-severity\", \"critical\", \"-o\", \"crit.txt\"])],\n    # Passive checks may fail (rate limits, dead endpoints) without killing the run.\n    [step.exec(command = [\"passive-tool\", \"-in\", \"live.txt\"], allow_failure = True)],\n])\n",[25,263,264,269,274,279,284],{"__ignoreMap":64},[68,265,266],{"class":70,"line":71},[68,267,268],{},"step.parallel([\n",[68,270,271],{"class":70,"line":77},[68,272,273],{},"    [step.exec(command = [\"nuclei\", \"-l\", \"live.txt\", \"-severity\", \"critical\", \"-o\", \"crit.txt\"])],\n",[68,275,276],{"class":70,"line":83},[68,277,278],{},"    # Passive checks may fail (rate limits, dead endpoints) without killing the run.\n",[68,280,281],{"class":70,"line":89},[68,282,283],{},"    [step.exec(command = [\"passive-tool\", \"-in\", \"live.txt\"], allow_failure = True)],\n",[68,285,286],{"class":70,"line":95},[68,287,288],{},"])\n",[42,290,292,293,296,297],{"id":291},"spawn-and-join-stepspawn-stepjoin","Spawn And Join: ",[25,294,295],{},"step.spawn"," \u002F ",[25,298,299],{},"step.join",[10,301,302,303,305,306,309,310,312],{},"When you need to keep working while a long-running phase executes in the\nbackground, use ",[25,304,295],{},". It returns a ",[14,307,308],{},"handle"," — an execution reference,\nnever data. Bind the handle to a variable, keep going with other work, then\nsynchronize with ",[25,311,299],{},":",[59,314,316],{"className":61,"code":315,"language":63,"meta":64,"style":64},"# Start the slow full-port scan in the background.\nports = step.spawn([\n    step.exec(\n        command = [\"naabu\", \"-host\", config.var(\"target_domain\"), \"-p\", \"-\", \"-o\", \"all-ports.txt\"],\n        timeout = duration.hours(6),\n    ),\n])\n\nactivity(\n    name = \"surface-scan\",\n    triggers = [trigger.cron(\"0 0 * * *\")],\n    steps = [\n        # Continue immediately with the web-focused scan...\n        step.exec(command = [\"httpx\", \"-l\", \"subs.txt\", \"-o\", \"live.txt\"]),\n\n        # ...and wait for the background port scan before finishing.\n        step.join([ports]),\n    ],\n)\n",[25,317,318,323,328,333,338,343,348,352,358,362,366,370,374,379,384,388,393,398,402],{"__ignoreMap":64},[68,319,320],{"class":70,"line":71},[68,321,322],{},"# Start the slow full-port scan in the background.\n",[68,324,325],{"class":70,"line":77},[68,326,327],{},"ports = step.spawn([\n",[68,329,330],{"class":70,"line":83},[68,331,332],{},"    step.exec(\n",[68,334,335],{"class":70,"line":89},[68,336,337],{},"        command = [\"naabu\", \"-host\", config.var(\"target_domain\"), \"-p\", \"-\", \"-o\", \"all-ports.txt\"],\n",[68,339,340],{"class":70,"line":95},[68,341,342],{},"        timeout = duration.hours(6),\n",[68,344,345],{"class":70,"line":101},[68,346,347],{},"    ),\n",[68,349,350],{"class":70,"line":107},[68,351,288],{},[68,353,354],{"class":70,"line":113},[68,355,357],{"emptyLinePlaceholder":356},true,"\n",[68,359,360],{"class":70,"line":119},[68,361,74],{},[68,363,364],{"class":70,"line":125},[68,365,80],{},[68,367,368],{"class":70,"line":131},[68,369,86],{},[68,371,372],{"class":70,"line":136},[68,373,92],{},[68,375,376],{"class":70,"line":142},[68,377,378],{},"        # Continue immediately with the web-focused scan...\n",[68,380,381],{"class":70,"line":147},[68,382,383],{},"        step.exec(command = [\"httpx\", \"-l\", \"subs.txt\", \"-o\", \"live.txt\"]),\n",[68,385,386],{"class":70,"line":152},[68,387,357],{"emptyLinePlaceholder":356},[68,389,390],{"class":70,"line":158},[68,391,392],{},"        # ...and wait for the background port scan before finishing.\n",[68,394,395],{"class":70,"line":163},[68,396,397],{},"        step.join([ports]),\n",[68,399,400],{"class":70,"line":169},[68,401,184],{},[68,403,404],{"class":70,"line":175},[68,405,190],{},[10,407,408,410,411,414],{},[25,409,39],{}," blocks until every joined branch reaches a terminal state.\nIt succeeds only if ",[14,412,413],{},"all"," joined branches succeed; if one fails, the join\nfails without cancelling any still-running siblings. An empty handle list is\nrejected.",[10,416,417,419,420,237,422,424,425,427,428,430],{},[25,418,295],{}," accepts ",[25,421,247],{},[25,423,251],{},". Its ",[25,426,240],{}," parameter is\naccepted but ignored: branch failure always propagates to ",[25,429,299],{},".",[10,432,433],{},"Because handles are synchronization references only, spawn\u002Fjoin never merge\ndata between branches. If branches need to exchange files, do it through the\nworkspace or artifacts.",[42,435,437],{"id":436},"choosing-a-primitive","Choosing a Primitive",[439,440,441,454],"table",{},[442,443,444],"thead",{},[445,446,447,451],"tr",{},[448,449,450],"th",{},"Need",[448,452,453],{},"Use",[455,456,457,468,478,488],"tbody",{},[445,458,459,463],{},[460,461,462],"td",{},"Run independent scans side by side",[460,464,465],{},[25,466,467],{},"step.parallel([...])",[445,469,470,473],{},[460,471,472],{},"Fire off a slow job and keep going",[460,474,475],{},[25,476,477],{},"handle = step.spawn([...])",[445,479,480,483],{},[460,481,482],{},"Wait for spawned jobs before ending",[460,484,485],{},[25,486,487],{},"step.join([handle])",[445,489,490,493],{},[460,491,492],{},"Fan out over many targets\u002Fitems",[460,494,495],{},[496,497,499],"a",{"href":498},"\u002Fworkflows\u002Ffor-each",[25,500,501],{},"step.for_each",[503,504,505],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":64,"searchDepth":95,"depth":89,"links":507},[508,512,514],{"id":44,"depth":77,"text":509,"children":510},"Parallel Branches: step.parallel",[511],{"id":218,"depth":83,"text":219},{"id":291,"depth":77,"text":513},"Spawn And Join: step.spawn \u002F step.join",{"id":436,"depth":77,"text":437},"Run steps in parallel with step.parallel, step.spawn, and step.join.","md",{},"\u002Fworkflows\u002Fconcurrency",null,{"title":5,"description":515},{"loc":518},"01.workflows\u002F05.concurrency","EPjOtW-spqF2FOZc2afyXbc8hGuM_paP929N6eNBeBo",[525,584,600,619,654,670,682,693,704,715,739,758,778,789,800],{"title":526,"path":527,"stem":528,"children":529},"Workflows","\u002Fworkflows","01.workflows",[530,532,536,540,544,548,552,553,557,560,564,568,572,576,580],{"title":526,"path":527,"stem":531},"01.workflows\u002Findex",{"title":533,"path":534,"stem":535},"Workflow Quick Reference","\u002Fworkflows\u002Fquick-reference","01.workflows\u002F00.quick-reference",{"title":537,"path":538,"stem":539},"Workflows Overview","\u002Fworkflows\u002Foverview","01.workflows\u002F01.overview",{"title":541,"path":542,"stem":543},"Workflow Syntax Reference","\u002Fworkflows\u002Fsyntax-reference","01.workflows\u002F02.syntax-reference",{"title":545,"path":546,"stem":547},"Steps","\u002Fworkflows\u002Fsteps","01.workflows\u002F03.steps",{"title":549,"path":550,"stem":551},"Step Outputs","\u002Fworkflows\u002Fstep-outputs","01.workflows\u002F04.step-outputs",{"title":5,"path":518,"stem":522},{"title":554,"path":555,"stem":556},"Transforms","\u002Fworkflows\u002Ftransforms","01.workflows\u002F06.transforms",{"title":558,"path":498,"stem":559},"For Each","01.workflows\u002F07.for-each",{"title":561,"path":562,"stem":563},"Modules","\u002Fworkflows\u002Fmodules","01.workflows\u002F08.modules",{"title":565,"path":566,"stem":567},"Agents","\u002Fworkflows\u002Fagents","01.workflows\u002F09.agents",{"title":569,"path":570,"stem":571},"Decisions","\u002Fworkflows\u002Fdecisions","01.workflows\u002F10.decisions",{"title":573,"path":574,"stem":575},"Configuration References","\u002Fworkflows\u002Fconfig","01.workflows\u002F11.config",{"title":577,"path":578,"stem":579},"Comparison With Other Automation Systems","\u002Fworkflows\u002Fcomparison","01.workflows\u002F12.comparison",{"title":581,"path":582,"stem":583},"Generate with AI","\u002Fworkflows\u002Fai-generation","01.workflows\u002F13.ai-generation",{"title":585,"path":586,"stem":587,"children":588},"Projects","\u002Fprojects","02.projects",[589,592,596],{"title":590,"path":586,"stem":591},"Projects & Runs","02.projects\u002Findex",{"title":593,"path":594,"stem":595},"Projects Overview","\u002Fprojects\u002Foverview","02.projects\u002F1.overview",{"title":597,"path":598,"stem":599},"Runs & Artifacts","\u002Fprojects\u002Fruns-artifacts","02.projects\u002F2.runs-artifacts",{"title":601,"path":602,"stem":603,"children":604},"Runners","\u002Frunners","03.runners",[605,607,611,615],{"title":601,"path":602,"stem":606},"03.runners\u002Findex",{"title":608,"path":609,"stem":610},"Runner Overview","\u002Frunners\u002Foverview","03.runners\u002F1.overview",{"title":612,"path":613,"stem":614},"Getting Started with Runners","\u002Frunners\u002Fgetting-started","03.runners\u002F2.getting-started",{"title":616,"path":617,"stem":618},"Custom Runner Images","\u002Frunners\u002Fcustom-image","03.runners\u002F3.custom-image",{"title":620,"path":621,"stem":622,"children":623},"Datasets","\u002Fdatasets","04.datasets",[624,626,630,634,638,642,646,650],{"title":620,"path":621,"stem":625},"04.datasets\u002Findex",{"title":627,"path":628,"stem":629},"Datasets Overview","\u002Fdatasets\u002Foverview","04.datasets\u002F1.overview",{"title":631,"path":632,"stem":633},"Dataset Schemas and Identity","\u002Fdatasets\u002Fschema","04.datasets\u002F2.schema",{"title":635,"path":636,"stem":637},"Pushing and Reading Dataset Rows","\u002Fdatasets\u002Fworkflows","04.datasets\u002F3.workflows",{"title":639,"path":640,"stem":641},"Dataset SQL Reference","\u002Fdatasets\u002Fsql","04.datasets\u002F4.sql",{"title":643,"path":644,"stem":645},"Dataset Structured Filters","\u002Fdatasets\u002Ffilters","04.datasets\u002F5.filters",{"title":647,"path":648,"stem":649},"Dataset Saved Views","\u002Fdatasets\u002Fviews","04.datasets\u002F6.views",{"title":651,"path":652,"stem":653},"Datasets API and CLI","\u002Fdatasets\u002Fapi-cli","04.datasets\u002F7.api-cli",{"title":655,"path":656,"stem":657,"children":658},"Agent","\u002Fagent","05.agent",[659,662,666],{"title":660,"path":656,"stem":661},"BH Agent","05.agent\u002Findex",{"title":663,"path":664,"stem":665},"BH Agent Overview","\u002Fagent\u002Foverview","05.agent\u002F1.overview",{"title":667,"path":668,"stem":669},"MCP servers","\u002Fagent\u002Fmcp-servers","05.agent\u002F2.mcp-servers",{"title":671,"path":672,"stem":673,"children":674},"Bhlast","\u002Fbhlast","06.bhlast",[675,678],{"title":676,"path":672,"stem":677},"Bhlast Servers","06.bhlast\u002Findex",{"title":679,"path":680,"stem":681},"Bhlast servers overview","\u002Fbhlast\u002Foverview","06.bhlast\u002F1.overview",{"title":683,"path":684,"stem":685,"children":686},"Notifications","\u002Fnotifications","07.notifications",[687,689],{"title":683,"path":684,"stem":688},"07.notifications\u002Findex",{"title":690,"path":691,"stem":692},"Notifications Overview","\u002Fnotifications\u002Foverview","07.notifications\u002F1.overview",{"title":694,"path":695,"stem":696,"children":697},"Blob Storage","\u002Fblob-storage","08.blob-storage",[698,700],{"title":694,"path":695,"stem":699},"08.blob-storage\u002Findex",{"title":701,"path":702,"stem":703},"Blob Storage Overview","\u002Fblob-storage\u002Foverview","08.blob-storage\u002F1.overview",{"title":705,"path":706,"stem":707,"children":708},"Payloads","\u002Fpayloads","09.payloads",[709,711],{"title":705,"path":706,"stem":710},"09.payloads\u002Findex",{"title":712,"path":713,"stem":714},"Payloads overview","\u002Fpayloads\u002Foverview","09.payloads\u002F1.overview",{"title":716,"path":717,"stem":718,"children":719},"Cve Watcher","\u002Fcve-watcher","10.cve-watcher",[720,723,727,731,735],{"title":721,"path":717,"stem":722},"CVE Watcher","10.cve-watcher\u002Findex",{"title":724,"path":725,"stem":726},"CVE Watcher Overview","\u002Fcve-watcher\u002Foverview","10.cve-watcher\u002F1.overview",{"title":728,"path":729,"stem":730},"CVE Watcher Search and Filters","\u002Fcve-watcher\u002Fsearch","10.cve-watcher\u002F2.search",{"title":732,"path":733,"stem":734},"CVE Watcher Push Notifications","\u002Fcve-watcher\u002Fnotifications","10.cve-watcher\u002F3.notifications",{"title":736,"path":737,"stem":738},"CVE Watcher API and Scopes","\u002Fcve-watcher\u002Fapi","10.cve-watcher\u002F4.api",{"title":740,"path":741,"stem":742,"children":743},"Developer","\u002Fdeveloper","11.developer",[744,746,750,754],{"title":740,"path":741,"stem":745},"11.developer\u002Findex",{"title":747,"path":748,"stem":749},"Developer Overview","\u002Fdeveloper\u002Foverview","11.developer\u002F1.overview",{"title":751,"path":752,"stem":753},"Personal Access Token Scopes","\u002Fdeveloper\u002Fscopes","11.developer\u002F2.scopes",{"title":755,"path":756,"stem":757},"Personal Access Tokens","\u002Fdeveloper\u002Fpersonal-access-tokens","11.developer\u002F3.personal-access-tokens",{"title":759,"path":760,"stem":761,"children":762},"Bh","\u002Fbh","12.bh",[763,766,770,774],{"title":764,"path":760,"stem":765},"BH CLI","12.bh\u002Findex",{"title":767,"path":768,"stem":769},"BH CLI Overview","\u002Fbh\u002Foverview","12.bh\u002F1.overview",{"title":771,"path":772,"stem":773},"BH CLI Commands","\u002Fbh\u002Fcommands","12.bh\u002F2.commands",{"title":775,"path":776,"stem":777},"BH CLI Examples","\u002Fbh\u002Fexamples","12.bh\u002F3.examples",{"title":779,"path":780,"stem":781,"children":782},"Billing","\u002Fbilling","13.billing",[783,785],{"title":779,"path":780,"stem":784},"13.billing\u002Findex",{"title":786,"path":787,"stem":788},"Billing Overview","\u002Fbilling\u002Foverview","13.billing\u002F1.overview",{"title":790,"path":791,"stem":792,"children":793},"Tools","\u002Ftools","14.tools",[794,796],{"title":790,"path":791,"stem":795},"14.tools\u002Findex",{"title":797,"path":798,"stem":799},"Cookie Lab","\u002Ftools\u002Fcookie-lab","14.tools\u002F1.cookie-lab",{"title":801,"path":802,"stem":803,"children":804},"Site Policies","\u002Fsite-policies","99.site-policies",[805,807,820,824,828,832,836,840,844],{"title":801,"path":802,"stem":806},"99.site-policies\u002Findex",{"title":808,"path":809,"stem":810,"children":811},"Privacy Policy","\u002Fsite-policies\u002Fprivacy-policy","99.site-policies\u002F1.privacy-policy",[812,816],{"title":813,"path":814,"stem":815},"Company Processors","\u002Fsite-policies\u002Fprivacy-policy\u002Fcompany-processors","99.site-policies\u002Fprivacy-policy\u002F1.company-processors",{"title":817,"path":818,"stem":819},"Data Export Instructions","\u002Fsite-policies\u002Fprivacy-policy\u002Fdata-export-instructions","99.site-policies\u002Fprivacy-policy\u002F2.data-export-instructions",{"title":821,"path":822,"stem":823},"Terms of Service","\u002Fsite-policies\u002Fterms-of-service","99.site-policies\u002F2.terms-of-service",{"title":825,"path":826,"stem":827},"California Resident Notice at Collection","\u002Fsite-policies\u002Fccpa","99.site-policies\u002F3.ccpa",{"title":829,"path":830,"stem":831},"Cancellation Policy","\u002Fsite-policies\u002Fcancellation-policy","99.site-policies\u002F4.cancellation-policy",{"title":833,"path":834,"stem":835},"Refund Policy","\u002Fsite-policies\u002Frefund-policy","99.site-policies\u002F5.refund-policy",{"title":837,"path":838,"stem":839},"Taxes on Services","\u002Fsite-policies\u002Ftaxes-on-services","99.site-policies\u002F6.taxes-on-services",{"title":841,"path":842,"stem":843},"Disclaimer","\u002Fsite-policies\u002Fdisclaimer","99.site-policies\u002F7.disclaimer",{"title":845,"path":846,"stem":847,"children":848},"Security","\u002Fsite-policies\u002Fsecurity","99.site-policies\u002Fsecurity\u002Findex",[849,850,854],{"title":845,"path":846,"stem":847},{"title":851,"path":852,"stem":853},"Security Overview","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-overview","99.site-policies\u002Fsecurity\u002F1.security-overview",{"title":855,"path":856,"stem":857},"Security Response","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-response","99.site-policies\u002Fsecurity\u002F2.security-response",1794410312375]