pi-background-tasks 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BACKGROUND-TASKS-INSTRUCTIONS.md +1 -1
- package/README.md +70 -25
- package/TESTING.md +42 -2
- package/TEST_PLAN.md +7 -4
- package/dist/extensions/anthropic-attribution-child.js +4 -0
- package/dist/extensions/anthropic-attribution-child.js.map +1 -0
- package/dist/extensions/anthropic-attribution.js +107 -0
- package/dist/extensions/anthropic-attribution.js.map +1 -0
- package/dist/extensions/background-tasks.js +2 -0
- package/dist/extensions/background-tasks.js.map +1 -0
- package/dist/extensions/delegate-child.js +2 -0
- package/dist/extensions/delegate-child.js.map +1 -0
- package/dist/extensions/fusion-child.js +2 -0
- package/dist/extensions/fusion-child.js.map +1 -0
- package/dist/package.json +5 -0
- package/dist/src/core/anthropic-attribution-path.js +24 -0
- package/dist/src/core/anthropic-attribution-path.js.map +1 -0
- package/dist/src/core/anthropic-attribution.js +2247 -0
- package/dist/src/core/anthropic-attribution.js.map +1 -0
- package/dist/src/core/attested-pi-contract.js +5 -0
- package/dist/src/core/attested-pi-contract.js.map +1 -0
- package/dist/src/core/attested-pi-run.js +749 -0
- package/dist/src/core/attested-pi-run.js.map +1 -0
- package/dist/src/core/canonical-json.js +19 -0
- package/dist/src/core/canonical-json.js.map +1 -0
- package/dist/src/core/common.js +787 -0
- package/dist/src/core/common.js.map +1 -0
- package/dist/src/core/config.js +78 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/context/parent-snapshot.js +75 -0
- package/dist/src/core/context/parent-snapshot.js.map +1 -0
- package/dist/src/core/context/token-budget.js +631 -0
- package/dist/src/core/context/token-budget.js.map +1 -0
- package/dist/src/core/context/visible-conversation-v2.js +390 -0
- package/dist/src/core/context/visible-conversation-v2.js.map +1 -0
- package/dist/src/core/delegate/artifacts.js +357 -0
- package/dist/src/core/delegate/artifacts.js.map +1 -0
- package/dist/src/core/delegate/budget.js +266 -0
- package/dist/src/core/delegate/budget.js.map +1 -0
- package/dist/src/core/delegate/facade-contract.js +7 -0
- package/dist/src/core/delegate/facade-contract.js.map +1 -0
- package/dist/src/core/delegate/hook-contract-evidence.json +18 -0
- package/dist/src/core/delegate/hook-contract.js +124 -0
- package/dist/src/core/delegate/hook-contract.js.map +1 -0
- package/dist/src/core/delegate/launch.js +366 -0
- package/dist/src/core/delegate/launch.js.map +1 -0
- package/dist/src/core/delegate/result-package.js +293 -0
- package/dist/src/core/delegate/result-package.js.map +1 -0
- package/dist/src/core/delegate/runner.js +398 -0
- package/dist/src/core/delegate/runner.js.map +1 -0
- package/dist/src/core/delegate/seed.js +334 -0
- package/dist/src/core/delegate/seed.js.map +1 -0
- package/dist/src/core/delegate/types.js +103 -0
- package/dist/src/core/delegate/types.js.map +1 -0
- package/dist/src/core/durable-fs.js +372 -0
- package/dist/src/core/durable-fs.js.map +1 -0
- package/dist/src/core/extension-api.js +382 -0
- package/dist/src/core/extension-api.js.map +1 -0
- package/dist/src/core/fusion/artifacts.js +654 -0
- package/dist/src/core/fusion/artifacts.js.map +1 -0
- package/dist/src/core/fusion/budget.js +949 -0
- package/dist/src/core/fusion/budget.js.map +1 -0
- package/dist/src/core/fusion/child-protocol.js +176 -0
- package/dist/src/core/fusion/child-protocol.js.map +1 -0
- package/dist/src/core/fusion/claude-cache.js +156 -0
- package/dist/src/core/fusion/claude-cache.js.map +1 -0
- package/dist/src/core/fusion/clean-context.js +64 -0
- package/dist/src/core/fusion/clean-context.js.map +1 -0
- package/dist/src/core/fusion/config.js +349 -0
- package/dist/src/core/fusion/config.js.map +1 -0
- package/dist/src/core/fusion/context.js +184 -0
- package/dist/src/core/fusion/context.js.map +1 -0
- package/dist/src/core/fusion/evaluation.js +696 -0
- package/dist/src/core/fusion/evaluation.js.map +1 -0
- package/dist/src/core/fusion/facade-contract.js +3 -0
- package/dist/src/core/fusion/facade-contract.js.map +1 -0
- package/dist/src/core/fusion/orchestrator.js +867 -0
- package/dist/src/core/fusion/orchestrator.js.map +1 -0
- package/dist/src/core/fusion/output-contract.js +27 -0
- package/dist/src/core/fusion/output-contract.js.map +1 -0
- package/dist/src/core/fusion/pi-child.js +1741 -0
- package/dist/src/core/fusion/pi-child.js.map +1 -0
- package/dist/src/core/fusion/prompts.js +260 -0
- package/dist/src/core/fusion/prompts.js.map +1 -0
- package/dist/src/core/fusion/result-package.js +857 -0
- package/dist/src/core/fusion/result-package.js.map +1 -0
- package/dist/src/core/fusion/source-policy.js +259 -0
- package/dist/src/core/fusion/source-policy.js.map +1 -0
- package/dist/src/core/fusion/types.js +207 -0
- package/dist/src/core/fusion/types.js.map +1 -0
- package/dist/src/core/fusion/web-fetch.js +777 -0
- package/dist/src/core/fusion/web-fetch.js.map +1 -0
- package/dist/src/core/fusion/workflows.js +126 -0
- package/dist/src/core/fusion/workflows.js.map +1 -0
- package/dist/src/core/lazy-module.js +181 -0
- package/dist/src/core/lazy-module.js.map +1 -0
- package/dist/src/core/pi-launch.js +431 -0
- package/dist/src/core/pi-launch.js.map +1 -0
- package/dist/src/core/registry.js +3331 -0
- package/dist/src/core/registry.js.map +1 -0
- package/dist/src/core/reload-shell-owner.js +1396 -0
- package/dist/src/core/reload-shell-owner.js.map +1 -0
- package/dist/src/core/shell-policy.js +80 -0
- package/dist/src/core/shell-policy.js.map +1 -0
- package/dist/src/core/task-durable.js +51 -0
- package/dist/src/core/task-durable.js.map +1 -0
- package/dist/src/core/update-check.js +92 -0
- package/dist/src/core/update-check.js.map +1 -0
- package/dist/src/core/windows-taskkill.js +185 -0
- package/dist/src/core/windows-taskkill.js.map +1 -0
- package/dist/src/delegate-child-extension.js +776 -0
- package/dist/src/delegate-child-extension.js.map +1 -0
- package/dist/src/delegate-extension.js +746 -0
- package/dist/src/delegate-extension.js.map +1 -0
- package/dist/src/extension.js +953 -0
- package/dist/src/extension.js.map +1 -0
- package/dist/src/fusion-child-extension.js +760 -0
- package/dist/src/fusion-child-extension.js.map +1 -0
- package/dist/src/fusion-extension.js +1030 -0
- package/dist/src/fusion-extension.js.map +1 -0
- package/dist/src/ui/background-tasks-manager.js +689 -0
- package/dist/src/ui/background-tasks-manager.js.map +1 -0
- package/dist/src/ui/fusion-model-selector.js +277 -0
- package/dist/src/ui/fusion-model-selector.js.map +1 -0
- package/docs/INDEX.md +35 -33
- package/docs/api/eventbus-v1.md +21 -5
- package/docs/choose-a-workflow.md +2 -0
- package/docs/commands/bg-clear.md +3 -3
- package/docs/commands/bg-update.md +3 -3
- package/docs/commands/bg.md +18 -6
- package/docs/commands/claude-cache.md +4 -4
- package/docs/commands/fusion-models.md +49 -4
- package/docs/commands/fusion.md +3 -3
- package/docs/commands/jobs.md +3 -3
- package/docs/commands/kill.md +3 -3
- package/docs/commands/logs.md +3 -3
- package/docs/commands/task-manager.md +5 -5
- package/docs/concepts/completion-delivery.md +6 -2
- package/docs/getting-started.md +7 -1
- package/docs/manifest.json +228 -42
- package/docs/operations/configuration.md +58 -5
- package/docs/operations/releasing.md +4 -2
- package/docs/operations/testing.md +22 -0
- package/docs/operations/troubleshooting.md +6 -2
- package/docs/read-before-edit.md +44 -31
- package/docs/reference/runtime-contracts.md +87 -51
- package/docs/reference/shortcuts-and-dock.md +28 -14
- package/docs/subsystems/anthropic-attribution.md +23 -11
- package/docs/subsystems/attested-pi-runs.md +12 -7
- package/docs/subsystems/background-task-runtime.md +53 -11
- package/docs/subsystems/child-launch-durability-and-safety.md +28 -9
- package/docs/subsystems/delegation.md +16 -3
- package/docs/subsystems/docs-freshness-gate.md +14 -7
- package/docs/subsystems/fusion.md +36 -11
- package/docs/subsystems/host-ui-and-telemetry.md +22 -9
- package/docs/tools/bg_delegate.md +3 -1
- package/docs/tools/bg_kill.md +3 -1
- package/docs/tools/bg_logs.md +3 -1
- package/docs/tools/bg_result.md +5 -3
- package/docs/tools/bg_run.md +31 -5
- package/docs/tools/bg_run_pi_attested.md +3 -1
- package/docs/tools/bg_status.md +3 -1
- package/docs/tools/fusion_investigate.md +3 -1
- package/docs/tools/fusion_reason.md +3 -1
- package/docs/tools/fusion_research.md +3 -1
- package/docs/tools/fusion_validate.md +3 -1
- package/extensions/anthropic-attribution-child.ts +3 -0
- package/extensions/anthropic-attribution.ts +166 -1
- package/package.json +12 -10
- package/src/core/anthropic-attribution-path.ts +5 -4
- package/src/core/anthropic-attribution.ts +293 -113
- package/src/core/attested-pi-contract.ts +4 -0
- package/src/core/attested-pi-run.ts +468 -81
- package/src/core/canonical-json.ts +21 -0
- package/src/core/common.ts +450 -40
- package/src/core/config.ts +121 -0
- package/src/core/context/visible-conversation-v2.ts +3 -6
- package/src/core/delegate/artifacts.ts +13 -9
- package/src/core/delegate/budget.ts +13 -6
- package/src/core/delegate/facade-contract.ts +6 -0
- package/src/core/delegate/result-package.ts +32 -14
- package/src/core/delegate/runner.ts +129 -58
- package/src/core/delegate/seed.ts +5 -7
- package/src/core/durable-fs.ts +178 -30
- package/src/core/extension-api.ts +36 -8
- package/src/core/fusion/artifacts.ts +17 -16
- package/src/core/fusion/clean-context.ts +8 -5
- package/src/core/fusion/config.ts +2 -1
- package/src/core/fusion/context.ts +2 -6
- package/src/core/fusion/facade-contract.ts +2 -0
- package/src/core/fusion/orchestrator.ts +3 -3
- package/src/core/fusion/prompts.ts +1 -1
- package/src/core/fusion/result-package.ts +259 -72
- package/src/core/fusion/source-policy.ts +43 -17
- package/src/core/lazy-module.ts +215 -0
- package/src/core/pi-launch.ts +390 -65
- package/src/core/registry.ts +2010 -381
- package/src/core/reload-shell-owner.ts +1662 -0
- package/src/core/shell-policy.ts +134 -0
- package/src/core/task-durable.ts +67 -0
- package/src/delegate-extension.ts +404 -144
- package/src/extension.ts +387 -114
- package/src/fusion-extension.ts +202 -96
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,SAAS,EACT,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EAsBf,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGjG,OAAO,EACL,mCAAmC,EACnC,YAAY,EACZ,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yCAAyC,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,wCAAwC,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EACL,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,GAInB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAClG,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAChD,MAAM,qCAAqC,GAAG,GAAG,CAAC;AAClD,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC;AAiB1C,MAAM,OAAO,kCAAmC,SAAQ,KAAK;IAClD,IAAI,GAAG,sCAAsC,CAAC;IAEvD,YAAY,IAAY;QACtB,KAAK,CAAC,gBAAgB,IAAI,+CAA+C,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,oCAAoC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,OAAO,mCAAoC,SAAQ,KAAK;IACnD,IAAI,GAAG,uCAAuC,CAAC;IAExD,YAAY,IAAY,EAAE,SAAiB;QACzC,KAAK,CAAC,6BAA6B,IAAI,UAAU,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAC;IACpD,CAAC;CACF;AAUD,MAAM,CAAC,MAAM,yCAAyC,GACpD,2CAA2C,CAAC;AAC9C,MAAM,CAAC,MAAM,+CAA+C,GAC1D,sDAAsD,CAAC;AA8HzD,SAAS,aAAa;IACpB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,+FAA+F,CAAC,IAAI,CACzG,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAA2D;IAE3D,MAAM,aAAa,GAA2B,EAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;YACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;YACpC,KAAK,CAAC,aAAa,GAAG,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;YACjC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,aAAa;YAAE,SAAS;QAC7B,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC;QAC/D,IAAI,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;IAC1B,OAAO;QACL,aAAa;QACb,IAAI;QACJ,YAAY,EAAE,OAAO,EAAE,EAAE;QACzB,eAAe,EAAE,OAAO,EAAE,QAAQ;QAClC,oBAAoB,EAAE,OAAO,EAAE,aAAa;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,KAAuB,EACvB,SAAuB,eAAe,EAAE;IAExC,OAAO;;gBAEO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0TtC,CAAC;AACF,CAAC;AAuBD,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAwB,KAAK,CAAC;IACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC;IAC7C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,QAAQ;QACpC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjC,gBAAgB,GAAG,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,MAAM,MAAM,GACV,SAAS,KAAK,IAAI;QAChB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC;YAC7E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACvB,CAAC,CAAC,IAAI,CAAC;IACb,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;IACjC,MAAM,OAAO,GACX,UAAU,KAAK,IAAI;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC;YAChF,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,KAAK,IAAI;gBACf,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,UAAU,GAAG,CAAC,GAAW,EAA6B,EAAE;QAC5D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,qBAAqB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAsB,KAAK,CAAC;IACvC,MAAM,KAAK,GAAmB;QAC5B,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;QACtC,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9C,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;QAChD,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;KACnD,CAAC;IACF,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC;QACxB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;IACtF,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC;QACxF,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;IACjC,OAAO,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAqB,KAAK,CAAC;IACtC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,UAAU,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7E,OAAO,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAiBD,SAAS,YAAY;IACnB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,KAAiC,EACjC,KAAa,EACb,OAA+B;IAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAoB,EAAE,EAAE;QAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,sBAAsB;IAChB,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,UAAU,CAAyB;IACnC,YAAY,GAAG,KAAK,CAAC;IACrB,oBAAoB,GAAG,KAAK,CAAC;IACpB,oBAAoB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAChD,yBAAyB,GAAG,IAAI,GAAG,EAAc,CAAC;IAC3D,yBAAyB,GAAG,KAAK,CAAC;IAClC,8BAA8B,CAA+C;IACpE,+BAA+B,CAA4C;IACpF,sCAAsC,GAElC,GAAG,EAAE,GAAE,CAAC,CAAC;IACJ,KAAK,CAAsB;IAC3B,WAAW,CAAgB;IAC3B,QAAQ,CAAa;IACrB,QAAQ,CAAkB;IAC1B,GAAG,CAAoB;IAChC,WAAW,CAAkC;IACpC,cAAc,CAAgC;IAC9C,YAAY,CAAe;IAC3B,GAAG,CAAe;IAClB,cAAc,CAAS;IACvB,cAAc,CAAS;IACvB,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,sBAAsB,CAAS;IAC/B,sBAAsB,CAAS;IAC/B,yBAAyB,CAAS;IAClC,gBAAgB,CAA+B;IACxD,sBAAsB,CAAyC;IACtD,MAAM,CAAyB;IAC/B,QAAQ,CAAa;IACrB,0BAA0B,CAA+B;IACzD,uBAAuB,CAAiC;IACxD,2BAA2B,GAAG,IAAI,OAAO,EAAsC,CAAC;IAChF,iBAAiB,GAAG,IAAI,OAAO,EAA4B,CAAC;IAC5D,iCAAiC,GAAG,IAAI,OAAO,EAG7D,CAAC;IACa,gBAAgB,CAAoC;IAC7D,gBAAgB,CAA2C;IAC3D,mBAAmB,CAAoC;IAE/D,YAAY,OAAsC;QAChD,IAAI,CAAC,+BAA+B,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7D,IAAI,CAAC,sCAAsC,GAAG,OAAO,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,QAAQ;YACX,OAAO,CAAC,QAAQ;gBAChB,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACtB,MAAM,eAAe,GACnB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;oBAC7E,OAAO,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC;QACxD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,gBAAgB,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,gBAAgB,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC;QACxD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,eAAe,CAClE,OAAO,CAAC,sBAAsB,EAC9B,yBAAyB,EACzB,wBAAwB,CACzB,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,eAAe,CAClE,OAAO,CAAC,sBAAsB,EAC9B,0BAA0B,EAC1B,wBAAwB,CACzB,CAAC;QACF,IAAI,CAAC,yBAAyB,GAAG,sBAAsB,CAAC,eAAe,CACrE,OAAO,CAAC,yBAAyB,EACjC,6BAA6B,EAC7B,2BAA2B,CAC5B,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;QACjD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;QACrE,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACnD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,mBAAmB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,MAAM,QAAQ,GAAG,kBAAkB,CACjC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAC/B,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,mBAAmB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,eAAe,CAC5B,KAAyB,EACzB,QAAgB,EAChB,KAAa;QAEb,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mCAAmC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,kBAAkB,CAAC,IAAY;QACrC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAkB;YAC/B,IAAI;YACJ,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,sBAAsB;YACpD,SAAS,EAAE,IAAI,CAAC,sBAAsB;YACtC,aAAa,EAAE,SAAS;YACxB,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YACtE,SAAS,CAAC,UAAU,CAAC,KAAK,CACxB,IAAI,mCAAmC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAC7E,CAAC;QACJ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,oBAAoB,CAAC,SAAwB;QACnD,IAAI,SAAS,CAAC,QAAQ;YAAE,OAAO;QAC/B,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAC1C,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACtC,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,yBAAyB;YAAE,OAAO,EAAE,CAAC;QAChE,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAEO,kBAAkB,CAAC,SAAwB;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,IAAI,MAAM,YAAY,KAAK;YAAE,OAAO,MAAM,CAAC;QAC3C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,OAAO,IAAI,kCAAkC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,mCAAmC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;IAEO,0BAA0B,CAAC,SAAwB,EAAE,GAAG,OAAkB;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/D,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,YAAY;gBAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAC7D,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAC5C,OAAO,IAAI,cAAc,CACvB,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,EACxB,GAAG,OAAO,CAAC,OAAO,qEAAqE,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxJ,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,IAAY,EAAE,SAAyB;QACrE,IAAI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI;YAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC5F,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,MAAM,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,OAAmB,EACnB,SAAwB;QAExB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;YAC5B,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY,CAAC;gBACjE,MAAM,0BAA0B,GAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,wBAAwB;oBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,IAAI;oBAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAe,CAAC,MAAM,KAAK,CAAC,CAAC;gBACpE,IAAI,YAAY,IAAI,0BAA0B,EAAE,CAAC;oBAC/C,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,oBAAoB;YAAE,OAAO;QACtC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,kCAAkC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACnE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,KAAc;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QACD,2EAA2E;QAC3E,uEAAuE;QACvE,kEAAkE;QAClE,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC/F,CAAC;IAED,wBAAwB,CAAC,MAAwC;QAC/D,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACpC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC;YAC7C,IAAI,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,8BAA8B,IAAI,MAAM,CAAC;QACtE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;gBACtF,wEAAwE;gBACxE,yEAAyE;gBACzE,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;oBAClD,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;gBAC9C,CAAC;gBACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GACb,IAAI,CAAC,wBAAwB,KAAK,SAAS;gBAC3C,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC;oBAC/B,IAAI,CAAC,0BAA0B,KAAK,SAAS;oBAC7C,IAAI,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,qBAAqB;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpC,OAAO,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,KAAmC;QAEnC,IAAI,KAAK,CAAC,QAAQ,KAAK,2BAA2B,EAAE,CAAC;YACnD,MAAM,IAAI,mBAAmB,CAC3B,0CAA0C,EAC1C,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,IACE,SAAS,CAAC,QAAQ,KAAK,2BAA2B;gBAClD,SAAS,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;gBAC5C,SAAS,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,EACrC,CAAC;gBACD,MAAM,IAAI,mBAAmB,CAC3B,0CAA0C,EAC1C,kEAAkE,CACnE,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpE,MAAM,IAAI,mBAAmB,CAC3B,wCAAwC,EACxC,mBAAmB,SAAS,CAAC,IAAI,CAAC,EAAE,oCAAoC,CACzE,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC;YACH,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;gBAC5B,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;gBACxC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;gBACvC,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;gBAC3C,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,SAAS,IAAI,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,UAAoD,CAAC;QACzD,OAAO;YACL,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IACE,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;oBAC/C,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;oBACrC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EACvC,CAAC;oBACD,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;gBACD,UAAU,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC5C,CAAC;YACD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;gBACvB,MAAM,KAAK,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;oBAAE,OAAO;gBACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;YACD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE;gBACxB,MAAM,KAAK,GAAG,UAAU,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;oBAAE,OAAO;gBACxD,KAAK,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,KAAmC;QACvD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI;gBAAE,SAAS;YAC/C,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;gBAClD,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBAC9C,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;YACzC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,eAAe,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;YACrE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACvC,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,KAAmC;QACtD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAC3E,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,oCAAoC,IAAI,CAAC,EAAE,EAAE,CAC9C,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;gBAClD,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBAC9C,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;YACzC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/C,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK,UAAU;gBAC1C,CAAC,IAAI,CAAC,6BAA6B,KAAK,IAAI;oBAC1C,IAAI,CAAC,wBAAwB,KAAK,SAAS,CAAC,CACjD,CAAC;YACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACnC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,uDAAuD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrG,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,KAAmC;QACzD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;YAAE,OAAO;QAChD,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO;QAC5F,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACvC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IAEO,mBAAmB,CACzB,SAAqC,EACrC,KAA+C;QAE/C,OAAO,CACL,KAAK,KAAK,SAAS;YACnB,IAAI,CAAC,gBAAgB,KAAK,KAAK;YAC/B,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI;YACrD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI;YACpD,SAAS,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAA0B;QAC/C,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,IAAI,WAAW,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzF,MAAM,KAAK,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO;QAClD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,SAAS;gBAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAAY,EAAE,KAAwB;QACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAY,EAAE,CAAC;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,MAAM,EAAE,MAAM,KAAK,UAAU;gBAAE,SAAS;YAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,8BAA8B,CAAC;YAC5D,QAAQ,CAAC,IAAI,CACX,IAAI,KAAK,CACP,mDAAmD,IAAI,KAAK,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACjH,CACF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,SAAyB;QAClD,OAAO;YACL,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM;YACpC,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,sBAAsB;YAC7E,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,sBAAsB;YACxC,cAAc,EAAE,IAAI,CAAC,yBAAyB;YAC9C,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAAY,EAAE,KAAiC;QACzE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrB,IACE,IAAI,CAAC,QAAQ,KAAK,OAAO;YACzB,KAAK,CAAC,GAAG,KAAK,SAAS;YACvB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/B,KAAK,CAAC,GAAG,GAAG,CAAC,EACb,CAAC;YACD,yEAAyE;YACzE,0EAA0E;YAC1E,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,IAAY,EAAE,SAAwB;QACrE,MAAM,eAAe,GAAG,GAAS,EAAE;YACjC,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QACzF,CAAC,CAAC;QACF,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,eAAe,EAAE,CAAC;QAC3D,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC5E,CAAC,CAAC;IACJ,CAAC;IAEO,uCAAuC,CAAC,IAAY,EAAE,KAAY;QACxE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACtC,IAAI,CAAC,QAAQ,GAAG,KAAK,YAAY,mCAAmC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qCAAqC,IAAI,CAAC,EAAE,gCAAgC,EAC5E,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,GAA0B,EAC1B,OAAe,EACf,UAA4B,EAAE;QAE9B,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACnF,IAAI,WAAW,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,IAAI,mBAAmB,CAC3B,8BAA8B,EAC9B,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC;QACrD,IAAI,aAAa,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,mBAAmB,CAC3B,yCAAyC,EACzC,sCAAsC,CACvC,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,IAAI,aAAa,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,aAAa,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC/C,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAC3C,GAAG,EACH,OAAO,EACP,OAAO,EACP,SAAS,EACT,WAAW,CACZ,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,GAA0B,EAC1B,OAAe,EACf,OAAyB,EACzB,SAAwB,EACxB,KAAmC;QAEnC,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,iBAAiB;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAmB,CAC3B,yCAAyC,EACzC,sCAAsC,CACvC,CAAC;QACJ,CAAC;QACD,IACE,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACnC,IAAI,CAAC,mBAAmB,KAAK,SAAS;YACtC,IAAI,CAAC,gBAAgB,KAAK,KAAK;YAC/B,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAC5C,CAAC;YACD,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,wBAAwB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,uDAAuD,CACxD,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;YACvC,OAAO,CAAC,cAAc,GAAG,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GACZ,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/B,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC;YACtC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACvD,MAAM,WAAW,GACf,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,IAAI,GAAW;YACnB,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB;YAC1B,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,aAAa;YACb,eAAe;YACf,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,KAAK;YACf,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;YACtD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,KAAK;YACzD,cAAc;YACd,iBAAiB,EAAE,KAAK;YACxB,wBAAwB,EAAE,SAAS;YACnC,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,WAAW,EAAE,mBAAmB,CAAC,WAAW,CAAC;YAC7C,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEzB,IAAI,SAAiD,CAAC;QACtD,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,aAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,SAAS,GAAG,gCAAgC,CAAC;gBAC3C,IAAI;gBACJ,QAAQ,EAAE,IAAI,CAAC,mBAAmB;gBAClC,KAAK;gBACL,WAAW;gBACX,UAAU;gBACV,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC1D,UAAU,GAAG,IAAI,CAAC;YAClB,aAAa,GAAG,GAAG,EAAE;gBACnB,IAAI,SAAS,KAAK,SAAS;oBAAE,OAAO;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACjD,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,IAAI,GACR,KAAK,YAAY,mCAAmC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;gBAChF,KAAK,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,SAAkB,EAAE,EAAE;oBAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qDAAqD,IAAI,CAAC,EAAE,gCAAgC,EAC5F,SAAS,CACV,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,aAAa,EAAE,CAAC;YAEzD,MAAM,IAAI,CAAC,0BAA0B,CACnC,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAC5D,SAAS,CACV,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpF,MAAM,IAAI,mBAAmB,CAC3B,gCAAgC,EAChC,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC/D,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBACjD,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;gBACpC,CAAC,CAAC,KAAK,YAAY,KAAK;oBACtB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,YAAqB,CAAC;YAC1B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC9B,MAAM,SAAS,CAAC,WAAW,CACzB,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;4BACjC,OAAO,YAAY,mCAAmC;4BACtD,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,UAAU,EACd,OAAO,CAAC,OAAO,CAChB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,YAAY,GAAG,SAAS,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,UAAU,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;oBACxC,EAAE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAClC,EAAE,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACrC,CAAC,CAAC;gBACH,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;gBAC/E,IAAI,cAAc,EAAE,MAAM,KAAK,UAAU;oBAAE,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;YAClF,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,cAAc,CACtB,CAAC,OAAO,EAAE,YAAY,CAAC,EACvB,uEAAuE,sBAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAC3H,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,GAA0B,EAC1B,OAAe,EACf,OAAyB,EACzB,SAAwB;QAExB,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,iBAAiB;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACvE,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,wBAAwB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAChF,MAAM,oBAAoB,GAAG,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7F,MAAM,iBAAiB,GACrB,oBAAoB,IAAI,WAAW,CAAC,4BAA4B;YAC9D,CAAC,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,cAAc,GAAG,iBAAiB,CAAC;QACvC,IAAI,cAAkC,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,oBAAoB,IAAI,WAAW,CAAC,4BAA4B,EAAE,CAAC;gBACrE,IAAI,iBAAiB,KAAK,SAAS;oBACjC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC;gBACjE,IAAI,CAAC;oBACH,MAAM,SAAS,CACb,cAAc,EACd,8BAA8B,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAC7E,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,CAC1D,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBAClF,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBAC7D,cAAc,GAAG,UAAU,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,aAAa,iBAAiB,EAAE,CAAC;YACxH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,cAAc,KAAK,SAAS;gBAAE,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,UAAU,GACd,cAAc,KAAK,iBAAiB;YAClC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,wBAAwB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;YACvC,OAAO,CAAC,cAAc,GAAG,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GACZ,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/B,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC;YACtC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACvD,MAAM,WAAW,GACf,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvF,MAAM,IAAI,GAAW;YACnB,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB;YAC1B,WAAW;YACX,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,aAAa;YACb,eAAe;YACf,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,CAAC;YACf,OAAO;YACP,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,KAAK;YACf,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;YACtD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,KAAK;YACzD,cAAc;YACd,iBAAiB,EAAE,KAAK;YACxB,wBAAwB,EAAE,SAAS;YACnC,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,WAAW,EAAE,mBAAmB,CAAC,WAAW,CAAC;YAC7C,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,IAAI,cAAc,KAAK,iBAAiB;YAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACvE,IAAI,oBAAoB,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAC;YACtE,IAAI,CAAC,0BAA0B;gBAC7B,WAAW,CAAC,OAAO,KAAK,KAAK;oBAC3B,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,+CAA+C,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAC7B,IAAI,CAAC;oBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,KAAK,IAAI,CAAC,YAAY,CACpB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,CAAC,KAAK,kBAAkB,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACpG,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,2BAA2B,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE;gBAC1D,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,OAAO;gBACnC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,WAAW,EAAE,IAAI;gBACjB,wBAAwB,EAAE,UAAU,CAAC,wBAAwB;aAC9D,CAAC,CAAC;YAEH,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEtC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,mCAAmC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;gBAC9E,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBACrC,IAAI,MAAkB,CAAC;gBACvB,IAAI,KAAyB,CAAC;gBAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC7D,MAAM,GAAG,QAAQ,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACvC,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,mBAAmB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBACrE,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,0BAA0B,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACpF,CAAC;qBAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,MAAM,GAAG,WAAW,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,QAAQ,CAAC;oBAClB,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACvD,KAAK,GAAG,oBAAoB,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChF,CAAC;gBACD,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBACnC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;wBAAE,OAAO;oBACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,mBAAmB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;oBAC1D,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,+BAA+B,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;oBACvE,IAAI,CAAC;wBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACpC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,KAAK,IAAI,CAAC,YAAY,CACpB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,CAAC,KAAK,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;oBACJ,CAAC;gBACH,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,2BAA2B,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,0BAA0B,CACnC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EACrD,SAAS,CACV,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,YAAqB,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;4BACpC,aAAa;4BACb,eAAe;4BACf,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;yBAC1D,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,cAAc,EAAE,CAAC;wBACxB,YAAY,GAAG,cAAc,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,uCAAuC,OAAO,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;gBAAS,CAAC;YACT,2BAA2B,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,GAA0B,EAC1B,OAAgC;QAEhC,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC/D,IAAI,SAAoC,CAAC;QACzC,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;YACjE,OAAO,MAAM,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,GAClB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI;gBAC3C,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;gBACpC,CAAC,CAAC,KAAK,YAAY,kCAAkC;oBACnD,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,SAAS,CAAC;YAClB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,IAAI,CAAC;wBACH,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,CAAC;oBAAC,OAAO,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,gEAAgE,OAAO,CAAC,EAAE,GAAG,EAC7E,WAAW,CACZ,CAAC;oBACJ,CAAC;oBACD,qEAAqE;oBACrE,iEAAiE;oBACjE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAC3B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACnE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAC3B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;gBACJ,CAAC;gBACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1D,CAAC;gBACD,MAAM,cAAc,CAAC;YACvB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,GAA0B,EAC1B,OAAgC,EAChC,SAAwB;QAExB,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAW;YACnB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,yBAAyB;YAClE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,aAAa;YACb,eAAe;YACf,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,KAAK;YACf,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,iBAAiB,EAAE,OAAO,CAAC,UAAU;YACrC,iBAAiB,EAAE,KAAK;YACxB,wBAAwB,EAAE,SAAS;YACnC,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9D,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC;oBACH,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,0BAA0B,sBAAsB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzG,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,2BAA2B,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEnF,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,MAAM,gBAAgB,GAAG,GAAS,EAAE;YAClC,IAAI,kBAAkB;gBAAE,OAAO;YAC/B,kBAAkB,GAAG,IAAI,CAAC;YAC1B,KAAK,OAAO,CAAC,UAAU;iBACpB,IAAI,CACH,GAAG,EAAE;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;gBACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;gBAC7C,OAAO,IAAI,CAAC,YAAY,CACtB,IAAI,EACJ,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EACrD,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC7B,SAAS,EACT,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAClC,CAAC;YACJ,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC;gBACxE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACzF,CAAC,CACF;iBACA,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2DAA2D,IAAI,CAAC,EAAE,GAAG,EACrE,KAAK,CACN,CAAC;YACJ,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,0BAA0B,CACnC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EACrD,SAAS,CACV,CAAC;YACF,gBAAgB,EAAE,CAAC;YACnB,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,gBAAgB,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uFAAuF,IAAI,CAAC,EAAE,GAAG,EACjG,WAAW,CACZ,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAC3B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;YACF,MAAM,IAAI,KAAK,CACb,+CAA+C,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,2BAA2B,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,IAAa;QAChE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACnE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;QAC/E,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACvF,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc;gBAAE,OAAO;YACvD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;YAClC,MAAM,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC;QACX,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,iBAAiB,CACrB,GAA0B,EAC1B,OAAiC;QAEjC,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACvE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,GAA0B,EAC1B,OAAiC,EACjC,SAAwB;QAExB,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,mCAAmC,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAExF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAErD,MAAM,IAAI,GAAW;YACnB,EAAE;YACF,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe;YACxD,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1D,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,aAAa;YACb,eAAe;YACf,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,KAAK;YACf,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;YACtC,QAAQ,EAAE,OAAO,CAAC,KAAK;YACvB,iBAAiB,EAAE,KAAK;YACxB,wBAAwB,EAAE,SAAS;YACnC,uBAAuB,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,IAAI,2BAA2B,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;gBACnF,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,OAAO;gBACnC,KAAK,EAAE,KAAK;gBACZ,wEAAwE;gBACxE,yEAAyE;gBACzE,wEAAwE;gBACxE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEtC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,4BAA4B,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;gBACvE,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBACrC,IAAI,MAAkB,CAAC;gBACvB,IAAI,KAAyB,CAAC;gBAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC7D,MAAM,GAAG,QAAQ,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACvC,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,mBAAmB,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC;gBAClF,CAAC;qBAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,MAAM,GAAG,WAAW,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,oBAAoB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7G,CAAC;gBACD,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBACnC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;wBAAE,OAAO;oBACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,mBAAmB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;oBAClE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,wBAAwB,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;oBAChE,IAAI,CAAC;wBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACpC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,KAAK,IAAI,CAAC,YAAY,CACpB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,CAAC,KAAK,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;oBACJ,CAAC;gBACH,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;YACpC,CAAC;YAED,2BAA2B,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7E,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC3D,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,mCAAmC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;gBAC9E,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;oBACvB,IAAI,CAAC,KAAK,GAAG,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACtE,IAAI,CAAC;wBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACpC,CAAC;oBAAC,MAAM,CAAC;wBACP,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,0BAA0B,CACnC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EACrD,SAAS,CACV,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,YAAqB,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;oBAC1E,CAAC;oBAAC,OAAO,cAAc,EAAE,CAAC;wBACxB,YAAY,GAAG,cAAc,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,gCAAgC,OAAO,KAAK,CAAC,CAAC;YACrE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;gBAAS,CAAC;YACT,2BAA2B,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,GAA0B,EAC1B,OAAmC;QAEnC,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,GAA0B,EAC1B,OAAmC,EACnC,SAAwB;QAExB,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9F,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,wBAAwB,GAC5B,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,MAAM,IAAI,GAAG,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;QAC7E,MAAM,gBAAgB,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,mCAAmC,CACjC,gBAAgB,EAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACb,IAAI,CAAC,QAAQ,EACb,iBAAiB,CAClB,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,EAAE,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACzD,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,EACvD,SAAS,CACV,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACxF,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAChF,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,KAAK;YACvB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;YACvC,OAAO,CAAC,cAAc,GAAG,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,IAAI,GAAW;YACnB,EAAE;YACF,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB;YAC3D,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACvC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,KAAK;YACf,kBAAkB,EAAE,KAAK;YACzB,mBAAmB,EAAE,KAAK;YAC1B,cAAc;YACd,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,UAAU,EAAE;gBACV,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC;YACD,iBAAiB,EAAE,KAAK;YACxB,wBAAwB,EAAE,SAAS;YACnC,uBAAuB,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,kBAAkB,GAAG;YACzB,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,cAAc;YACpB,KAAK,CAAC,eAAe;YACrB,KAAK,CAAC,kBAAkB;SACzB,CAAC;QACF,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,gBAAgB,CACpB,KAAK,CAAC,cAAc,EACpB,qEAAqE,EACrE,eAAe,CAChB,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,cAAc,EAAE,CAAC;gBACxB,YAAY,GAAG,cAAc,CAAC;YAChC,CAAC;YACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,cAAc,CACtB,CAAC,KAAK,EAAE,YAAY,CAAC,EACrB,kEAAkE,sBAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CACtH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,2BAA2B,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CACzC,IAAI,CAAC,KAAK,EACV,IAAI,EACJ;gBACE,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,OAAO;gBACnC,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1C,WAAW,EAAE,IAAI;aAClB,EACD,IAAI,CAAC,QAAQ,EACb,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE/C,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,KAAK,IAAI,CAAC,sBAAsB,CAC9B,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,WAAW,EACX,aAAa,EACb,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,YAAY,EACrB,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,KAAK,CAAC,OAAO,CACd,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBAC9C,IAAI,MAAM,GAAe,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC3F,IAAI,KAAyB,CAAC;gBAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,mBAAmB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBACrE,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBACpE,MAAM,GAAG,QAAQ,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,CAAC;qBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACvD,KAAK,GAAG,oBAAoB,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChF,CAAC;gBACD,KAAK,IAAI,CAAC,sBAAsB,CAC9B,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,WAAW,EACX,aAAa,EACb,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,YAAY,EACrB,MAAM,EACN,IAAI,EACJ,UAAU,EACV,KAAK,CACN,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,2BAA2B,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5F,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBACnC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;wBAAE,OAAO;oBACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,mBAAmB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;oBAC1D,IAAI,CAAC;wBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACpC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,KAAK,IAAI,CAAC,sBAAsB,CAC9B,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,WAAW,EACX,aAAa,EACb,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,YAAY,EACrB,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;oBACJ,CAAC;gBACH,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAqB,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,cAAc,EAAE,CAAC;oBACxB,YAAY,GAAG,cAAc,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO;oBACvC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;oBACpC,CAAC,CAAC,KAAK,YAAY,KAAK;wBACtB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,uCAAuC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,cAAc,CACtB,CAAC,KAAK,EAAE,YAAY,CAAC,EACrB,+DAA+D,sBAAsB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CACnH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,2BAA2B,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,IAAY,EACZ,QAA2B,EAC3B,KAA6D,EAC7D,IAAc,EACd,WAAmB,EACnB,gBAAwB,EACxB,cAA8E,EAC9E,IAAqD,EACrD,WAAmB,EACnB,aAAqB,EACrB,YAAsB,EACtB,YAAsB,EACtB,MAAkB,EAClB,QAAuB,EACvB,MAA6B,EAC7B,KAAc;QAEd,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,MAAM,CAAC;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,WAAW,GAAG,QAAQ,CAAC;YACvB,UAAU,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,WAAW,GAAG,QAAQ,CAAC;YACvB,UAAU,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,UAAU;YAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAExC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAEvD,IAAI,MAAsE,CAAC;QAC3E,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC;gBAC1C,IAAI,CAAC,UAAU,GAAG;oBAChB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;oBAC9B,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;oBAChC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;oBACtC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU;oBACxC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW;iBAC3C,CAAC;gBACF,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;oBAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC1D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAClC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;gBACvC,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,WAAW,GAAG,QAAQ,CAAC;gBACvB,IAAI,CAAC,KAAK,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACnF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC;gBACrF,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;gBACvC,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;YACvC,MAAM,gBAAgB,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC;YACH,IAAI,WAAW,KAAK,WAAW,IAAI,MAAM,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CACzD,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,kBAAkB,EAAE,CAC1B,CAAC;gBACF,MAAM,iBAAiB,GAAmB,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;gBACrF,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,sBAAsB,CAAC;oBACxD,IAAI,EAAE,iBAAiB;oBACvB,KAAK;oBACL,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;oBAChD,IAAI;oBACJ,WAAW;oBACX,gBAAgB;oBAChB,cAAc;oBACd,eAAe;oBACf,YAAY,EAAE,MAAM;oBACpB,IAAI;oBACJ,MAAM,EAAE,WAAW;oBACnB,aAAa;iBACd,CAAC,CAAC;gBACH,MAAM,eAAe,CAAC,KAAK,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,OAAO,gBAAgB,EAAE,CAAC;YAC1B,WAAW,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,KAAK;gBACR,gBAAgB,YAAY,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC1F,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CACnF,CAAC,aAAsB,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,mEAAmE,IAAI,CAAC,EAAE,GAAG,EAC7E,aAAa,CACd,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,UAAkB;QAC5B,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,6BAA6B,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAAc,EAAE,MAAe;QAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC;QAC7D,IACE,IAAI,CAAC,QAAQ,KAAK,OAAO;YACzB,IAAI,CAAC,aAAa,KAAK,SAAS;YAChC,IAAI,CAAC,wCAAwC,KAAK,IAAI;YACtD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,EACxD,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,QAAQ,IAAI,CAAC,EAAE,0CAA0C,cAAc,CAAC,UAAU,CAAC,wDAAwD,CAC5I,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,OAAO,GACX,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAC3D,CAAC,CAAC,MAAM,IAAI,CAAC,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS;gBAChC,CAAC,CAAC,MAAM,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,UAAU,CAAC;gBAC5D,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAC9E,IAAI,iBAAiB,KAAK,SAAS;YAAE,MAAM,iBAAiB,CAAC;QAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;QAC3E,IAAI,mBAAmB,KAAK,SAAS;YAAE,MAAM,mBAAmB,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,QAAQ,IAAI,CAAC,EAAE,wBAAwB,cAAc,CAAC,UAAU,CAAC,qBAAqB,CACvF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,IAAc,EACd,MAAe;QAEf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CACX,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAAY,EACZ,QAAgB,EAChB,IAAa;QAEb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;YACjD,MAAM,MAAM,GAAG,gBAAgB,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,0BAA0B,IAAI,CAAC,UAAU,GAAG,CAAC;YAC7K,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,qBAAqB,IAAI,CAAC,UAAU,GAAG,CAAC;QAClD,CAAC;QACD,OAAO;YACL,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI;aACL;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,MAAoB;QAC5D,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,IAAY,EACZ,KAAqB,EACrB,MAAoB;QAEpB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACvB,MAAM,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC;IACb,CAAC;IAEO,eAAe,CAAC,IAAY,EAAE,IAAY;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QAChE,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAAE,SAAS;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;oBACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;wBAAE,SAAS;oBACpC,MAAM,OAAO,GAA4B,MAAM,CAAC;oBAChD,IAAI,OAAO,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;wBACrD,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC;oBAClE,CAAC;yBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;wBACxD,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC;wBAC7E,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;wBACvE,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;wBACnE,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;oBAC7D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,wFAAwF;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CACvC,4EAA4E,CAC7E,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,UAAU;YAAE,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;QAEhG,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,IAAI,QAAQ,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACvF,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;QAC9F,MAAM,YAAY,GAAG,aAAa;aAC/B,WAAW,EAAE;aACb,WAAW,CAAC,kCAAkC,CAAC,CAAC;QACnD,IAAI,WAAW,GAAG,YAAY;YAAE,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAElE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YACzB,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;IACL,CAAC;IAED,4GAA4G;IACpG,eAAe,CAAC,IAAY,EAAE,IAAoB;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6DAA6D,IAAI,CAAC,EAAE,GAAG,EACvE,KAAK,CACN,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2GAA2G;IACnG,aAAa,CAAC,IAAY,EAAE,MAAc;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACpD,IAAI,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,0BAA0B,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC;YAC3F,MAAM,MAAM,GAAG,+BAA+B,IAAI,CAAC,KAAK,KAAK,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrG,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,uFAAuF;IAC/E,WAAW,CAAC,IAAY,EAAE,IAAY;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,iBAAiB,CACvB,IAAY,EACZ,IAAqB,EACrB,MAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,iFAAiF;YACjF,qFAAqF;YACrF,IAAI,MAAM,KAAK,QAAQ;gBAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;;gBAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,8HAA8H;IACtH,kBAAkB,CAAC,IAAY,EAAE,IAAY;QACnD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvF,IAAI,WAAW,GAAG,CAAC;YAAE,OAAO;QAC5B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,6GAA6G;IACrG,gBAAgB,CAAC,IAAY;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAEO,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAE,MAAsB;QAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAA4B,MAAM,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,IAAI,KAAK,+BAA+B,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,SAAS;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,wFAAwF;QACxF,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,0BAA0B,CAAC,IAAY,EAAE,QAAiB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,IAAI,IAAI,CAAC,wCAAwC,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,wDAAwD,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,mCAAmC,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,iBAAiB,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,iBAAiB,GAAG,OAAO,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,sEAAsE;QACtE,uEAAuE;QACvE,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,GAA+B;YACxC,OAAO;YACP,UAAU;YACV,iBAAiB;YACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW;YACpC,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,KAAK;SACf,CAAC;QACF,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAElD,IAAI,QAAQ,EAAE,CAAC;YACb,wEAAwE;YACxE,qEAAqE;YACrE,IAAI,CAAC,mBAAmB,GAAG,UAAU,CACnC,GAAG,EAAE;gBACH,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;gBACrC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CACxC,CAAC;YACF,sEAAsE;YACtE,yEAAyE;QAC3E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,2BAA2B,CACjC,IAAY,EACZ,KAAiC,EACjC,gBAAyB;QAEzB,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO;QAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAC1C,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACtC,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC;QACrD,IAAI,gBAAgB,IAAI,IAAI,CAAC,wBAAwB,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC;QACzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,gBAAgB,CAAC;YAC9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,KAAK,MAAM,QAAQ,IAAI,SAAS;oBAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iCAAiC,CACvC,IAAY,EACZ,KAAiC;QAEjC,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,cAAc,GAAG,MAAM;gBAC3B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjF,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1F,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,CAAC,cAAc;gBAClB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,mCAAmC,CACzC,IAAY,EACZ,KAAiC,EACjC,KAAY;QAEZ,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO;QAC1B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,yCAAyC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,aAAsB,EAAE,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,+EAA+E,IAAI,CAAC,EAAE,GAAG,EACzF,aAAa,CACd,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qCAAqC,CAC3C,IAAY,EACZ,KAAiC;QAEjC,IAAI,KAAK,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,WAAW,GACf,KAAK,CAAC,cAAc,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,8BAA8B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACnE,IAAI,CAAC,mCAAmC,CACtC,IAAI,EACJ,KAAK,EACL,IAAI,KAAK,CACP,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,kCAAkC,WAAW,yCAAyC,CACnI,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAClC,GAAG,EAAE;YACH,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACpC,IAAI,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,OAAO;YAChE,IAAI,CAAC,qCAAqC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAC1B,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,IAAY,EAAE,KAAiC;QACjF,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,cAAc;YAAE,OAAO;QAClD,6EAA6E;QAC7E,6EAA6E;QAC7E,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO;QAEhE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,mCAAmC,CACtC,IAAI,EACJ,KAAK,EACL,IAAI,KAAK,CACP,uDAAuD,IAAI,CAAC,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yCAAyC,CACvI,CACF,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1F,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,mCAAmC,CACtC,IAAI,EACJ,KAAK,EACL,IAAI,KAAK,CACP,+CAA+C,IAAI,CAAC,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,yCAAyC,CAC9K,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO;QAChE,IAAI,CAAC,qCAAqC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEO,gBAAgB,CAAC,IAAY,EAAE,MAAsB;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;QAC1E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,4EAA4E;QAC5E,sEAAsE;QACtE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1F,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,8BAA8B,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;gBAC3C,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,iBAAiB,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,sBAAsB,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,yEAAyE;YACzE,8DAA8D;YAC9D,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oCAAoC,CAAC,IAAY;QAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,sEAAsE;YACtE,0EAA0E;YAC1E,sEAAsE;YACtE,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC;YACrD,OAAO,IAAI,CAAC,wBAAwB,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,iCAAiC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,UAAU,CAAC;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAEO,6BAA6B,CAAC,IAAY,EAAE,SAAiB;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,WAAW,IAAI,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC;gBACzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChD,IAAI,aAAa,IAAI,CAAC;wBAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC,gBAAgB,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS;gBAAE,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;YACtE,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,IAAY;QACtC,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,KAAc;QACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,QAA4B,EAAE,IAAY;QACvE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC7C,OAAO,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,OAAwB;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,QAAQ,QAAQ,WAAW,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;IACnG,CAAC;IAEO,6BAA6B,CAAC,IAAY;QAChD,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9D,CAAC;IAEO,wBAAwB,CAAC,IAAY;QAC3C,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,IAAY,EAAE,OAAe;QAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,2CAA2C,OAAO,KAAK,CAAC,CAAC;IAClF,CAAC;IAEO,wBAAwB,CAAC,IAAY,EAAE,GAAW,EAAE,MAAc;QACxE,MAAM,OAAO,GACX,mEAAmE,IAAI,CAAC,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC,IAAI;YACjG,GAAG,MAAM,sCAAsC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzE,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,aAAsB,EAAE,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,iFAAiF,IAAI,CAAC,EAAE,GAAG,EAC3F,aAAa,CACd,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,IAAY,EAAE,GAAW,EAAE,MAAc;QACvE,OAAO,IAAI,KAAK,CACd,4DAA4D,IAAI,CAAC,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,yCAAyC,CAC3I,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAAC,IAAY,EAAE,KAAY;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,aAAsB,EAAE,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kFAAkF,IAAI,CAAC,EAAE,GAAG,EAC5F,aAAa,CACd,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,qBAAqB,CAAC;YACnC,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,8BAA8B,CACpC,IAAY,EACZ,GAAW,EACX,KAAuB,EACvB,OAAwB;QAExB,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,2BAA2B,CAC9B,IAAI,EACJ,YAAY,KAAK,uCAAuC,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,uCAAuC,CACtH,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,2BAA2B,CAC9B,IAAI,EACJ,YAAY,KAAK,oDAAoD,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,gCAAgC,CAC5H,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEO,0BAA0B,CAChC,IAAY,EACZ,GAAW,EACX,KAAc,EACd,KAAuB;QAEvB,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;YAAE,OAAO;QACzF,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,oBAAoB,CAAC,IAAY,EAAE,GAAW;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,WAAW,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC;QAElC,IAAI,QAAkC,CAAC;QACvC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,cAAc,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,CAAC,EAAE,0CAA0C,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CACrH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ;aACrB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;gBAAE,OAAO;YACzF,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACrF,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,OAAO,CAAC;QAC3C,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,KAAK,CAAC,cAAc,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC,cAAc,CAAC;QACvE,CAAC,CAAC,CAAC;QACL,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,qBAAqB,CAAC,IAAY,EAAE,GAAW;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC;QAEhE,IAAI,YAAsC,CAAC;QAC3C,IAAI,WAAmD,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,YAAY,GAAG,OAAO,CAAC;YACvB,WAAW,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,YAAY,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,iBAAiB,GAAG,YAAY,CAAC;QACvC,MAAM,gBAAgB,GAAG,WAAW,CAAC;QACrC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;QAClC,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,gEAAgE,IAAI,CAAC,EAAE,GAAG,EAC1E,KAAK,CACN,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/E,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,QAAkC,CAAC;QACvC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAC1C,IAAI,EACJ,GAAG,EACH,2BAA2B,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CACxE,CAAC;YACF,OAAO,KAAK,CAAC,YAAY,CAAC;YAC1B,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,OAAO,CAAC;QAChB,CAAC;QAED,QAAQ,CAAC,IAAI,CACX,CAAC,OAAO,EAAE,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACjF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,iBAAiB,EAAE,CAAC;QACtB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,2BAA2B,CAC9B,IAAI,EACJ,kEAAkE,MAAM,CAAC,GAAG,CAAC,KAAK,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,gCAAgC,CAC7J,CAAC;gBACF,iBAAiB,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAC1C,IAAI,EACJ,GAAG,EACH,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAC3C,CAAC;YACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CACF,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,kBAAkB,CAAC,IAAY,EAAE,GAAW,EAAE,MAAsB;QAC1E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;YAAE,OAAO;QACnD,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO;YACtC,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,eAAe,CACjD,IAAI,CAAC,KAAK,EACV,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5E,CAAC;gBACF,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,aAAsB,EAAE,EAAE;oBAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,mDAAmD,IAAI,CAAC,EAAE,GAAG,EAC7D,aAAa,CACd,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,SAAyB,SAAS;QAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,sBAAsB;gBAAE,OAAO;YACxC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,CAAC,EAAE,KAAK,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,8BAA8B,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QAExD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,oBAAoB,CAAC,CAAC;YACpE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,SAAiB;QAChD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAA+B,CAAC,IAAY,EAAE,SAAiB;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,WAAW,IAAI,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC;gBAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChD,IAAI,aAAa,IAAI,CAAC;wBAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC,qBAAqB,CAAC;gBACjE,CAAC;YACH,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS;gBAAE,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC;YAChF,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,+BAA+B,CAAC,IAAY;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACxC,IAAI,YAAY,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,KAAK,CAAC,YAAY,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,SAAqC,EACrC,KAAmC;QAEnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACtE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;gBAAE,OAAO;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;gBAAE,OAAO;YACxD,IAAI,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0DAA0D,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAC1H,CAAC;YACJ,CAAC;iBAAM,IACL,IAAI,CAAC,kBAAkB;gBACvB,CAAC,IAAI,CAAC,QAAQ;gBACd,CAAC,IAAI,CAAC,YAAY;gBAClB,SAAS,CAAC,iBAAiB,KAAK,SAAS,EACzC,CAAC;gBACD,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBAC5B,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;gBAAE,OAAO;YACxD,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;YAC1C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0EAA0E,IAAI,CAAC,EAAE,GAAG,EACpF,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,IAAY;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACpC,IACE,SAAS,KAAK,SAAS;YACvB,SAAS,CAAC,KAAK,KAAK,UAAU;YAC9B,IAAI,CAAC,6BAA6B,KAAK,IAAI;YAC3C,IAAI,CAAC,wBAAwB,KAAK,SAAS;YAC3C,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;YAC3C,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACnC,KAAK,KAAK,SAAS,EACnB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,gCAAgC,EAC/D,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,+DAA+D,IAAI,CAAC,EAAE,GAAG,EACzE,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gCAAgC,CAAC,IAAY;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,IAAI,aAAa,GAAuD,GAAG,EAAE,GAAE,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAmC,CAAC,OAAO,EAAE,EAAE;YACxE,aAAa,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACnD,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI;YAAE,OAAO;QACnF,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,IAAI,IAAI,CAAC,uBAAuB;YAAE,OAAO;QACxF,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,IAAI,CAAC,0BAA0B,CAC7B,IAAI,EACJ,IAAI,CAAC,8BAA8B,IAAI,mBAAmB,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,IAAY;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3E,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,6DAA6D;QAC7D,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAClF,IAAI,CAAC,0BAA0B,CAC7B,IAAI,EACJ,IAAI,CAAC,8BAA8B,IAAI,mBAAmB,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,IAAY;QAEZ,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,8BAA8B,IAAI,mBAAmB;aACnE,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,KAAK,WAAW,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,gCAAgC,KAAK,eAAe,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC;YACtF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,gCAAgC,IAAI,mBAAmB;aACrE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAEpD,MAAM,WAAW,GAA4C,IAAI,CAAC,IAAI,CACpE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAC5B,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAClD,CAAC;QACF,MAAM,cAAc,GAClB,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,kBAAkB,GACtB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpE,IAAI,EAAE,QAAQ;YACd,MAAM;SACP,CAAC,CAAC,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAEtF,2EAA2E;QAC3E,8CAA8C;QAC9C,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,8BAA8B,IAAI,mBAAmB;aACnE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,qBAAqB,CAAC,IAAY;QACxC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3E,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,0BAA0B,CAC7B,IAAI,EACJ,IAAI,CAAC,8BAA8B,IAAI,mBAAmB,CAC3D,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,SAAkB,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAErC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;YACvC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3F,qEAAqE;gBACrE,uEAAuE;gBACvE,gEAAgE;gBAChE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,gCAAgC,CAAC,IAAY;QACnD,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;YAClD,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC9C,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC;QAC5C,OAAO,IAAI,CAAC,gCAAgC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,0BAA0B,CAChC,IAAY,EACZ,MAAwC,EACxC,KAAe,EACf,GAAG,GAAG,IAAI;QAEV,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;YAClD,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC9C,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI;YAAE,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAC7E,IAAI,IAAI,CAAC,wBAAwB,KAAK,WAAW;YAAE,OAAO;QAC1D,IAAI,IAAI,CAAC,wBAAwB,KAAK,WAAW;YAAE,OAAO;QAE1D,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC;QAC5C,IAAI,CAAC,gCAAgC,GAAG,MAAM,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtF,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yDAAyD,IAAI,CAAC,EAAE,KAAK,MAAM,WAAW,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,iCAAiC,CAAC,iBAAiB,MAAM,EAAE,CACjM,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,wBAAwB,CAAC,KAAc;QAC7C,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,IAAI,qCAAqC;YAAE,OAAO,OAAO,CAAC;QAC5E,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,qCAAqC,GAAG,CAAC,CAAC,GAAG,CAAC;IAC3E,CAAC;IAEO,4BAA4B,CAAC,IAAY,EAAE,KAAc;QAC/D,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS;YAAE,OAAO;QACxD,IAAI,KAAK,YAAY,yCAAyC,EAAE,CAAC;YAC/D,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,IAAI,CAAC,0BAA0B,CAC7B,IAAI,EACJ,IAAI,CAAC,8BAA8B,IAAI,mBAAmB,EAC1D,KAAK,CACN,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,uBAAuB,IAAI,iCAAiC,EAAE,CAAC;YACtE,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,sDAAsD,IAAI,CAAC,EAAE,aAAa,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,iCAAiC,CAAC,gBAAgB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAClN,CAAC;QACF,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS;YAAE,OAAO;QAC1D,IAAI,CAAC,0BAA0B,GAAG,UAAU,CAAC,GAAG,EAAE;YAChD,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;YAC5C,IACE,IAAI,CAAC,yBAAyB;gBAC9B,IAAI,CAAC,wBAAwB,KAAK,SAAS;gBAC3C,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;gBAExE,OAAO;YACT,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,EAAE,6BAA6B,CAAC,CAAC;QAClC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC3E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,GACR,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,2HAA2H;YAC7H,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW;gBAC3B,CAAC,CAAC,yCAAyC,IAAI,CAAC,MAAM,CAAC,WAAW,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,sCAAsC;gBAC3J,CAAC,CAAC,gBAAgB,IAAI,CAAC,MAAM,wCAAwC,IAAI,CAAC,MAAM,CAAC,WAAW,gBAAgB,CAAC;QACnH,MAAM,OAAO,GAAG;YACd,gCAAgC;YAChC,cAAc,IAAI,CAAC,EAAE,YAAY;YACjC,gBAAgB,SAAS,CAAC,QAAQ,CAAC,cAAc;YACjD,aAAa,IAAI,CAAC,MAAM,WAAW;YACnC,IAAI;YACJ,KAAK;YACL,kBAAkB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB;YAC5D,cAAc,SAAS,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY;YACjG,eAAe,SAAS,CAAC,QAAQ,CAAC,aAAa;YAC/C,iCAAiC;SAClC;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,IAAI,CAAC;YACH,IAAI,CAAC,0BAA0B,CAC7B;gBACE,UAAU,EAAE,8BAA8B;gBAC1C,OAAO;gBACP,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;aACxB,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,CACjE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,mDAAmD,IAAI,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAY,EACZ,MAAkB,EAClB,QAAuB,EACvB,MAAsB,EACtB,KAAc;QAEd,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,MAAM,CAAC;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,WAAW,GAAG,QAAQ,CAAC;YACvB,UAAU,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,WAAW,GAAG,QAAQ,CAAC;YACvB,UAAU,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;QAE7B,wEAAwE;QACxE,2EAA2E;QAC3E,uEAAuE;QACvE,2EAA2E;QAC3E,4CAA4C;QAC5C,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,6EAA6E;gBAC7E,4EAA4E;gBAC5E,wEAAwE;gBACxE,iEAAiE;gBACjE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;gBAAE,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,WAAW,GAAG,QAAQ,CAAC;YACvB,MAAM,OAAO,GACX,aAAa,YAAY,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACjF,UAAU,GAAG,UAAU;gBACrB,CAAC,CAAC,GAAG,UAAU,qCAAqC,OAAO,EAAE;gBAC7D,CAAC,CAAC,mCAAmC,OAAO,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,UAAU;YAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC5B,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,WAAW,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,mCAAmC,aAAa,YAAY,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACjI,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,mDAAmD,IAAI,CAAC,EAAE,GAAG,EAC7D,aAAa,CACd,CAAC;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,UAAmB,EAAE,EAAE;gBAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,mEAAmE,IAAI,CAAC,EAAE,GAAG,EAC7E,UAAU,CACX,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0DAA0D,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAC1H,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,2EAA2E;YAC3E,4EAA4E;YAC5E,IAAI,CAAC;gBACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,iBAAiB,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,8CAA8C,IAAI,CAAC,EAAE,GAAG,EACxD,iBAAiB,CAClB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,iEAAiE,IAAI,CAAC,EAAE,GAAG,EAC3E,aAAa,CACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QACnD,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;aACjF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;gBAChD,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF","sourcesContent":["import { spawn as nodeSpawn, type SpawnOptions } from 'node:child_process';\nimport { randomBytes } from 'node:crypto';\nimport { createWriteStream, existsSync } from 'node:fs';\nimport { mkdir, realpath, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { Api, Model } from '@earendil-works/pi-ai';\nimport type { ExtensionContext } from '@earendil-works/pi-coding-agent';\nimport { formatSize } from '@earendil-works/pi-coding-agent';\nimport {\n boundedRead,\n deriveTaskNameFromCommand,\n escapeXml,\n formatAgentActivityLine,\n formatDuration,\n isJsonObject,\n normalizeTaskName,\n parseAgentActivity,\n parseJsonText,\n rejectSurvivalForTaskKind,\n resolveShellPolicy,\n sanitizePathSegment,\n shellInvocationForPolicy,\n shellPolicySnapshot,\n shellQuote,\n snapshot,\n taskDisplayName,\n type BgLogsDetails,\n type BgTask,\n type BgTaskSnapshot,\n type JsonObject,\n type KillKind,\n type ReloadShellActivationClaimV1,\n type ReloadShellActivationLeaseV1,\n type ReloadShellHostAdapterV1,\n type ReloadShellIdentityV1,\n type ReloadShellOwnerHubV1,\n type ReloadableShellExecutionV1,\n type ResolvedShellPolicy,\n type StartAttestedPiTaskOptions,\n type StartDelegateTaskOptions,\n type StartManagedTaskOptions,\n type StartTaskOptions,\n type TaskContextUsage,\n type TaskStatus,\n type TaskTokenUsage,\n type TaskToolUsage,\n type TerminalPublicationAbandonReason,\n ReloadSurvivalError,\n} from './common.js';\nimport {\n ATTESTED_GIT_KILL_GRACE_MS,\n ATTESTED_GIT_MAX_OUTPUT_BYTES,\n ATTESTED_TASK_ID_PATTERN,\n} from './attested-pi-contract.js';\nimport type { AttestedGitSpawn, GitCommandOptions } from './attested-pi-run.js';\nimport { closeAndFsyncOutputStream, writeFileFsynced, writeJsonAtomic } from './task-durable.js';\n\ntype AttestedPiRuntime = typeof import('./attested-pi-run.js');\nimport {\n assertWindowsCommandLineWithinLimit,\n piLaunchArgv,\n resolvePiLaunch,\n type PiLaunchSpec,\n} from './pi-launch.js';\nimport { BackgroundTaskExtensionServiceClosedError } from './extension-api.js';\nimport { resolveAnthropicAttributionExtensionPath } from './anthropic-attribution-path.js';\nimport {\n createReloadableShellExecutionV1,\n RELOAD_SHELL_OWNER_PROTOCOL,\n} from './reload-shell-owner.js';\nimport {\n runWindowsTaskkill,\n type TaskkillOutcome,\n type WindowsKillPhase,\n type WindowsTaskkillOptions,\n} from './windows-taskkill.js';\n\nexport const MAX_OUTPUT_BYTES = Number(process.env['PI_BG_MAX_OUTPUT_BYTES'] ?? 20 * 1024 * 1024);\nexport const KILL_GRACE_MS = 3000;\nexport const STOP_WAIT_MS = KILL_GRACE_MS + 1500;\nexport const MAX_RECENT_TASKS = 100;\nexport const TERMINAL_PUBLICATION_MAX_ATTEMPTS = 3;\nexport const TERMINAL_PUBLICATION_RETRY_MS = 100;\nexport const TASK_ADMISSION_TIMEOUT_MS = 30_000;\nconst TERMINAL_PUBLICATION_DIAGNOSTIC_CHARS = 500;\nconst TELEMETRY_BUFFER_CHARS = 512 * 1024;\n\nexport type TerminalPublicationClosureReason = Extract<\n TerminalPublicationAbandonReason,\n 'registry_shutdown' | 'publisher_closed'\n>;\n\ntype TerminalPublicationGateOutcome =\n | { readonly kind: 'released' }\n | { readonly kind: 'rejected'; readonly error: unknown }\n | { readonly kind: 'closed'; readonly reason: TerminalPublicationAbandonReason };\n\ninterface TerminalPublicationAbandonSignal {\n readonly promise: Promise<TerminalPublicationAbandonReason>;\n readonly resolve: (reason: TerminalPublicationAbandonReason) => void;\n}\n\nexport class BackgroundTaskAdmissionClosedError extends Error {\n readonly code = 'pi_background_tasks_admission_closed';\n\n constructor(kind: string) {\n super(`Cannot start ${kind} after background task admissions have closed`);\n this.name = 'BackgroundTaskAdmissionClosedError';\n }\n}\n\nexport class BackgroundTaskAdmissionTimeoutError extends Error {\n readonly code = 'pi_background_tasks_admission_timeout';\n\n constructor(kind: string, timeoutMs: number) {\n super(`Timed out while preparing ${kind} after ${String(timeoutMs)}ms`);\n this.name = 'BackgroundTaskAdmissionTimeoutError';\n }\n}\n\ninterface TaskAdmission {\n readonly kind: string;\n readonly controller: AbortController;\n readonly deadlineAt: number;\n readonly timeoutMs: number;\n timeoutHandle: NodeJS.Timeout | undefined;\n released: boolean;\n}\nexport const WIN32_CMD_PI_TELEMETRY_UNAVAILABLE_REASON =\n 'win32-cmd-cannot-safely-intercept-pi-argv';\nexport const NON_POSIX_SHELL_PI_TELEMETRY_UNAVAILABLE_REASON =\n 'user-non-posix-shell-cannot-safely-intercept-pi-argv';\n\nexport interface BackgroundTaskModelRegistry\n extends Pick<ExtensionContext['modelRegistry'], 'getAll'> {\n find?: (provider: string, modelId: string) => Model<Api> | undefined;\n isUsingOAuth?: (model: Model<Api>) => boolean;\n}\n\nexport interface BackgroundTaskContext {\n cwd: string;\n sessionId?: string;\n modelRegistry: BackgroundTaskModelRegistry;\n model?: ExtensionContext['model'] | undefined;\n}\n\ninterface OutputEventSource {\n on(event: 'data', listener: (data: Buffer | string) => void): unknown;\n}\n\ninterface ChildStdin {\n write(data: Buffer, callback: (error?: Error | null) => void): boolean;\n end(callback?: () => void): unknown;\n once(event: 'error', listener: (error: Error) => void): unknown;\n}\n\nexport interface BackgroundTaskChildProcess {\n pid?: number | undefined;\n stdin?: ChildStdin | null | undefined;\n stdout?: OutputEventSource | null | undefined;\n stderr?: OutputEventSource | null | undefined;\n kill(signal?: NodeJS.Signals): boolean;\n on(event: 'error', listener: (error: Error) => void): unknown;\n on(\n event: 'close',\n listener: (code: number | null, signal: NodeJS.Signals | null) => void,\n ): unknown;\n}\n\nexport type BackgroundTaskSpawn = (\n command: string,\n args: string[],\n options: SpawnOptions,\n) => BackgroundTaskChildProcess;\n\ntype KillProcessFn = (pid: number, signal?: NodeJS.Signals | number) => boolean;\ntype KillTreeFn = (\n pid: number,\n phase: WindowsKillPhase,\n signal?: AbortSignal,\n) => Promise<TaskkillOutcome>;\n\ninterface PosixProcessGroupKillState {\n readonly groupId: number;\n readonly completion: Promise<void>;\n readonly resolveCompletion: () => void;\n readonly deadlineAt: number;\n forceAttempted: boolean;\n settled: boolean;\n failure?: Error | undefined;\n lastProbeError?: Error | undefined;\n verificationTimer?: NodeJS.Timeout | undefined;\n failureListeners?: Array<(error: Error) => void> | undefined;\n}\n\ninterface WindowsKillState {\n softController?: AbortController | undefined;\n softPromise?: Promise<void> | undefined;\n forcePromise?: Promise<void> | undefined;\n forceFailure?: Error | undefined;\n forceFailureListeners?: Array<(error: Error) => void> | undefined;\n}\n\nexport interface CompletionNotificationMessage {\n customType: 'background-task-notification';\n content: string;\n display: true;\n details: BgTaskSnapshot;\n}\n\nexport interface CompletionNotificationOptions {\n deliverAs: 'followUp';\n triggerTurn: boolean;\n}\n\nexport type CompletionNotificationSender = (\n message: CompletionNotificationMessage,\n options: CompletionNotificationOptions,\n) => void;\n\nexport interface BackgroundTaskRegistryOptions {\n onChange?: () => void;\n sendCompletionNotification: CompletionNotificationSender;\n publishTerminal?: (task: BgTaskSnapshot) => void;\n spawn?: BackgroundTaskSpawn;\n killProcess?: KillProcessFn;\n killTree?: KillTreeFn;\n platform?: NodeJS.Platform;\n env?: NodeJS.ProcessEnv;\n shellPolicy?: ResolvedShellPolicy;\n makeTaskId?: () => string;\n now?: () => number;\n maxOutputBytes?: number;\n maxRecentTasks?: number;\n killGraceMs?: number;\n stopWaitMs?: number;\n taskAdmissionTimeoutMs?: number;\n attestedGitKillGraceMs?: number;\n attestedGitMaxOutputBytes?: number;\n attestedGitSpawn?: AttestedGitSpawn;\n logger?: Pick<Console, 'error'>;\n reloadShellOwner?: ReloadShellOwnerHubV1;\n}\n\ninterface RuntimeDir {\n abs: string;\n display: string;\n}\n\ninterface ModelWindowIndex {\n byQualifiedId: Record<string, number>;\n byId: Record<string, number>;\n defaultModel?: string | undefined;\n defaultProvider?: string | undefined;\n defaultContextWindow?: number | undefined;\n}\n\nfunction defaultTaskId(): string {\n return `b${randomBytes(4).toString('hex')}`;\n}\n\nfunction dirNameFromDisplay(path: string): string {\n const parts = path.split(/[\\\\/]/);\n return parts.length >= 2 ? (parts.at(-2) ?? '') : '';\n}\n\nexport function commandMayLaunchPiAgent(\n command: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n if (env['PI_BG_DISABLE_PI_TELEMETRY'] === '1') return false;\n return /(^|[\\s;&|()])pi(?=\\s)(?=[^\\n;&|]*(?:\\s-p(?:\\s|$)|\\s--print(?:\\s|$)|\\s--mode(?:=|\\s+)json\\b))/m.test(\n command,\n );\n}\n\nexport function buildModelWindowIndex(\n ctx: Pick<BackgroundTaskContext, 'modelRegistry' | 'model'>,\n): ModelWindowIndex {\n const byQualifiedId: Record<string, number> = {};\n const candidatesById = new Map<string, Set<number>>();\n for (const model of ctx.modelRegistry.getAll()) {\n const contextWindow =\n typeof model.contextWindow === 'number' &&\n Number.isFinite(model.contextWindow) &&\n model.contextWindow > 0\n ? Math.floor(model.contextWindow)\n : undefined;\n if (!contextWindow) continue;\n byQualifiedId[`${model.provider}/${model.id}`] = contextWindow;\n let candidates = candidatesById.get(model.id);\n if (!candidates) {\n candidates = new Set<number>();\n candidatesById.set(model.id, candidates);\n }\n candidates.add(contextWindow);\n }\n const byId: Record<string, number> = {};\n for (const [id, windows] of candidatesById) {\n const onlyWindow = windows.values().next();\n if (windows.size === 1 && !onlyWindow.done) byId[id] = onlyWindow.value;\n }\n const current = ctx.model;\n return {\n byQualifiedId,\n byId,\n defaultModel: current?.id,\n defaultProvider: current?.provider,\n defaultContextWindow: current?.contextWindow,\n };\n}\n\nexport function createPiTelemetryWrapperSource(\n index: ModelWindowIndex,\n launch: PiLaunchSpec = resolvePiLaunch(),\n): string {\n return `#!/usr/bin/env node\nconst { spawn } = require(\"node:child_process\");\nconst index = ${JSON.stringify(index)};\nconst launch = ${JSON.stringify(launch)};\nconst WINDOWS_COMMAND_LINE_LIMIT = 32767;\n\nconst tokenUsage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 };\nlet costTotal = 0;\nlet hasCostTotal = false;\nlet agentModel;\nconst toolUsage = { total: 0, failed: 0, byName: {} };\nconst seenToolCallIds = new Set();\nconst failedToolCallIds = new Set();\n\nfunction nonNegativeInteger(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : 0;\n}\n\nfunction normalizeUsage(usage) {\n if (!usage) return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 };\n const input = nonNegativeInteger(usage.input);\n const output = nonNegativeInteger(usage.output);\n const cacheRead = nonNegativeInteger(usage.cacheRead);\n const cacheWrite = nonNegativeInteger(usage.cacheWrite);\n const explicitTotal = nonNegativeInteger(usage.totalTokens);\n const totalTokens = explicitTotal || (input + output + cacheRead + cacheWrite);\n const cost = usage.cost && typeof usage.cost.total === \"number\" && Number.isFinite(usage.cost.total) && usage.cost.total >= 0\n ? usage.cost.total\n : undefined;\n return { input, output, cacheRead, cacheWrite, totalTokens, cost };\n}\n\nfunction addTokenUsage(usage) {\n const normalized = normalizeUsage(usage);\n if (!normalized.totalTokens) return normalized;\n tokenUsage.input += normalized.input;\n tokenUsage.output += normalized.output;\n tokenUsage.cacheRead += normalized.cacheRead;\n tokenUsage.cacheWrite += normalized.cacheWrite;\n tokenUsage.totalTokens += normalized.totalTokens;\n if (normalized.cost !== undefined) {\n costTotal += normalized.cost;\n hasCostTotal = true;\n }\n return normalized;\n}\n\nfunction currentTokenUsage() {\n if (!tokenUsage.totalTokens) return undefined;\n const out = { ...tokenUsage };\n if (hasCostTotal) out.costTotal = costTotal;\n return out;\n}\n\nfunction markToolStarted(id, name) {\n const key = id ? String(id) : undefined;\n if (key && seenToolCallIds.has(key)) return;\n if (key) seenToolCallIds.add(key);\n const toolName = name ? String(name) : \"unknown\";\n toolUsage.total += 1;\n toolUsage.byName[toolName] = (toolUsage.byName[toolName] || 0) + 1;\n}\n\nfunction markToolFailed(id) {\n const key = id ? String(id) : undefined;\n if (key && failedToolCallIds.has(key)) return;\n if (key) failedToolCallIds.add(key);\n toolUsage.failed += 1;\n}\n\nfunction currentToolUsage() {\n if (!toolUsage.total && !toolUsage.failed) return undefined;\n return { total: toolUsage.total, failed: toolUsage.failed, byName: { ...toolUsage.byName } };\n}\n\nfunction renderWindowsArgument(value) {\n if (value.length > 0 && !/[ \\\\t\\\"]/.test(value)) return value;\n let rendered = \"\\\\\\\"\";\n let backslashes = 0;\n for (const char of value) {\n if (char === \"\\\\\\\\\") {\n backslashes += 1;\n continue;\n }\n if (char === \"\\\\\\\"\") {\n rendered += \"\\\\\\\\\".repeat(backslashes * 2 + 1);\n rendered += \"\\\\\\\"\";\n backslashes = 0;\n continue;\n }\n if (backslashes > 0) {\n rendered += \"\\\\\\\\\".repeat(backslashes);\n backslashes = 0;\n }\n rendered += char;\n }\n if (backslashes > 0) rendered += \"\\\\\\\\\".repeat(backslashes * 2);\n rendered += \"\\\\\\\"\";\n return rendered;\n}\n\nfunction assertWindowsLimit(stage, args) {\n if (process.platform !== \"win32\") return;\n const measured = [launch.executable, ...launch.argvPrefix, ...args].map(renderWindowsArgument).join(\" \").length + 1;\n if (measured > WINDOWS_COMMAND_LINE_LIMIT) {\n const error = new Error(\"pi_command_line_too_long: \" + stage + \" measured UTF-16 command line length \" + String(measured) + \" exceeds limit \" + String(WINDOWS_COMMAND_LINE_LIMIT));\n error.code = \"pi_command_line_too_long\";\n throw error;\n }\n}\n\nfunction emitUnifiedTelemetry(payload) {\n const out = { type: \"background-task-telemetry\", ...payload };\n const tokens = currentTokenUsage();\n const tools = currentToolUsage();\n if (tokens && !out.tokenUsage) out.tokenUsage = tokens;\n if (tools && !out.toolUsage) out.toolUsage = tools;\n if (agentModel && !out.model) out.model = agentModel;\n process.stdout.write(JSON.stringify(out) + \"\\\\n\");\n}\n\nfunction emitActivity(activity) {\n process.stdout.write(JSON.stringify({ type: \"background-task-activity\", ...activity }) + \"\\\\n\");\n}\n\nfunction summarizeArgs(args) {\n if (!args || typeof args !== \"object\") return \"\";\n const pick = (value) => {\n if (typeof value === \"string\" && value.trim()) return value.trim().slice(0, 200);\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n return undefined;\n };\n const preferred = [\"path\", \"file_path\", \"file\", \"filename\", \"command\", \"cmd\", \"pattern\", \"query\", \"url\", \"name\", \"value\", \"text\", \"message\"];\n for (const key of preferred) { const summary = pick(args[key]); if (summary) return summary; }\n for (const key of Object.keys(args)) { const summary = pick(args[key]); if (summary) return summary; }\n return \"\";\n}\n\nfunction emitAssistantActivity(message) {\n const content = message && Array.isArray(message.content) ? message.content : [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n if (part.type === \"text\" && typeof part.text === \"string\" && part.text.trim()) {\n emitActivity({ kind: \"assistant_text\", text: part.text });\n } else if (part.type === \"thinking\" || part.type === \"reasoning\") {\n const text = typeof part.text === \"string\" ? part.text : (typeof part.thinking === \"string\" ? part.thinking : \"\");\n if (text.trim()) emitActivity({ kind: \"reasoning\", text: text });\n }\n }\n}\n\nfunction resolveModelName(fromMessage, fromArgs, providerFromArgs) {\n const message = fromMessage ? String(fromMessage) : \"\";\n const args = fromArgs ? String(fromArgs) : \"\";\n const bareOf = (value) => value.includes(\"/\") ? value.split(\"/\").pop() : value;\n if (message && message.includes(\"/\")) return message;\n if (args && args.includes(\"/\") && (!message || bareOf(args) === message)) return args;\n const primary = message || args;\n if (!primary) return undefined;\n if (primary.includes(\"/\")) return primary;\n if (providerFromArgs) return providerFromArgs + \"/\" + primary;\n if (index.defaultProvider) return index.defaultProvider + \"/\" + primary;\n return primary;\n}\n\nfunction parseInvocation(argv) {\n const out = [];\n let model;\n let provider;\n let hasMode = false;\n let modeValue;\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"-p\" || arg === \"--print\") continue;\n if (arg === \"--mode\") {\n hasMode = true;\n modeValue = argv[i + 1];\n out.push(arg);\n if (i + 1 < argv.length) out.push(argv[++i]);\n continue;\n }\n if (arg.startsWith(\"--mode=\")) {\n hasMode = true;\n modeValue = arg.slice(\"--mode=\".length);\n out.push(arg);\n continue;\n }\n if (arg === \"--model\" && i + 1 < argv.length) {\n model = argv[i + 1];\n out.push(arg, argv[++i]);\n continue;\n }\n if (arg.startsWith(\"--model=\")) model = arg.slice(\"--model=\".length);\n if (arg === \"--provider\" && i + 1 < argv.length) {\n provider = argv[i + 1];\n out.push(arg, argv[++i]);\n continue;\n }\n if (arg.startsWith(\"--provider=\")) provider = arg.slice(\"--provider=\".length);\n out.push(arg);\n }\n if (hasMode && modeValue !== \"json\") return { args: argv, parseJson: false, model, provider };\n if (!hasMode) out.unshift(\"--mode\", \"json\");\n return { args: out, parseJson: true, model, provider };\n}\n\nfunction resolveWindow(modelFromArgs, providerFromArgs, modelFromMessage) {\n const candidates = [];\n if (modelFromMessage) candidates.push(modelFromMessage);\n if (modelFromArgs) candidates.push(modelFromArgs);\n if (modelFromArgs && providerFromArgs && !modelFromArgs.includes(\"/\")) candidates.push(providerFromArgs + \"/\" + modelFromArgs);\n if (modelFromArgs && index.defaultProvider && !modelFromArgs.includes(\"/\")) candidates.push(index.defaultProvider + \"/\" + modelFromArgs);\n if (index.defaultModel && index.defaultProvider) candidates.push(index.defaultProvider + \"/\" + index.defaultModel);\n for (const candidate of candidates) {\n if (!candidate) continue;\n if (index.byQualifiedId[candidate]) return index.byQualifiedId[candidate];\n const bare = String(candidate).includes(\"/\") ? String(candidate).split(\"/\").pop() : String(candidate);\n if (bare && index.byId[bare]) return index.byId[bare];\n }\n return index.defaultContextWindow || 0;\n}\n\nfunction countToolCallsFromMessage(message) {\n const content = message && Array.isArray(message.content) ? message.content : [];\n for (const part of content) {\n if (part && part.type === \"toolCall\") markToolStarted(part.id, part.name);\n }\n}\n\nfunction emitMessageTelemetry(message, modelFromArgs, providerFromArgs) {\n const usage = addTokenUsage(message && message.usage);\n const resolvedModel = resolveModelName(message && message.model, modelFromArgs, providerFromArgs);\n if (resolvedModel) agentModel = resolvedModel;\n const contextWindow = resolveWindow(modelFromArgs, providerFromArgs, message && message.model);\n const contextUsage = usage.totalTokens && contextWindow\n ? { tokens: usage.totalTokens, contextWindow, percent: (usage.totalTokens / contextWindow) * 100 }\n : undefined;\n if (contextUsage) process.stdout.write(JSON.stringify({ type: \"background-task-context-usage\", ...contextUsage }) + \"\\\\n\");\n const payload = {};\n if (contextUsage) payload.contextUsage = contextUsage;\n emitUnifiedTelemetry(payload);\n}\n\nfunction emitToolTelemetry() {\n emitUnifiedTelemetry({});\n}\n\nconst parsed = parseInvocation(process.argv.slice(2));\nlet child;\nlet buffer = \"\";\ntry {\n const childArgs = [...launch.argvPrefix, ...parsed.args];\n assertWindowsLimit(\"telemetry-wrapper-pi\", parsed.args);\n child = spawn(launch.executable, childArgs, { stdio: [\"ignore\", \"pipe\", \"pipe\"], env: process.env, shell: false, windowsHide: true });\n} catch (error) {\n const message = error && typeof error.message === \"string\" ? error.message : String(error);\n process.stderr.write(\"[pi-bg telemetry wrapper error: \" + message + \"]\\\\n\");\n process.exitCode = 1;\n}\n\nif (child) {\n if (!parsed.parseJson) {\n child.stdout.pipe(process.stdout);\n } else {\n child.stdout.on(\"data\", (chunk) => {\n buffer += chunk.toString();\n const lines = buffer.split(\"\\\\n\");\n buffer = lines.pop() || \"\";\n for (const line of lines) processLine(line);\n });\n }\n child.stderr.on(\"data\", (chunk) => process.stderr.write(chunk));\n child.on(\"error\", (error) => {\n process.stderr.write(\"[pi-bg telemetry wrapper error: \" + error.message + \"]\\\\n\");\n });\n child.on(\"close\", (code, signal) => {\n if (parsed.parseJson && buffer.trim()) processLine(buffer);\n // Never call process.exit() here: the final message telemetry may still be\n // buffered on wrapper stdout, and forced exit can publish a stale context\n // snapshot from the preceding assistant turn. exitCode lets Node drain the\n // pipe; signal termination is deferred through the same stdout barrier.\n process.stdout.write(\"\", () => {\n if (signal) process.kill(process.pid, signal);\n else process.exitCode = code ?? 0;\n });\n });\n}\n\nfunction processLine(line) {\n if (!line.trim()) return;\n let event;\n try {\n event = JSON.parse(line);\n } catch {\n process.stdout.write(line + \"\\\\n\");\n return;\n }\n if (event.type === \"tool_execution_start\") {\n const toolName = event.toolName || event.tool_name || \"tool\";\n markToolStarted(event.toolCallId || event.tool_call_id, toolName);\n emitActivity({ kind: \"tool_start\", tool: String(toolName), argsSummary: summarizeArgs(event.args || event.arguments || event.input || event.parameters) });\n emitToolTelemetry();\n return;\n }\n if (event.type === \"tool_execution_end\") {\n const toolName = event.toolName || event.tool_name || \"tool\";\n if (event.isError) markToolFailed(event.toolCallId || event.tool_call_id);\n emitActivity({ kind: \"tool_end\", tool: String(toolName), isError: !!event.isError, error: typeof event.error === \"string\" ? event.error : undefined });\n emitToolTelemetry();\n return;\n }\n if (event.type === \"message_end\" && event.message && event.message.role === \"assistant\") {\n emitAssistantActivity(event.message);\n countToolCallsFromMessage(event.message);\n emitMessageTelemetry(event.message, parsed.model, parsed.provider);\n }\n}\n`;\n}\n\ninterface ContextUsagePayload extends JsonObject {\n readonly contextWindow?: unknown;\n readonly tokens?: unknown;\n readonly percent?: unknown;\n}\n\ninterface TokenUsagePayload extends JsonObject {\n readonly input?: unknown;\n readonly output?: unknown;\n readonly cacheRead?: unknown;\n readonly cacheWrite?: unknown;\n readonly totalTokens?: unknown;\n readonly costTotal?: unknown;\n}\n\ninterface ToolUsagePayload extends JsonObject {\n readonly byName?: unknown;\n readonly failed?: unknown;\n readonly total?: unknown;\n}\n\nfunction normalizeContextUsage(value: unknown): TaskContextUsage | undefined {\n if (!isJsonObject(value)) return undefined;\n const input: ContextUsagePayload = value;\n const rawContextWindow = input.contextWindow;\n const contextWindow =\n typeof rawContextWindow === 'number' &&\n Number.isFinite(rawContextWindow) &&\n rawContextWindow > 0\n ? Math.floor(rawContextWindow)\n : undefined;\n if (!contextWindow) return undefined;\n const rawTokens = input.tokens;\n const tokens =\n rawTokens === null\n ? null\n : typeof rawTokens === 'number' && Number.isFinite(rawTokens) && rawTokens >= 0\n ? Math.floor(rawTokens)\n : null;\n const rawPercent = input.percent;\n const percent =\n rawPercent === null\n ? null\n : typeof rawPercent === 'number' && Number.isFinite(rawPercent) && rawPercent >= 0\n ? rawPercent\n : tokens === null\n ? null\n : (tokens / contextWindow) * 100;\n return { tokens, contextWindow, percent };\n}\n\nfunction parseContextUsageXml(xml: string): TaskContextUsage | undefined {\n const readNumber = (tag: string): number | null | undefined => {\n const match = new RegExp(`<${tag}>(.*?)</${tag}>`, 'i').exec(xml);\n if (!match) return undefined;\n const raw = match[1]?.trim();\n if (raw === 'null' || raw === '?') return null;\n const parsed = Number(raw);\n return Number.isFinite(parsed) ? parsed : undefined;\n };\n const tokens = readNumber('tokens');\n const contextWindow = readNumber('context-window') ?? readNumber('contextWindow');\n const percent = readNumber('percent');\n return normalizeContextUsage({ tokens, contextWindow, percent });\n}\n\nfunction nonNegativeInteger(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? Math.floor(value) : 0;\n}\n\nfunction normalizeModel(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n return trimmed.length > 120 ? trimmed.slice(0, 120) : trimmed;\n}\n\nfunction normalizeTokenUsage(value: unknown): TaskTokenUsage | undefined {\n if (!isJsonObject(value)) return undefined;\n const input: TokenUsagePayload = value;\n const usage: TaskTokenUsage = {\n input: nonNegativeInteger(input.input),\n output: nonNegativeInteger(input.output),\n cacheRead: nonNegativeInteger(input.cacheRead),\n cacheWrite: nonNegativeInteger(input.cacheWrite),\n totalTokens: nonNegativeInteger(input.totalTokens),\n };\n if (usage.totalTokens <= 0)\n usage.totalTokens = usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n const rawCostTotal = input.costTotal;\n if (typeof rawCostTotal === 'number' && Number.isFinite(rawCostTotal) && rawCostTotal >= 0)\n usage.costTotal = rawCostTotal;\n return usage.totalTokens > 0 ? usage : undefined;\n}\n\nfunction normalizeToolUsage(value: unknown): TaskToolUsage | undefined {\n if (!isJsonObject(value)) return undefined;\n const input: ToolUsagePayload = value;\n const byName: Record<string, number> = {};\n const rawByName = input.byName;\n if (isJsonObject(rawByName)) {\n for (const [name, count] of Object.entries(rawByName)) {\n const normalized = nonNegativeInteger(count);\n if (normalized > 0) byName[name] = normalized;\n }\n }\n const byNameTotal = Object.values(byName).reduce((sum, count) => sum + count, 0);\n const failed = nonNegativeInteger(input.failed);\n const total = Math.max(nonNegativeInteger(input.total), byNameTotal, failed);\n return total > 0 || failed > 0 ? { total, failed, byName } : undefined;\n}\n\ninterface TelemetryControlPayload extends JsonObject {\n readonly type?: unknown;\n readonly contextUsage?: unknown;\n readonly tokenUsage?: unknown;\n readonly toolUsage?: unknown;\n readonly model?: unknown;\n}\n\ninterface TelemetryDelta {\n context?: TaskContextUsage | undefined;\n tokens?: TaskTokenUsage | undefined;\n tools?: TaskToolUsage | undefined;\n model?: string | undefined;\n}\n\nfunction noopOnChange(): void {\n return undefined;\n}\n\n/**\n * Deliver the delegate prompt bytes over stdin.\n *\n * A failure to deliver the seed is loud: the caller terminates the task rather\n * than letting a child run without the context it was supposed to receive.\n */\nfunction writeDelegateStdin(\n child: BackgroundTaskChildProcess,\n bytes: Buffer,\n onError: (error: Error) => void,\n): void {\n const stdin = child.stdin;\n if (stdin === undefined || stdin === null) {\n onError(new Error('delegate child stdin pipe is unavailable'));\n return;\n }\n stdin.once('error', onError);\n stdin.write(bytes, (error?: Error | null) => {\n if (error !== undefined && error !== null) {\n onError(error);\n return;\n }\n stdin.end();\n });\n}\n\nexport class BackgroundTaskRegistry {\n private readonly tasks = new Map<string, BgTask>();\n private runtimeDir: RuntimeDir | undefined;\n private shuttingDown = false;\n private taskAdmissionsClosed = false;\n private readonly activeTaskAdmissions = new Set<TaskAdmission>();\n private readonly taskAdmissionDrainWaiters = new Set<() => void>();\n private terminalPublicationClosed = false;\n private terminalPublicationCloseReason: TerminalPublicationClosureReason | undefined;\n private readonly terminalPublicationClosedSignal: Promise<TerminalPublicationClosureReason>;\n private resolveTerminalPublicationClosedSignal: (\n reason: TerminalPublicationClosureReason,\n ) => void = () => {};\n private readonly spawn: BackgroundTaskSpawn;\n private readonly killProcess: KillProcessFn;\n private readonly killTree: KillTreeFn;\n private readonly platform: NodeJS.Platform;\n private readonly env: NodeJS.ProcessEnv;\n private shellPolicy: ResolvedShellPolicy | undefined;\n private readonly shellPolicyEnv: NodeJS.ProcessEnv | undefined;\n private readonly makeTaskIdFn: () => string;\n private readonly now: () => number;\n private readonly maxOutputBytes: number;\n private readonly maxRecentTasks: number;\n private readonly killGraceMs: number;\n private readonly stopWaitMs: number;\n private readonly taskAdmissionTimeoutMs: number;\n private readonly attestedGitKillGraceMs: number;\n private readonly attestedGitMaxOutputBytes: number;\n private readonly attestedGitSpawn: AttestedGitSpawn | undefined;\n private attestedRuntimePromise: Promise<AttestedPiRuntime> | undefined;\n private readonly logger: Pick<Console, 'error'>;\n private readonly onChange: () => void;\n private readonly sendCompletionNotification: CompletionNotificationSender;\n private readonly publishTerminalSnapshot: (task: BgTaskSnapshot) => void;\n private readonly posixProcessGroupKillStates = new WeakMap<BgTask, PosixProcessGroupKillState>();\n private readonly windowsKillStates = new WeakMap<BgTask, WindowsKillState>();\n private readonly terminalPublicationAbandonSignals = new WeakMap<\n BgTask,\n TerminalPublicationAbandonSignal\n >();\n private readonly reloadShellOwner: ReloadShellOwnerHubV1 | undefined;\n private reloadShellLease: ReloadShellActivationLeaseV1 | undefined;\n private reloadShellIdentity: ReloadShellIdentityV1 | undefined;\n\n constructor(options: BackgroundTaskRegistryOptions) {\n this.terminalPublicationClosedSignal = new Promise((resolve) => {\n this.resolveTerminalPublicationClosedSignal = resolve;\n });\n this.spawn =\n options.spawn ?? ((command, args, spawnOptions) => nodeSpawn(command, args, spawnOptions));\n this.killProcess = options.killProcess ?? process.kill.bind(process);\n this.platform = options.platform ?? process.platform;\n this.env = options.env ?? process.env;\n this.shellPolicy = options.shellPolicy;\n this.shellPolicyEnv = options.shellPolicy === undefined ? { ...this.env } : undefined;\n const taskkillEnv = this.env;\n this.killTree =\n options.killTree ??\n ((pid, phase, signal) => {\n const taskkillOptions: WindowsTaskkillOptions =\n signal === undefined ? { env: taskkillEnv } : { env: taskkillEnv, signal };\n return runWindowsTaskkill(pid, phase, taskkillOptions);\n });\n this.makeTaskIdFn = options.makeTaskId ?? defaultTaskId;\n this.now = options.now ?? Date.now;\n this.maxOutputBytes = options.maxOutputBytes ?? MAX_OUTPUT_BYTES;\n this.maxRecentTasks = options.maxRecentTasks ?? MAX_RECENT_TASKS;\n this.killGraceMs = options.killGraceMs ?? KILL_GRACE_MS;\n this.stopWaitMs = options.stopWaitMs ?? STOP_WAIT_MS;\n this.taskAdmissionTimeoutMs = BackgroundTaskRegistry.positiveTimeout(\n options.taskAdmissionTimeoutMs,\n TASK_ADMISSION_TIMEOUT_MS,\n 'taskAdmissionTimeoutMs',\n );\n this.attestedGitKillGraceMs = BackgroundTaskRegistry.positiveTimeout(\n options.attestedGitKillGraceMs,\n ATTESTED_GIT_KILL_GRACE_MS,\n 'attestedGitKillGraceMs',\n );\n this.attestedGitMaxOutputBytes = BackgroundTaskRegistry.positiveTimeout(\n options.attestedGitMaxOutputBytes,\n ATTESTED_GIT_MAX_OUTPUT_BYTES,\n 'attestedGitMaxOutputBytes',\n );\n this.attestedGitSpawn = options.attestedGitSpawn;\n this.logger = options.logger ?? console;\n this.onChange = options.onChange ?? noopOnChange;\n this.sendCompletionNotification = options.sendCompletionNotification;\n this.publishTerminalSnapshot = options.publishTerminal ?? noopOnChange;\n this.reloadShellOwner = options.reloadShellOwner;\n }\n\n isShuttingDown(): boolean {\n return this.shuttingDown;\n }\n\n private resolvedShellPolicy(): ResolvedShellPolicy {\n const existing = this.shellPolicy;\n if (existing !== undefined) return existing;\n const resolved = resolveShellPolicy(\n this.platform,\n this.shellPolicyEnv ?? this.env,\n process.cwd(),\n );\n this.shellPolicy = resolved;\n return resolved;\n }\n\n private loadAttestedRuntime(): Promise<AttestedPiRuntime> {\n const existing = this.attestedRuntimePromise;\n if (existing !== undefined) return existing;\n const loading = import('./attested-pi-run.js');\n this.attestedRuntimePromise = loading;\n return loading;\n }\n\n private static positiveTimeout(\n value: number | undefined,\n fallback: number,\n label: string,\n ): number {\n const candidate = value ?? fallback;\n if (!Number.isFinite(candidate) || candidate <= 0) {\n throw new Error(`${label} must be a positive finite number`);\n }\n return Math.max(1, Math.floor(candidate));\n }\n\n private beginTaskAdmission(kind: string): TaskAdmission {\n this.assertTaskAdmissionOpen(kind);\n const controller = new AbortController();\n const admission: TaskAdmission = {\n kind,\n controller,\n deadlineAt: Date.now() + this.taskAdmissionTimeoutMs,\n timeoutMs: this.taskAdmissionTimeoutMs,\n timeoutHandle: undefined,\n released: false,\n };\n admission.timeoutHandle = setTimeout(() => {\n if (admission.released || admission.controller.signal.aborted) return;\n admission.controller.abort(\n new BackgroundTaskAdmissionTimeoutError(admission.kind, admission.timeoutMs),\n );\n }, admission.timeoutMs);\n this.activeTaskAdmissions.add(admission);\n return admission;\n }\n\n private releaseTaskAdmission(admission: TaskAdmission): void {\n if (admission.released) return;\n admission.released = true;\n if (admission.timeoutHandle !== undefined) {\n clearTimeout(admission.timeoutHandle);\n admission.timeoutHandle = undefined;\n }\n this.activeTaskAdmissions.delete(admission);\n if (this.activeTaskAdmissions.size !== 0) return;\n for (const resolve of this.taskAdmissionDrainWaiters) resolve();\n this.taskAdmissionDrainWaiters.clear();\n }\n\n private taskAdmissionError(admission: TaskAdmission): Error {\n const reason = admission.controller.signal.reason;\n if (reason instanceof Error) return reason;\n if (this.shuttingDown || this.taskAdmissionsClosed) {\n return new BackgroundTaskAdmissionClosedError(admission.kind);\n }\n return new BackgroundTaskAdmissionTimeoutError(admission.kind, admission.timeoutMs);\n }\n\n private surfacedTaskAdmissionError(admission: TaskAdmission, ...details: unknown[]): Error {\n const primary = this.taskAdmissionError(admission);\n const meaningful = details.filter((detail) => {\n if (detail === undefined || detail === primary) return false;\n if (typeof detail !== 'object' || detail === null) return true;\n return (\n Reflect.get(detail, 'name') !== 'AbortError' &&\n Reflect.get(detail, 'code') !== Reflect.get(primary, 'code')\n );\n });\n if (meaningful.length === 0) return primary;\n return new AggregateError(\n [primary, ...meaningful],\n `${primary.message}; admission cancellation or cleanup reported additional failures: ${meaningful.map(BackgroundTaskRegistry.errorMessage).join('; ')}`,\n );\n }\n\n private assertTaskAdmissionOpen(kind: string, admission?: TaskAdmission): void {\n if (admission?.controller.signal.aborted === true) throw this.taskAdmissionError(admission);\n if (this.shuttingDown || this.taskAdmissionsClosed) {\n throw new BackgroundTaskAdmissionClosedError(kind);\n }\n }\n\n private async awaitTaskAdmissionBoundary<T>(\n promise: Promise<T>,\n admission: TaskAdmission,\n ): Promise<T> {\n try {\n const value = await promise;\n this.assertTaskAdmissionOpen(admission.kind, admission);\n return value;\n } catch (error) {\n if (admission.controller.signal.aborted && typeof error === 'object' && error !== null) {\n const isPlainAbort = Reflect.get(error, 'name') === 'AbortError';\n const isCleanDurableCancellation =\n Reflect.get(error, 'code') === 'durable_file_cancelled' &&\n Reflect.get(error, 'renameCompleted') !== true &&\n Array.isArray(Reflect.get(error, 'cleanupFailures')) &&\n (Reflect.get(error, 'cleanupFailures') as unknown[]).length === 0;\n if (isPlainAbort || isCleanDurableCancellation) {\n throw this.taskAdmissionError(admission);\n }\n }\n throw error;\n }\n }\n\n closeTaskAdmissions(): void {\n if (this.taskAdmissionsClosed) return;\n this.taskAdmissionsClosed = true;\n for (const admission of this.activeTaskAdmissions) {\n if (!admission.controller.signal.aborted) {\n admission.controller.abort(new BackgroundTaskAdmissionClosedError(admission.kind));\n }\n }\n }\n\n waitForTaskAdmissions(): Promise<void> {\n if (this.activeTaskAdmissions.size === 0) return Promise.resolve();\n return new Promise((resolve) => {\n this.taskAdmissionDrainWaiters.add(resolve);\n });\n }\n\n setShuttingDown(value: boolean): void {\n if (value) {\n this.shuttingDown = true;\n this.closeTaskAdmissions();\n this.closeTerminalPublication('registry_shutdown');\n return;\n }\n // Publication and admission closure belong to one extension activation and\n // are one-way. Pi session replacement creates a fresh registry; an old\n // registry must not be reopened by a late lifecycle continuation.\n if (!this.terminalPublicationClosed && !this.taskAdmissionsClosed) this.shuttingDown = false;\n }\n\n closeTerminalPublication(reason: TerminalPublicationClosureReason): void {\n if (!this.terminalPublicationClosed) {\n this.terminalPublicationClosed = true;\n this.terminalPublicationCloseReason = reason;\n this.resolveTerminalPublicationClosedSignal(reason);\n }\n const effectiveReason = this.terminalPublicationCloseReason ?? reason;\n for (const task of this.tasks.values()) {\n if (task.terminalPublicationState === 'pending' && task.terminalEmitInFlight === true) {\n // A synchronous listener can close the service while emit() is still on\n // the stack. Dispose queued work now, but let the emitter's return/throw\n // settle the in-flight attempt exactly once.\n if (task.terminalPublishRetryHandle !== undefined) {\n clearTimeout(task.terminalPublishRetryHandle);\n task.terminalPublishRetryHandle = undefined;\n }\n task.terminalPublicationGate = undefined;\n continue;\n }\n const shouldLog =\n task.terminalPublicationState === 'pending' &&\n task.status !== 'running' &&\n (task.terminalPublishAttempts > 0 ||\n task.terminalPublishRetryHandle !== undefined ||\n task.terminalPublicationGate !== undefined);\n this.abandonTerminalPublication(task, effectiveReason, undefined, shouldLog);\n }\n this.pruneOldTasks();\n }\n\n allTasks(): BgTask[] {\n return [...this.tasks.values()];\n }\n\n snapshot(task: BgTask): BgTaskSnapshot {\n return snapshot(task);\n }\n\n hasCurrentReloadLease(): boolean {\n const lease = this.reloadShellLease;\n return lease !== undefined && this.reloadShellOwner?.isCurrentLease(lease) === true;\n }\n\n async stageReloadActivation(\n claim: ReloadShellActivationClaimV1,\n ): Promise<ReloadShellHostAdapterV1> {\n if (claim.protocol !== RELOAD_SHELL_OWNER_PROTOCOL) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_protocol_incompatible',\n 'activation claim does not use the supported reload shell owner protocol',\n );\n }\n const staged: ReloadableShellExecutionV1[] = [];\n const ids = new Set<string>();\n for (const execution of claim.executions) {\n if (\n execution.protocol !== RELOAD_SHELL_OWNER_PROTOCOL ||\n execution.task.reloadExecution !== execution ||\n execution.task.surviveReload !== true\n ) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_protocol_incompatible',\n 'activation claim contains an incompatible reload shell execution',\n );\n }\n if (ids.has(execution.task.id) || this.tasks.has(execution.task.id)) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_activation_conflict',\n `claimed task id ${execution.task.id} conflicts with the fresh registry`,\n );\n }\n ids.add(execution.task.id);\n }\n\n try {\n for (const execution of claim.executions) {\n const task = execution.task;\n task.reloadHostDeliveryInFlight = false;\n task.reloadHostDeliverySettled = false;\n task.reloadHostNotificationSettled = false;\n execution.updateLeaseAudit(claim.generation, (task.reloadSurvival?.handoffCount ?? 0) + 1);\n this.tasks.set(task.id, task);\n staged.push(execution);\n }\n await Promise.all(staged.map(async (execution) => this.writeMetadata(execution.task)));\n } catch (error) {\n for (const execution of staged) this.tasks.delete(execution.task.id);\n throw error;\n }\n\n let boundLease: ReloadShellActivationLeaseV1 | undefined;\n return {\n activationNonce: claim.activationNonce,\n onBound: (lease) => {\n if (\n lease.activationNonce !== claim.activationNonce ||\n lease.generation !== claim.generation ||\n lease.identityKey !== claim.identityKey\n ) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'committed lease does not match its staged activation claim',\n );\n }\n boundLease = lease;\n this.reloadShellLease = lease;\n this.reloadShellIdentity = claim.identity;\n },\n onChanged: (execution) => {\n const lease = boundLease;\n if (!this.ownsReloadExecution(execution, lease)) return;\n this.onChange();\n },\n onTerminal: (execution) => {\n const lease = boundLease;\n if (!this.ownsReloadExecution(execution, lease)) return;\n void this.deliverReloadTerminal(execution, lease);\n },\n };\n }\n\n abortReloadActivation(claim: ReloadShellActivationClaimV1): void {\n for (const execution of claim.executions) {\n const task = execution.task;\n if (this.tasks.get(task.id) !== task) continue;\n if (task.terminalPublishRetryHandle !== undefined) {\n clearTimeout(task.terminalPublishRetryHandle);\n task.terminalPublishRetryHandle = undefined;\n }\n task.terminalPublicationGate = undefined;\n task.terminalPublishInFlight = false;\n this.tasks.delete(task.id);\n }\n if (this.reloadShellLease?.activationNonce === claim.activationNonce) {\n this.reloadShellLease = undefined;\n this.reloadShellIdentity = undefined;\n }\n }\n\n prepareReloadHandoff(lease: ReloadShellActivationLeaseV1): readonly BgTask[] {\n if (this.reloadShellOwner === undefined || this.reloadShellLease !== lease) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'registry does not own the requested reload activation lease',\n );\n }\n const executions = this.reloadShellOwner.beginReloadHandoff(lease);\n const tasks: BgTask[] = [];\n for (const execution of executions) {\n const task = execution.task;\n if (this.tasks.get(task.id) !== task) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n `registry no longer owns survivor ${task.id}`,\n );\n }\n if (task.terminalPublishRetryHandle !== undefined) {\n clearTimeout(task.terminalPublishRetryHandle);\n task.terminalPublishRetryHandle = undefined;\n }\n task.terminalPublicationGate = undefined;\n task.terminalPublishInFlight = false;\n task.reloadHostDeliveryInFlight = false;\n task.reloadHostDeliverySettled = false;\n task.reloadHostNotificationSettled = false;\n this.tasks.delete(task.id);\n tasks.push(task);\n }\n this.reloadShellLease = undefined;\n this.reloadShellIdentity = undefined;\n return Object.freeze(tasks);\n }\n\n async waitForReloadHostSettlement(timeoutMs = this.stopWaitMs): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (true) {\n const unsettled = [...this.tasks.values()].filter(\n (task) =>\n task.reloadExecution?.phase === 'terminal' &&\n (task.reloadHostNotificationSettled !== true ||\n task.terminalPublicationState === 'pending'),\n );\n if (unsettled.length === 0) return;\n const remaining = deadline - Date.now();\n if (remaining <= 0) {\n throw new Error(\n `Timed out waiting for reload shell host settlement: ${unsettled.map((task) => task.id).join(', ')}`,\n );\n }\n await new Promise<void>((resolve) => setTimeout(resolve, Math.min(10, remaining)));\n }\n }\n\n releaseReloadActivation(lease: ReloadShellActivationLeaseV1): void {\n if (this.reloadShellOwner === undefined) return;\n if (this.reloadShellLease !== lease || !this.reloadShellOwner.isCurrentLease(lease)) return;\n this.reloadShellOwner.releaseActivation(lease);\n this.reloadShellLease = undefined;\n this.reloadShellIdentity = undefined;\n }\n\n currentReloadLease(): ReloadShellActivationLeaseV1 | undefined {\n return this.hasCurrentReloadLease() ? this.reloadShellLease : undefined;\n }\n\n private ownsReloadExecution(\n execution: ReloadableShellExecutionV1,\n lease: ReloadShellActivationLeaseV1 | undefined,\n ): lease is ReloadShellActivationLeaseV1 {\n return (\n lease !== undefined &&\n this.reloadShellLease === lease &&\n this.reloadShellOwner?.isCurrentLease(lease) === true &&\n this.tasks.get(execution.task.id) === execution.task &&\n execution.task.reloadExecution === execution\n );\n }\n\n async ensureRuntimeDir(ctx: BackgroundTaskContext): Promise<RuntimeDir> {\n if (this.runtimeDir) return this.runtimeDir;\n const sessionId = sanitizePathSegment(ctx.sessionId ?? `session-${String(process.pid)}`);\n const runId = `${sessionId}-${String(process.pid)}`;\n const runtimeDirAbs = join(ctx.cwd, '.pi', 'tasks', runId);\n const runtimeDirDisplay = join('.pi', 'tasks', runId);\n await mkdir(runtimeDirAbs, { recursive: true });\n this.runtimeDir = { abs: runtimeDirAbs, display: runtimeDirDisplay };\n return this.runtimeDir;\n }\n\n private async destroyTaskStream(task: BgTask): Promise<void> {\n const stream = task.stream;\n if (stream === undefined || stream.closed) return;\n await new Promise<void>((resolve) => {\n const closed = () => {\n stream.off('close', closed);\n resolve();\n };\n stream.once('close', closed);\n if (!stream.destroyed) stream.destroy();\n if (stream.closed) closed();\n });\n }\n\n private async discardUnspawnedTask(task: BgTask, paths: readonly string[]): Promise<void> {\n this.tasks.delete(task.id);\n task.finalized = true;\n task.status = 'failed';\n if (task.timeoutHandle !== undefined) clearTimeout(task.timeoutHandle);\n if (task.killEscalationTimer !== undefined) clearTimeout(task.killEscalationTimer);\n await this.destroyTaskStream(task);\n const removals = await Promise.allSettled(paths.map((path) => rm(path, { force: true })));\n const failures: Error[] = [];\n for (let index = 0; index < removals.length; index++) {\n const result = removals[index];\n if (result?.status !== 'rejected') continue;\n const path = paths[index] ?? '<unknown admission artifact>';\n failures.push(\n new Error(\n `Failed to remove interrupted admission artifact ${path}: ${BackgroundTaskRegistry.errorMessage(result.reason)}`,\n ),\n );\n }\n if (failures.length > 0) {\n throw new AggregateError(failures, 'Interrupted task admission artifact cleanup failed');\n }\n }\n\n private attestedGitOptions(admission?: TaskAdmission): GitCommandOptions {\n return {\n signal: admission?.controller.signal,\n deadlineAt: admission?.deadlineAt ?? Date.now() + this.taskAdmissionTimeoutMs,\n killProcess: this.killProcess,\n killTree: this.killTree,\n platform: this.platform,\n env: this.env,\n killGraceMs: this.attestedGitKillGraceMs,\n maxOutputBytes: this.attestedGitMaxOutputBytes,\n ...(this.attestedGitSpawn === undefined ? {} : { spawn: this.attestedGitSpawn }),\n };\n }\n\n private captureSpawnedChild(task: BgTask, child: BackgroundTaskChildProcess): void {\n task.child = child;\n task.pid = child.pid;\n if (\n this.platform !== 'win32' &&\n child.pid !== undefined &&\n Number.isSafeInteger(child.pid) &&\n child.pid > 0\n ) {\n // Capture detached-group ownership once, directly from this spawn. Never\n // reconstruct signal authority from mutable task metadata or a later PID.\n task.ownedPosixProcessGroupId = child.pid;\n }\n }\n\n private bindOwnedTaskToAdmission(task: BgTask, admission: TaskAdmission): () => void {\n const cancelOwnedTask = (): void => {\n this.stopOwnedTaskAfterAdmissionCancellation(task, this.taskAdmissionError(admission));\n };\n admission.controller.signal.addEventListener('abort', cancelOwnedTask, { once: true });\n if (admission.controller.signal.aborted) cancelOwnedTask();\n return () => {\n admission.controller.signal.removeEventListener('abort', cancelOwnedTask);\n };\n }\n\n private stopOwnedTaskAfterAdmissionCancellation(task: BgTask, error: Error): void {\n if (task.status !== 'running') return;\n task.killKind = error instanceof BackgroundTaskAdmissionTimeoutError ? 'timeout' : 'shutdown';\n task.error = error.message;\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (killError) {\n this.logger.error(\n `[background-tasks] failed to stop ${task.id} after admission cancellation:`,\n killError,\n );\n }\n }\n\n async startTask(\n ctx: BackgroundTaskContext,\n command: string,\n options: StartTaskOptions = {},\n ): Promise<BgTask> {\n const hasSurvival = Object.prototype.hasOwnProperty.call(options, 'surviveReload');\n if (hasSurvival && typeof options.surviveReload !== 'boolean') {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_invalid',\n 'surviveReload must be a boolean when present',\n );\n }\n const surviveReload = options.surviveReload === true;\n if (surviveReload && options.isAgent === true) {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_requires_non_agent',\n 'surviveReload requires isAgent:false',\n );\n }\n const reloadLease = surviveReload ? this.currentReloadLease() : undefined;\n if (surviveReload && reloadLease === undefined) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_unavailable',\n 'no successfully bound same-process reload owner activation is available',\n );\n }\n\n const admission = this.beginTaskAdmission('a background task');\n try {\n if (surviveReload && reloadLease !== undefined) {\n return await this.startReloadableTaskAdmitted(\n ctx,\n command,\n options,\n admission,\n reloadLease,\n );\n }\n return await this.startTaskAdmitted(ctx, command, options, admission);\n } finally {\n this.releaseTaskAdmission(admission);\n }\n }\n\n private async startReloadableTaskAdmitted(\n ctx: BackgroundTaskContext,\n command: string,\n options: StartTaskOptions,\n admission: TaskAdmission,\n lease: ReloadShellActivationLeaseV1,\n ): Promise<BgTask> {\n const normalizedCommand = command.trim();\n if (!normalizedCommand) throw new Error('Background command is empty');\n if (options.isAgent === true) {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_requires_non_agent',\n 'surviveReload requires isAgent:false',\n );\n }\n if (\n this.reloadShellOwner === undefined ||\n this.reloadShellIdentity === undefined ||\n this.reloadShellLease !== lease ||\n !this.reloadShellOwner.isCurrentLease(lease)\n ) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_unavailable',\n 'reload owner activation became unavailable before launch',\n );\n }\n if (ctx.sessionId !== this.reloadShellIdentity.sessionId) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'launch context session id does not match the bound reload owner identity',\n );\n }\n this.assertTaskAdmissionOpen('a background task', admission);\n\n const shellPolicy = this.resolvedShellPolicy();\n const invocation = shellInvocationForPolicy(normalizedCommand, shellPolicy);\n const dir = await this.awaitTaskAdmissionBoundary(this.ensureRuntimeDir(ctx), admission);\n this.assertTaskAdmissionOpen('a background task', admission);\n if (this.reloadShellLease !== lease || !this.reloadShellOwner.isCurrentLease(lease)) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'reload owner activation changed during task preflight',\n );\n }\n\n const id = this.makeTaskIdFn();\n const outputAbsPath = join(dir.abs, `${id}.output`);\n const metadataAbsPath = join(dir.abs, `${id}.json`);\n const outputPath = join(dir.display, `${id}.output`);\n const timeoutSeconds =\n typeof options.timeoutSeconds === 'number' &&\n Number.isFinite(options.timeoutSeconds) &&\n options.timeoutSeconds > 0\n ? Math.floor(options.timeoutSeconds)\n : undefined;\n const taskName =\n normalizeTaskName(options.name) ??\n normalizeTaskName(options.description) ??\n deriveTaskNameFromCommand(normalizedCommand);\n const trimmedDescription = options.description?.trim();\n const description =\n trimmedDescription && trimmedDescription.length > 0 ? trimmedDescription : undefined;\n const task: BgTask = {\n id,\n name: taskName,\n command: normalizedCommand,\n description,\n status: 'running',\n outputPath,\n outputAbsPath,\n metadataAbsPath,\n cwd: ctx.cwd,\n startTime: this.now(),\n exitCode: undefined,\n pid: undefined,\n bytesWritten: 0,\n isAgent: false,\n surviveReload: true,\n notified: false,\n notifyOnCompletion: options.notifyOnCompletion ?? true,\n triggerOnCompletion: options.triggerOnCompletion ?? false,\n timeoutSeconds,\n terminalPublished: false,\n terminalPublicationState: 'pending',\n terminalPublishAttempts: 0,\n terminalPublicationGate: options.terminalPublicationGate,\n shellPolicy: shellPolicySnapshot(shellPolicy),\n waiters: [],\n };\n const launchNonce = randomBytes(16).toString('hex');\n this.assertTaskAdmissionOpen('a background task', admission);\n this.tasks.set(id, task);\n\n let execution: ReloadableShellExecutionV1 | undefined;\n let registered = false;\n let committed = false;\n let abortListener: (() => void) | undefined;\n try {\n execution = createReloadableShellExecutionV1({\n task,\n identity: this.reloadShellIdentity,\n lease,\n launchNonce,\n invocation,\n spawn: this.spawn,\n killProcess: this.killProcess,\n killTree: this.killTree,\n platform: this.platform,\n env: this.env,\n maxOutputBytes: this.maxOutputBytes,\n killGraceMs: this.killGraceMs,\n stopWaitMs: this.stopWaitMs,\n now: this.now,\n logger: this.logger,\n });\n this.reloadShellOwner.registerExecution(lease, execution);\n registered = true;\n abortListener = () => {\n if (execution === undefined) return;\n const error = this.taskAdmissionError(admission);\n execution.failAdmission(error);\n const kind: KillKind =\n error instanceof BackgroundTaskAdmissionTimeoutError ? 'timeout' : 'shutdown';\n void execution.requestStop(kind, error.message).catch((stopError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to stop reloadable task ${task.id} after admission cancellation:`,\n stopError,\n );\n });\n };\n admission.controller.signal.addEventListener('abort', abortListener, { once: true });\n if (admission.controller.signal.aborted) abortListener();\n\n await this.awaitTaskAdmissionBoundary(\n execution.commitInitialMetadata(admission.controller.signal),\n admission,\n );\n this.assertTaskAdmissionOpen('a background task', admission);\n if (this.reloadShellLease !== lease || !this.reloadShellOwner.isCurrentLease(lease)) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'reload owner activation changed before admission commit',\n );\n }\n this.reloadShellOwner.markAdmissionCommitted(lease, execution);\n committed = true;\n this.onChange();\n return task;\n } catch (error) {\n const primary = admission.controller.signal.aborted\n ? this.taskAdmissionError(admission)\n : error instanceof Error\n ? error\n : new Error(String(error));\n execution?.failAdmission(primary);\n let cleanupError: unknown;\n if (execution !== undefined) {\n try {\n if (task.status === 'running') {\n await execution.requestStop(\n admission.controller.signal.aborted &&\n primary instanceof BackgroundTaskAdmissionTimeoutError\n ? 'timeout'\n : 'shutdown',\n primary.message,\n );\n }\n } catch (stopError) {\n cleanupError = stopError;\n }\n }\n if (registered && !committed && execution !== undefined) {\n if (this.reloadShellOwner.isCurrentLease(lease)) {\n this.reloadShellOwner.releaseExecution(lease, execution);\n }\n }\n this.tasks.delete(task.id);\n if (execution === undefined) {\n const removals = await Promise.allSettled([\n rm(outputAbsPath, { force: true }),\n rm(metadataAbsPath, { force: true }),\n ]);\n const removalFailure = removals.find((result) => result.status === 'rejected');\n if (removalFailure?.status === 'rejected') cleanupError = removalFailure.reason;\n }\n if (admission.controller.signal.aborted) {\n throw this.surfacedTaskAdmissionError(admission, error, cleanupError);\n }\n if (cleanupError !== undefined) {\n throw new AggregateError(\n [primary, cleanupError],\n `Failed to start reloadable background task and cleanup also failed: ${BackgroundTaskRegistry.errorMessage(cleanupError)}`,\n );\n }\n throw new Error(`Failed to start background task: ${primary.message}`);\n } finally {\n if (abortListener !== undefined) {\n admission.controller.signal.removeEventListener('abort', abortListener);\n }\n }\n }\n\n private async startTaskAdmitted(\n ctx: BackgroundTaskContext,\n command: string,\n options: StartTaskOptions,\n admission: TaskAdmission,\n ): Promise<BgTask> {\n const normalizedCommand = command.trim();\n if (!normalizedCommand) throw new Error('Background command is empty');\n this.assertTaskAdmissionOpen('a background task', admission);\n\n const isAgent = options.isAgent ?? false;\n const shellPolicy = this.resolvedShellPolicy();\n const baseInvocation = shellInvocationForPolicy(normalizedCommand, shellPolicy);\n const piTelemetryRequested = isAgent && commandMayLaunchPiAgent(normalizedCommand, this.env);\n const piTelemetryLaunch =\n piTelemetryRequested && shellPolicy.supportsPosixFunctionWrapper\n ? resolvePiLaunch({ platform: this.platform })\n : undefined;\n\n const dir = await this.awaitTaskAdmissionBoundary(this.ensureRuntimeDir(ctx), admission);\n this.assertTaskAdmissionOpen('a background task', admission);\n const id = this.makeTaskIdFn();\n const outputAbsPath = join(dir.abs, `${id}.output`);\n const metadataAbsPath = join(dir.abs, `${id}.json`);\n const outputPath = join(dir.display, `${id}.output`);\n let commandToSpawn = normalizedCommand;\n let wrapperAbsPath: string | undefined;\n try {\n if (piTelemetryRequested && shellPolicy.supportsPosixFunctionWrapper) {\n if (piTelemetryLaunch === undefined)\n throw new Error('Pi telemetry launch spec was not resolved');\n wrapperAbsPath = join(dir.abs, `${id}.pi-telemetry-wrapper.cjs`);\n try {\n await writeFile(\n wrapperAbsPath,\n createPiTelemetryWrapperSource(buildModelWindowIndex(ctx), piTelemetryLaunch),\n { encoding: 'utf8', signal: admission.controller.signal },\n );\n } catch (error) {\n if (admission.controller.signal.aborted) throw this.taskAdmissionError(admission);\n throw error;\n }\n this.assertTaskAdmissionOpen('a background task', admission);\n commandToSpawn = `pi() { ${shellQuote(process.execPath)} ${shellQuote(wrapperAbsPath)} \"$@\"; }\\n${normalizedCommand}`;\n }\n } catch (error) {\n if (wrapperAbsPath !== undefined) await rm(wrapperAbsPath, { force: true });\n throw error;\n }\n const invocation =\n commandToSpawn === normalizedCommand\n ? baseInvocation\n : shellInvocationForPolicy(commandToSpawn, shellPolicy);\n const timeoutSeconds =\n typeof options.timeoutSeconds === 'number' &&\n Number.isFinite(options.timeoutSeconds) &&\n options.timeoutSeconds > 0\n ? Math.floor(options.timeoutSeconds)\n : undefined;\n const taskName =\n normalizeTaskName(options.name) ??\n normalizeTaskName(options.description) ??\n deriveTaskNameFromCommand(normalizedCommand);\n const trimmedDescription = options.description?.trim();\n const description =\n trimmedDescription && trimmedDescription.length > 0 ? trimmedDescription : undefined;\n\n const task: BgTask = {\n id,\n name: taskName,\n command: normalizedCommand,\n description,\n status: 'running',\n outputPath,\n outputAbsPath,\n metadataAbsPath,\n cwd: ctx.cwd,\n startTime: this.now(),\n exitCode: undefined,\n pid: undefined,\n bytesWritten: 0,\n isAgent,\n surviveReload: false,\n notified: false,\n notifyOnCompletion: options.notifyOnCompletion ?? true,\n triggerOnCompletion: options.triggerOnCompletion ?? false,\n timeoutSeconds,\n terminalPublished: false,\n terminalPublicationState: 'pending',\n terminalPublishAttempts: 0,\n terminalPublicationGate: options.terminalPublicationGate,\n shellPolicy: shellPolicySnapshot(shellPolicy),\n waiters: [],\n };\n if (commandToSpawn !== normalizedCommand) task.telemetryWrapped = true;\n if (piTelemetryRequested && !shellPolicy.supportsPosixFunctionWrapper) {\n task.telemetryUnavailableReason =\n shellPolicy.dialect === 'cmd'\n ? WIN32_CMD_PI_TELEMETRY_UNAVAILABLE_REASON\n : NON_POSIX_SHELL_PI_TELEMETRY_UNAVAILABLE_REASON;\n }\n this.assertTaskAdmissionOpen('a background task', admission);\n this.tasks.set(id, task);\n\n const stream = createWriteStream(outputAbsPath, { flags: 'a', encoding: 'utf8' });\n task.stream = stream;\n stream.on('error', (error) => {\n task.error = `Output file write failed: ${error.message}`;\n if (task.status === 'running') {\n task.killKind = 'output_cap';\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (killError) {\n void this.finalizeTask(\n task,\n 'failed',\n null,\n undefined,\n `${task.error}; kill failed: ${killError instanceof Error ? killError.message : String(killError)}`,\n );\n }\n }\n });\n\n let unbindAdmissionCancellation = (): void => undefined;\n try {\n this.assertTaskAdmissionOpen('a background task', admission);\n const child = this.spawn(invocation.shell, invocation.args, {\n cwd: ctx.cwd,\n detached: this.platform !== 'win32',\n stdio: ['ignore', 'pipe', 'pipe'],\n env: this.env,\n windowsHide: true,\n windowsVerbatimArguments: invocation.windowsVerbatimArguments,\n });\n\n this.captureSpawnedChild(task, child);\n\n child.stdout?.on('data', (data) => {\n this.appendChildOutput(task, data, 'stdout');\n });\n child.stderr?.on('data', (data) => {\n this.appendChildOutput(task, data, 'stderr');\n });\n\n child.on('error', (error) => {\n this.writeNotice(task, `\\n[background task spawn error: ${error.message}]\\n`);\n void this.finalizeTask(task, 'failed', null, undefined, error.message);\n });\n\n child.on('close', (code, signalName) => {\n let status: TaskStatus;\n let error: string | undefined;\n if (task.killKind === 'user' || task.killKind === 'shutdown') {\n status = 'killed';\n } else if (task.killKind === 'timeout') {\n status = 'failed';\n error = task.error ?? `Timed out after ${String(timeoutSeconds)}s`;\n } else if (task.killKind === 'output_cap') {\n status = 'failed';\n error = task.error ?? `Output exceeded cap of ${formatSize(this.maxOutputBytes)}`;\n } else if ((code ?? 0) === 0) {\n status = 'completed';\n } else {\n status = 'failed';\n const exitCode = code === null ? 'null' : String(code);\n error = `Exited with code ${exitCode}${signalName ? ` (${signalName})` : ''}`;\n }\n void this.finalizeTask(task, status, code, signalName, error);\n });\n\n if (timeoutSeconds !== undefined) {\n task.timeoutHandle = setTimeout(() => {\n if (task.status !== 'running') return;\n task.killKind = 'timeout';\n task.error = `Timed out after ${String(timeoutSeconds)}s`;\n this.writeNotice(task, `\\n[background task timeout: ${task.error}]\\n`);\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (error) {\n void this.finalizeTask(\n task,\n 'failed',\n null,\n undefined,\n `${task.error}; kill failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }, timeoutSeconds * 1000);\n }\n\n unbindAdmissionCancellation = this.bindOwnedTaskToAdmission(task, admission);\n await this.awaitTaskAdmissionBoundary(\n this.writeMetadata(task, admission.controller.signal),\n admission,\n );\n this.assertTaskAdmissionOpen('a background task', admission);\n this.onChange();\n return task;\n } catch (error) {\n if (admission.controller.signal.aborted) {\n const admissionError = this.taskAdmissionError(admission);\n let cleanupError: unknown;\n if (task.child === undefined) {\n try {\n await this.discardUnspawnedTask(task, [\n outputAbsPath,\n metadataAbsPath,\n ...(wrapperAbsPath === undefined ? [] : [wrapperAbsPath]),\n ]);\n } catch (cleanupFailure) {\n cleanupError = cleanupFailure;\n }\n } else {\n this.stopOwnedTaskAfterAdmissionCancellation(task, admissionError);\n }\n throw this.surfacedTaskAdmissionError(admission, error, cleanupError);\n }\n const message = error instanceof Error ? error.message : String(error);\n this.writeNotice(task, `\\n[background task spawn exception: ${message}]\\n`);\n await this.finalizeTask(task, 'failed', null, undefined, message);\n throw new Error(`Failed to start background task: ${message}`);\n } finally {\n unbindAdmissionCancellation();\n }\n }\n\n /**\n * Track an in-process asynchronous workflow through the same durable task,\n * notification, status, log, and cancellation surfaces as child processes.\n * The supplied completion promise must own all workflow cleanup before it\n * settles; terminal publication happens only after that settlement.\n */\n async startManagedTask(\n ctx: BackgroundTaskContext,\n request: StartManagedTaskOptions,\n ): Promise<BgTask> {\n rejectSurvivalForTaskKind(request, 'managed background tasks');\n let admission: TaskAdmission | undefined;\n try {\n admission = this.beginTaskAdmission('a managed background task');\n return await this.startManagedTaskAdmitted(ctx, request, admission);\n } catch (error) {\n const admissionError =\n admission?.controller.signal.aborted === true\n ? this.taskAdmissionError(admission)\n : error instanceof BackgroundTaskAdmissionClosedError\n ? error\n : undefined;\n if (admissionError !== undefined) {\n const task = admission === undefined ? undefined : this.tasks.get(request.id);\n if (task === undefined) {\n try {\n request.cancel();\n } catch (cancelError) {\n this.logger.error(\n `[background-tasks] managed preflight cancellation failed for ${request.id}:`,\n cancelError,\n );\n }\n // The workflow promise owns child/artifact cleanup. Do not release a\n // pre-insertion admission while that cleanup can still run late.\n await request.completion.then(\n () => undefined,\n () => undefined,\n );\n } else {\n this.stopOwnedTaskAfterAdmissionCancellation(task, admissionError);\n await request.completion.then(\n () => undefined,\n () => undefined,\n );\n }\n if (admission !== undefined) {\n throw this.surfacedTaskAdmissionError(admission, error);\n }\n throw admissionError;\n }\n throw error;\n } finally {\n if (admission !== undefined) this.releaseTaskAdmission(admission);\n }\n }\n\n private async startManagedTaskAdmitted(\n ctx: BackgroundTaskContext,\n request: StartManagedTaskOptions,\n admission: TaskAdmission,\n ): Promise<BgTask> {\n this.assertTaskAdmissionOpen('a managed background task', admission);\n if (!/^[a-zA-Z0-9_.-]+$/u.test(request.id))\n throw new Error(`Managed background task id is invalid: ${request.id}`);\n if (this.tasks.has(request.id))\n throw new Error(`Background task id already exists: ${request.id}`);\n\n const dir = await this.awaitTaskAdmissionBoundary(this.ensureRuntimeDir(ctx), admission);\n this.assertTaskAdmissionOpen('a managed background task', admission);\n const outputAbsPath = join(dir.abs, `${request.id}.output`);\n const metadataAbsPath = join(dir.abs, `${request.id}.json`);\n const outputPath = join(dir.display, `${request.id}.output`);\n const task: BgTask = {\n id: request.id,\n name: normalizeTaskName(request.name) ?? 'Managed background task',\n command: request.command,\n description: request.description,\n status: 'running',\n outputPath,\n outputAbsPath,\n metadataAbsPath,\n cwd: ctx.cwd,\n startTime: this.now(),\n exitCode: undefined,\n pid: undefined,\n bytesWritten: 0,\n isAgent: request.isAgent,\n surviveReload: false,\n notified: false,\n notifyOnCompletion: request.notifyOnCompletion,\n triggerOnCompletion: request.triggerOnCompletion,\n fusion: request.fusion,\n managedCancel: request.cancel,\n managedStopWaitMs: request.stopWaitMs,\n terminalPublished: false,\n terminalPublicationState: 'pending',\n terminalPublishAttempts: 0,\n terminalPublicationGate: request.terminalPublicationGate,\n waiters: [],\n };\n this.assertTaskAdmissionOpen('a managed background task', admission);\n this.tasks.set(task.id, task);\n const stream = createWriteStream(outputAbsPath, { flags: 'a', encoding: 'utf8' });\n task.stream = stream;\n stream.on('error', (error) => {\n task.error = `Output file write failed: ${error.message}`;\n if (task.status === 'running' && !task.managedCancelRequested) {\n task.managedCancelRequested = true;\n try {\n request.cancel();\n } catch (cancelError) {\n task.error = `${task.error}; cancellation failed: ${BackgroundTaskRegistry.errorMessage(cancelError)}`;\n }\n }\n });\n const unbindAdmissionCancellation = this.bindOwnedTaskToAdmission(task, admission);\n\n let completionAttached = false;\n const attachCompletion = (): void => {\n if (completionAttached) return;\n completionAttached = true;\n void request.completion\n .then(\n () => {\n const killed = task.killKind === 'user' || task.killKind === 'shutdown';\n const timedOut = task.killKind === 'timeout';\n return this.finalizeTask(\n task,\n killed ? 'killed' : timedOut ? 'failed' : 'completed',\n killed || timedOut ? null : 0,\n undefined,\n timedOut ? task.error : undefined,\n );\n },\n (error: unknown) => {\n const message = BackgroundTaskRegistry.errorMessage(error);\n const killed = task.killKind === 'user' || task.killKind === 'shutdown';\n return this.finalizeTask(task, killed ? 'killed' : 'failed', null, undefined, message);\n },\n )\n .catch((error: unknown) => {\n this.logger.error(\n `[background-tasks] managed task finalization failed for ${task.id}:`,\n error,\n );\n });\n };\n\n try {\n await this.awaitTaskAdmissionBoundary(\n this.writeMetadata(task, admission.controller.signal),\n admission,\n );\n attachCompletion();\n this.assertTaskAdmissionOpen('a managed background task', admission);\n this.onChange();\n } catch (error) {\n if (admission.controller.signal.aborted) {\n attachCompletion();\n throw this.surfacedTaskAdmissionError(admission, error);\n }\n this.tasks.delete(task.id);\n await this.destroyTaskStream(task);\n try {\n request.cancel();\n } catch (cancelError) {\n this.logger.error(\n `[background-tasks] managed task cancellation after metadata failure also failed for ${task.id}:`,\n cancelError,\n );\n }\n await request.completion.then(\n () => undefined,\n () => undefined,\n );\n throw new Error(\n `Failed to register managed background task: ${BackgroundTaskRegistry.errorMessage(error)}`,\n );\n } finally {\n unbindAdmissionCancellation();\n }\n\n return task;\n }\n\n async updateManagedTask(task: BgTask, state: string, line?: string): Promise<void> {\n if (task.status !== 'running' || task.fusion === undefined) return;\n task.fusion.state = state;\n if (line !== undefined && line.length > 0) this.writeNotice(task, `${line}\\n`);\n await this.writeMetadata(task);\n this.onChange();\n }\n\n /** Claim deferred Fusion usage exactly once before returning it from bg_result. */\n async claimFusionUsage(task: BgTask): Promise<boolean> {\n if (task.fusion === undefined) throw new Error(`Task ${task.id} is not a Fusion task`);\n let claimed = false;\n const write = async () => {\n if (!task.fusion || task.fusion.usageDelivered) return;\n task.fusion.usageDelivered = true;\n await writeJsonAtomic(task.metadataAbsPath, snapshot(task));\n claimed = true;\n };\n const previous = task.metadataWriteChain ?? Promise.resolve();\n const next = previous.then(write, write);\n task.metadataWriteChain = next.catch(() => undefined);\n await next;\n return claimed;\n }\n\n /**\n * Start a prepared delegate child.\n *\n * The caller has already completed preflight, so by the time this runs the\n * seed, budget plan, and artifact directory exist and the argv is fixed. The\n * child is launched directly, never through a shell, and its terminal state\n * flows through the same durable notification path as `bg_run`.\n */\n async startDelegateTask(\n ctx: BackgroundTaskContext,\n request: StartDelegateTaskOptions,\n ): Promise<BgTask> {\n rejectSurvivalForTaskKind(request, 'delegate tasks');\n const admission = this.beginTaskAdmission('a delegate task');\n try {\n return await this.startDelegateTaskAdmitted(ctx, request, admission);\n } finally {\n this.releaseTaskAdmission(admission);\n }\n }\n\n private async startDelegateTaskAdmitted(\n ctx: BackgroundTaskContext,\n request: StartDelegateTaskOptions,\n admission: TaskAdmission,\n ): Promise<BgTask> {\n this.assertTaskAdmissionOpen('a delegate task', admission);\n const launch = resolvePiLaunch({ platform: this.platform });\n assertWindowsCommandLineWithinLimit(launch, request.argv, this.platform, 'bg-delegate');\n\n const dir = await this.awaitTaskAdmissionBoundary(this.ensureRuntimeDir(ctx), admission);\n this.assertTaskAdmissionOpen('a delegate task', admission);\n const id = request.facts.taskId;\n const outputAbsPath = join(dir.abs, `${id}.output`);\n const metadataAbsPath = join(dir.abs, `${id}.json`);\n const outputPath = join(dir.display, `${id}.output`);\n\n const task: BgTask = {\n id,\n name: normalizeTaskName(request.name) ?? 'Delegate task',\n command: ['pi', ...request.argv].map(shellQuote).join(' '),\n status: 'running',\n outputPath,\n outputAbsPath,\n metadataAbsPath,\n cwd: ctx.cwd,\n startTime: this.now(),\n exitCode: undefined,\n pid: undefined,\n bytesWritten: 0,\n isAgent: true,\n surviveReload: false,\n notified: false,\n notifyOnCompletion: request.notifyOnCompletion,\n triggerOnCompletion: request.triggerOnCompletion,\n timeoutSeconds: request.timeoutSeconds,\n model: request.facts.route.qualifiedId,\n delegate: request.facts,\n terminalPublished: false,\n terminalPublicationState: 'pending',\n terminalPublishAttempts: 0,\n waiters: [],\n };\n this.assertTaskAdmissionOpen('a delegate task', admission);\n this.tasks.set(id, task);\n\n const stream = createWriteStream(outputAbsPath, { flags: 'a', encoding: 'utf8' });\n task.stream = stream;\n stream.on('error', (error) => {\n task.error = `Output file write failed: ${error.message}`;\n });\n\n let unbindAdmissionCancellation = (): void => undefined;\n try {\n this.assertTaskAdmissionOpen('a delegate task', admission);\n const child = this.spawn(launch.executable, piLaunchArgv(launch, [...request.argv]), {\n cwd: ctx.cwd,\n detached: this.platform !== 'win32',\n shell: false,\n // The seed travels over stdin, never as a shell or positional argument,\n // so the bytes the child reads are exactly the bytes that were persisted\n // and hashed, with no quoting or command-line length limit in the path.\n stdio: ['pipe', 'pipe', 'pipe'],\n env: request.env,\n windowsHide: true,\n });\n this.captureSpawnedChild(task, child);\n\n child.stdout?.on('data', (data) => {\n this.appendChildOutput(task, data, 'stdout');\n });\n child.stderr?.on('data', (data) => {\n this.appendChildOutput(task, data, 'stderr');\n });\n child.on('error', (error) => {\n this.writeNotice(task, `\\n[delegate spawn error: ${error.message}]\\n`);\n void this.finalizeTask(task, 'failed', null, undefined, error.message);\n });\n child.on('close', (code, signalName) => {\n let status: TaskStatus;\n let error: string | undefined;\n if (task.killKind === 'user' || task.killKind === 'shutdown') {\n status = 'killed';\n } else if (task.killKind === 'timeout') {\n status = 'failed';\n error = task.error ?? `Timed out after ${String(request.timeoutSeconds ?? 0)}s`;\n } else if ((code ?? 0) === 0) {\n status = 'completed';\n } else {\n status = 'failed';\n error = `Exited with code ${code === null ? 'null' : String(code)}${signalName ? ` (${signalName})` : ''}`;\n }\n void this.finalizeTask(task, status, code, signalName, error);\n });\n\n if (request.timeoutSeconds !== undefined) {\n task.timeoutHandle = setTimeout(() => {\n if (task.status !== 'running') return;\n task.killKind = 'timeout';\n task.error = `Timed out after ${String(request.timeoutSeconds)}s`;\n this.writeNotice(task, `\\n[delegate timeout: ${task.error}]\\n`);\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (error) {\n void this.finalizeTask(\n task,\n 'failed',\n null,\n undefined,\n `${task.error}; kill failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }, request.timeoutSeconds * 1000);\n }\n\n unbindAdmissionCancellation = this.bindOwnedTaskToAdmission(task, admission);\n this.assertTaskAdmissionOpen('a delegate task', admission);\n writeDelegateStdin(child, request.stdinBytes, (error) => {\n this.writeNotice(task, `\\n[delegate stdin write failed: ${error.message}]\\n`);\n if (task.status === 'running') {\n task.killKind = 'user';\n task.error = `Delegate seed could not be delivered: ${error.message}`;\n try {\n this.requestKill(task, 'SIGTERM');\n } catch {\n void this.finalizeTask(task, 'failed', null, undefined, task.error);\n }\n }\n });\n\n await this.awaitTaskAdmissionBoundary(\n this.writeMetadata(task, admission.controller.signal),\n admission,\n );\n this.assertTaskAdmissionOpen('a delegate task', admission);\n this.onChange();\n return task;\n } catch (error) {\n if (admission.controller.signal.aborted) {\n const admissionError = this.taskAdmissionError(admission);\n let cleanupError: unknown;\n if (task.child === undefined) {\n try {\n await this.discardUnspawnedTask(task, [outputAbsPath, metadataAbsPath]);\n } catch (cleanupFailure) {\n cleanupError = cleanupFailure;\n }\n } else {\n this.stopOwnedTaskAfterAdmissionCancellation(task, admissionError);\n }\n throw this.surfacedTaskAdmissionError(admission, error, cleanupError);\n }\n const message = error instanceof Error ? error.message : String(error);\n this.writeNotice(task, `\\n[delegate spawn exception: ${message}]\\n`);\n await this.finalizeTask(task, 'failed', null, undefined, message);\n throw new Error(`Failed to start delegate task: ${message}`);\n } finally {\n unbindAdmissionCancellation();\n }\n }\n\n async startAttestedPiTask(\n ctx: BackgroundTaskContext,\n request: StartAttestedPiTaskOptions,\n ): Promise<BgTask> {\n rejectSurvivalForTaskKind(request, 'attested Pi tasks');\n const admission = this.beginTaskAdmission('an attested Pi task');\n try {\n return await this.startAttestedPiTaskAdmitted(ctx, request, admission);\n } finally {\n this.releaseTaskAdmission(admission);\n }\n }\n\n private async startAttestedPiTaskAdmitted(\n ctx: BackgroundTaskContext,\n request: StartAttestedPiTaskOptions,\n admission: TaskAdmission,\n ): Promise<BgTask> {\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const attested = await this.awaitTaskAdmissionBoundary(this.loadAttestedRuntime(), admission);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const attributionExtensionPath =\n request.provider === 'anthropic' ? resolveAnthropicAttributionExtensionPath() : undefined;\n const argv = attested.buildAttestedPiArgv(request, attributionExtensionPath);\n const attestedPiLaunch = resolvePiLaunch({ platform: this.platform });\n assertWindowsCommandLineWithinLimit(\n attestedPiLaunch,\n argv.slice(1),\n this.platform,\n 'attested-pi-run',\n );\n\n const dir = await this.awaitTaskAdmissionBoundary(this.ensureRuntimeDir(ctx), admission);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const id = attested.makeAttestedTaskId();\n if (!ATTESTED_TASK_ID_PATTERN.test(id))\n throw new Error('Generated attested task id is invalid');\n const paths = attested.makeAttestedTaskPaths(dir.abs, dir.display, id);\n const promptBytes = Buffer.from(request.prompt, 'utf8');\n const reportAbsPath = await this.awaitTaskAdmissionBoundary(\n attested.resolveReportPath(ctx.cwd, request.reportPath),\n admission,\n );\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const auth = attested.observePiOAuth(ctx, request.provider, request.model);\n const gitOptions = this.attestedGitOptions(admission);\n const repoRootRealpath = await attested.gitRepoRoot(ctx.cwd, gitOptions);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const cwdRealpath = await this.awaitTaskAdmissionBoundary(realpath(ctx.cwd), admission);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const startAuthority = await attested.gitAuthoritySnapshot(ctx.cwd, gitOptions);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n if (!startAuthority.clean)\n throw new Error('Attested Pi task requires a clean worktree at start');\n const timeoutSeconds =\n typeof request.timeoutSeconds === 'number' &&\n Number.isFinite(request.timeoutSeconds) &&\n request.timeoutSeconds > 0\n ? Math.floor(request.timeoutSeconds)\n : undefined;\n\n const task: BgTask = {\n id,\n name: normalizeTaskName(request.name) ?? 'Attested Pi task',\n command: argv.map(shellQuote).join(' '),\n status: 'running',\n outputPath: paths.outputPath,\n outputAbsPath: paths.outputAbsPath,\n metadataAbsPath: paths.metadataAbsPath,\n eventsAbsPath: paths.eventsAbsPath,\n stderrAbsPath: paths.stderrAbsPath,\n wrapperAbsPath: paths.wrapperAbsPath,\n attestationAbsPath: paths.attestationAbsPath,\n cwd: ctx.cwd,\n startTime: this.now(),\n exitCode: undefined,\n pid: undefined,\n bytesWritten: 0,\n isAgent: true,\n surviveReload: false,\n notified: false,\n notifyOnCompletion: false,\n triggerOnCompletion: false,\n timeoutSeconds,\n attestationPath: paths.attestationPath,\n attestedPi: {\n eventsPath: paths.eventsPath,\n stderrPath: paths.stderrPath,\n wrapperPath: paths.wrapperPath,\n attestationPath: paths.attestationPath,\n },\n terminalPublished: false,\n terminalPublicationState: 'pending',\n terminalPublishAttempts: 0,\n waiters: [],\n };\n const admissionArtifacts = [\n paths.outputAbsPath,\n paths.eventsAbsPath,\n paths.stderrAbsPath,\n paths.wrapperAbsPath,\n paths.metadataAbsPath,\n paths.attestationAbsPath,\n ];\n const admissionSignal = admission.controller.signal;\n try {\n await writeFileFsynced(paths.outputAbsPath, '', admissionSignal);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n await writeFileFsynced(paths.eventsAbsPath, '', admissionSignal);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n await writeFileFsynced(paths.stderrAbsPath, '', admissionSignal);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n await writeFileFsynced(\n paths.wrapperAbsPath,\n 'direct-spawn attested Pi task; no shell telemetry wrapper is used\\n',\n admissionSignal,\n );\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n await this.writeMetadata(task, admissionSignal);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n } catch (error) {\n let cleanupError: unknown;\n try {\n await this.discardUnspawnedTask(task, admissionArtifacts);\n } catch (cleanupFailure) {\n cleanupError = cleanupFailure;\n }\n if (admissionSignal.aborted) {\n throw this.surfacedTaskAdmissionError(admission, error, cleanupError);\n }\n if (cleanupError !== undefined) {\n throw new AggregateError(\n [error, cleanupError],\n `Attested Pi preflight failed and artifact cleanup also failed: ${BackgroundTaskRegistry.errorMessage(cleanupError)}`,\n );\n }\n throw error;\n }\n\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n this.tasks.set(id, task);\n let unbindAdmissionCancellation = (): void => undefined;\n try {\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n const captured = attested.spawnAndCapturePi(\n this.spawn,\n argv,\n {\n cwd: ctx.cwd,\n detached: this.platform !== 'win32',\n shell: false,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: attested.attestedPiChildEnv(this.env),\n windowsHide: true,\n },\n this.platform,\n attestedPiLaunch,\n );\n this.captureSpawnedChild(task, captured.child);\n\n captured.child.on('error', (error) => {\n void this.finalizeAttestedPiTask(\n task,\n attested,\n paths,\n argv,\n cwdRealpath,\n repoRootRealpath,\n startAuthority,\n auth,\n promptBytes,\n reportAbsPath,\n captured.stdoutChunks,\n captured.stderrChunks,\n 'failed',\n null,\n null,\n error.message,\n );\n });\n\n captured.child.on('close', (code, signalName) => {\n let status: TaskStatus = (code ?? 0) === 0 && signalName === null ? 'completed' : 'failed';\n let error: string | undefined;\n if (task.killKind === 'timeout') {\n status = 'failed';\n error = task.error ?? `Timed out after ${String(timeoutSeconds)}s`;\n } else if (task.killKind === 'user' || task.killKind === 'shutdown') {\n status = 'killed';\n error = task.error;\n } else if (status === 'failed') {\n const exitCode = code === null ? 'null' : String(code);\n error = `Exited with code ${exitCode}${signalName ? ` (${signalName})` : ''}`;\n }\n void this.finalizeAttestedPiTask(\n task,\n attested,\n paths,\n argv,\n cwdRealpath,\n repoRootRealpath,\n startAuthority,\n auth,\n promptBytes,\n reportAbsPath,\n captured.stdoutChunks,\n captured.stderrChunks,\n status,\n code,\n signalName,\n error,\n );\n });\n\n unbindAdmissionCancellation = this.bindOwnedTaskToAdmission(task, admission);\n await this.awaitTaskAdmissionBoundary(this.writeMetadata(task, admissionSignal), admission);\n this.assertTaskAdmissionOpen('an attested Pi task', admission);\n this.onChange();\n\n if (timeoutSeconds !== undefined) {\n task.timeoutHandle = setTimeout(() => {\n if (task.status !== 'running') return;\n task.killKind = 'timeout';\n task.error = `Timed out after ${String(timeoutSeconds)}s`;\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (error) {\n void this.finalizeAttestedPiTask(\n task,\n attested,\n paths,\n argv,\n cwdRealpath,\n repoRootRealpath,\n startAuthority,\n auth,\n promptBytes,\n reportAbsPath,\n captured.stdoutChunks,\n captured.stderrChunks,\n 'failed',\n null,\n null,\n error instanceof Error ? error.message : String(error),\n );\n }\n }, timeoutSeconds * 1000);\n }\n\n return task;\n } catch (error) {\n let cleanupError: unknown;\n if (task.child === undefined) {\n try {\n await this.discardUnspawnedTask(task, admissionArtifacts);\n } catch (cleanupFailure) {\n cleanupError = cleanupFailure;\n }\n } else {\n const taskError = admissionSignal.aborted\n ? this.taskAdmissionError(admission)\n : error instanceof Error\n ? error\n : new Error(String(error));\n this.stopOwnedTaskAfterAdmissionCancellation(task, taskError);\n }\n if (admissionSignal.aborted) {\n throw this.surfacedTaskAdmissionError(admission, error, cleanupError);\n }\n if (cleanupError !== undefined) {\n throw new AggregateError(\n [error, cleanupError],\n `Attested Pi launch failed and artifact cleanup also failed: ${BackgroundTaskRegistry.errorMessage(cleanupError)}`,\n );\n }\n throw error;\n } finally {\n unbindAdmissionCancellation();\n }\n }\n\n private async finalizeAttestedPiTask(\n task: BgTask,\n attested: AttestedPiRuntime,\n paths: ReturnType<AttestedPiRuntime['makeAttestedTaskPaths']>,\n argv: string[],\n cwdRealpath: string,\n repoRootRealpath: string,\n startAuthority: Awaited<ReturnType<AttestedPiRuntime['gitAuthoritySnapshot']>>,\n auth: ReturnType<AttestedPiRuntime['observePiOAuth']>,\n promptBytes: Buffer,\n reportAbsPath: string,\n stdoutChunks: Buffer[],\n stderrChunks: Buffer[],\n status: TaskStatus,\n exitCode: number | null,\n signal: NodeJS.Signals | null,\n error?: string,\n ): Promise<void> {\n if (task.finalized) return;\n task.finalized = true;\n if (task.timeoutHandle) clearTimeout(task.timeoutHandle);\n if (this.platform === 'win32') this.clearKillEscalationTimer(task);\n let finalStatus = status;\n let finalError = error;\n const posixForceFailure = await this.awaitPosixProcessGroupBeforeTerminal(task);\n if (posixForceFailure !== undefined) {\n finalStatus = 'failed';\n finalError = BackgroundTaskRegistry.appendTaskError(finalError, posixForceFailure.message);\n }\n const windowsForceFailure = await this.awaitWindowsForceBeforeTerminal(task);\n if (windowsForceFailure !== undefined) {\n finalStatus = 'failed';\n finalError = BackgroundTaskRegistry.appendTaskError(finalError, windowsForceFailure.message);\n }\n task.exitCode = exitCode;\n task.signal = signal;\n task.endTime = this.now();\n if (finalError) task.error = finalError;\n\n const rawEvents = Buffer.concat(stdoutChunks);\n const rawStderr = Buffer.concat(stderrChunks);\n await writeFileFsynced(paths.eventsAbsPath, rawEvents);\n await writeFileFsynced(paths.stderrAbsPath, rawStderr);\n\n let parsed: ReturnType<AttestedPiRuntime['parsePiJsonEvents']> | undefined;\n if (finalStatus === 'completed') {\n try {\n parsed = attested.parsePiJsonEvents(rawEvents);\n task.model = parsed.providerScopedModelId;\n task.tokenUsage = {\n input: parsed.tokenUsage.input,\n output: parsed.tokenUsage.output,\n cacheRead: parsed.tokenUsage.cacheRead,\n cacheWrite: parsed.tokenUsage.cacheWrite,\n totalTokens: parsed.tokenUsage.totalTokens,\n };\n if (parsed.tokenUsage.costTotal !== undefined)\n task.tokenUsage.costTotal = parsed.tokenUsage.costTotal;\n task.toolUsage = parsed.toolUsage;\n const outputBytes = Buffer.from(parsed.humanTranscript, 'utf8');\n task.bytesWritten = outputBytes.length;\n await writeFileFsynced(paths.outputAbsPath, outputBytes);\n } catch (parseError) {\n finalStatus = 'failed';\n task.error = parseError instanceof Error ? parseError.message : String(parseError);\n const outputBytes = Buffer.from(`[attested Pi task error: ${task.error}]\\n`, 'utf8');\n task.bytesWritten = outputBytes.length;\n await writeFileFsynced(paths.outputAbsPath, outputBytes);\n }\n } else {\n const outputBytes = Buffer.from(rawStderr.toString('utf8'), 'utf8');\n task.bytesWritten = outputBytes.length;\n await writeFileFsynced(paths.outputAbsPath, outputBytes);\n }\n\n try {\n if (finalStatus === 'completed' && parsed) {\n const finishAuthority = await attested.gitAuthoritySnapshot(\n task.cwd,\n this.attestedGitOptions(),\n );\n const completedSnapshot: BgTaskSnapshot = { ...snapshot(task), status: 'completed' };\n await this.writeMetadataSnapshot(task, completedSnapshot);\n const attestation = await attested.buildPiTaskAttestation({\n task: completedSnapshot,\n paths,\n sessionDir: dirNameFromDisplay(paths.outputPath),\n argv,\n cwdRealpath,\n repoRootRealpath,\n startAuthority,\n finishAuthority,\n parsedEvents: parsed,\n auth,\n prompt: promptBytes,\n reportAbsPath,\n });\n await writeJsonAtomic(paths.attestationAbsPath, attestation);\n } else {\n await this.writeMetadataSnapshot(task, { ...snapshot(task), status: finalStatus });\n }\n } catch (attestationError) {\n finalStatus = 'failed';\n task.error =\n attestationError instanceof Error ? attestationError.message : String(attestationError);\n await this.writeMetadataSnapshot(task, { ...snapshot(task), status: 'failed' }).catch(\n (metadataError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write failed attested metadata for ${task.id}:`,\n metadataError,\n );\n },\n );\n }\n\n task.status = finalStatus;\n for (const waiter of task.waiters.splice(0)) waiter();\n this.onChange();\n this.publishTerminal(task);\n this.pruneOldTasks();\n }\n\n resolveTask(idOrPrefix: string): BgTask {\n const id = idOrPrefix.trim();\n if (!id) throw new Error('Task ID is required');\n const exact = this.tasks.get(id);\n if (exact) return exact;\n const matches = [...this.tasks.values()].filter((task) => task.id.startsWith(id));\n const onlyMatch = matches[0];\n if (matches.length === 1 && onlyMatch) return onlyMatch;\n if (matches.length > 1)\n throw new Error(\n `Ambiguous task ID prefix \"${id}\": ${matches.map((task) => task.id).join(', ')}`,\n );\n throw new Error(`Unknown background task ID: ${id}`);\n }\n\n async stopTask(task: BgTask, kind: KillKind, reason?: string): Promise<BgTask> {\n if (task.status !== 'running') {\n throw new Error(`Task ${task.id} is ${task.status}, not running`);\n }\n if (task.reloadExecution !== undefined) {\n return task.reloadExecution.requestStop(kind, reason);\n }\n const stopWaitMs = task.managedStopWaitMs ?? this.stopWaitMs;\n if (\n this.platform !== 'win32' &&\n task.managedCancel === undefined &&\n task.posixProcessGroupSignalAuthorityReleased === true &&\n this.posixProcessGroupKillStates.get(task) === undefined\n ) {\n const finalized = await this.waitForEnd(task, stopWaitMs);\n if (!finalized) {\n throw new Error(\n `Task ${task.id} did not finish terminalization within ${formatDuration(stopWaitMs)} after its process group signal authority was released`,\n );\n }\n return task;\n }\n task.killKind = kind;\n if (reason) task.error = reason;\n this.requestKill(task, 'SIGTERM');\n const stopped =\n task.managedCancel === undefined && this.platform === 'win32'\n ? await this.waitForEndOrWindowsForceFailure(task, stopWaitMs)\n : task.managedCancel === undefined\n ? await this.waitForEndOrPosixForceFailure(task, stopWaitMs)\n : await this.waitForEnd(task, stopWaitMs);\n const posixForceFailure = this.posixProcessGroupKillStates.get(task)?.failure;\n if (posixForceFailure !== undefined) throw posixForceFailure;\n const windowsForceFailure = this.windowsKillStates.get(task)?.forceFailure;\n if (windowsForceFailure !== undefined) throw windowsForceFailure;\n if (!stopped) {\n throw new Error(\n `Task ${task.id} did not exit within ${formatDuration(stopWaitMs)} after cancellation`,\n );\n }\n return task;\n }\n\n async stopAllRunning(\n kind: KillKind,\n reason?: string,\n ): Promise<{ stopped: number; failures: string[] }> {\n const running = this.allTasks().filter((task) => task.status === 'running');\n const failures: string[] = [];\n let stopped = 0;\n await Promise.all(\n running.map(async (task) => {\n try {\n await this.stopTask(task, kind, reason);\n stopped++;\n } catch (error) {\n failures.push(\n `${taskDisplayName(task)} (${task.id}): ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }),\n );\n return { stopped, failures };\n }\n\n async getTaskLogs(\n task: BgTask,\n maxBytes: number,\n tail: boolean,\n ): Promise<{ text: string; details: BgLogsDetails }> {\n if (!existsSync(task.outputAbsPath)) {\n throw new Error(`Output file does not exist for ${task.id}: ${task.outputPath}`);\n }\n const read = await boundedRead(task.outputAbsPath, maxBytes, tail);\n const direction = tail ? 'tail' : 'head';\n let text = read.content.length > 0 ? read.content : '(no output yet)';\n if (read.truncated) {\n const omitted = read.totalBytes - read.bytesRead;\n const notice = `\\n\\n[Showing ${direction} ${formatSize(read.bytesRead)} of ${formatSize(read.totalBytes)}; ${formatSize(omitted)} omitted. Full output: ${task.outputPath}]`;\n text = tail ? `${notice}\\n\\n${text}` : `${text}${notice}`;\n } else {\n text += `\\n\\n[Full output: ${task.outputPath}]`;\n }\n return {\n text,\n details: {\n task: snapshot(task),\n path: task.outputPath,\n bytesRead: read.bytesRead,\n truncated: read.truncated,\n tail,\n },\n };\n }\n\n private async writeMetadata(task: BgTask, signal?: AbortSignal): Promise<void> {\n await this.writeMetadataSnapshot(task, snapshot(task), signal);\n }\n\n private async writeMetadataSnapshot(\n task: BgTask,\n value: BgTaskSnapshot,\n signal?: AbortSignal,\n ): Promise<void> {\n const write = async () => {\n await writeJsonAtomic(task.metadataAbsPath, value, signal);\n };\n const previous = task.metadataWriteChain ?? Promise.resolve();\n const next = previous.then(write, write);\n task.metadataWriteChain = next.catch(() => undefined);\n await next;\n }\n\n private ingestTelemetry(task: BgTask, text: string): void {\n if (!text) return;\n const telemetryText = `${task.contextUsageBuffer ?? ''}${text}`;\n let latestContext = task.contextUsage;\n let latestTokens = task.tokenUsage;\n let latestTools = task.toolUsage;\n let latestModel = task.model;\n for (const line of telemetryText.split(/\\r?\\n/)) {\n if (!line.includes('background-task-')) continue;\n const trimmed = line.trim();\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n try {\n const parsed = parseJsonText(trimmed);\n if (!isJsonObject(parsed)) continue;\n const payload: TelemetryControlPayload = parsed;\n if (payload.type === 'background-task-context-usage') {\n latestContext = normalizeContextUsage(payload) ?? latestContext;\n } else if (payload.type === 'background-task-telemetry') {\n latestContext = normalizeContextUsage(payload.contextUsage) ?? latestContext;\n latestTokens = normalizeTokenUsage(payload.tokenUsage) ?? latestTokens;\n latestTools = normalizeToolUsage(payload.toolUsage) ?? latestTools;\n latestModel = normalizeModel(payload.model) ?? latestModel;\n }\n } catch {\n // Ignore malformed optional telemetry; task output remains authoritative for debugging.\n }\n }\n }\n const xmlMatches = telemetryText.matchAll(\n /<background-task-context-usage>[\\s\\S]*?<\\/background-task-context-usage>/gi,\n );\n for (const match of xmlMatches) latestContext = parseContextUsageXml(match[0]) ?? latestContext;\n\n const lastNewline = Math.max(telemetryText.lastIndexOf('\\n'), telemetryText.lastIndexOf('\\r'));\n let retained = lastNewline >= 0 ? telemetryText.slice(lastNewline + 1) : telemetryText;\n const lastXmlOpen = telemetryText.toLowerCase().lastIndexOf('<background-task-context-usage');\n const lastXmlClose = telemetryText\n .toLowerCase()\n .lastIndexOf('</background-task-context-usage>');\n if (lastXmlOpen > lastXmlClose) retained = telemetryText.slice(lastXmlOpen);\n task.contextUsageBuffer = retained.slice(-TELEMETRY_BUFFER_CHARS);\n\n this.commitTelemetry(task, {\n context: latestContext,\n tokens: latestTokens,\n tools: latestTools,\n model: latestModel,\n });\n }\n\n /** Apply the latest parsed telemetry to a task, persisting metadata and notifying the UI only on change. */\n private commitTelemetry(task: BgTask, next: TelemetryDelta): void {\n const before = JSON.stringify({\n contextUsage: task.contextUsage,\n tokenUsage: task.tokenUsage,\n toolUsage: task.toolUsage,\n model: task.model,\n });\n if (next.context !== undefined) task.contextUsage = next.context;\n if (next.tokens !== undefined) task.tokenUsage = next.tokens;\n if (next.tools !== undefined) task.toolUsage = next.tools;\n if (next.model !== undefined) task.model = next.model;\n const after = JSON.stringify({\n contextUsage: task.contextUsage,\n tokenUsage: task.tokenUsage,\n toolUsage: task.toolUsage,\n model: task.model,\n });\n if (before !== after) {\n this.onChange();\n void this.writeMetadata(task).catch((error: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write telemetry metadata for ${task.id}:`,\n error,\n );\n });\n }\n }\n\n /** Cap-enforcing sink for all persisted task output; terminates the task once the byte cap is exceeded. */\n private writeToStream(task: BgTask, buffer: Buffer): void {\n if (!task.stream || task.stream.destroyed) return;\n if (buffer.length === 0) return;\n\n const nextBytes = task.bytesWritten + buffer.length;\n if (nextBytes <= this.maxOutputBytes) {\n task.stream.write(buffer);\n task.bytesWritten = nextBytes;\n return;\n }\n\n const remaining = Math.max(0, this.maxOutputBytes - task.bytesWritten);\n if (remaining > 0) {\n task.stream.write(buffer.subarray(0, remaining));\n task.bytesWritten += remaining;\n }\n\n if (!task.capExceeded) {\n task.capExceeded = true;\n task.error = `Output exceeded cap of ${formatSize(this.maxOutputBytes)}; terminating task`;\n const notice = `\\n\\n[background task error: ${task.error}]\\n`;\n task.stream.write(notice);\n task.bytesWritten += Buffer.byteLength(notice, 'utf8');\n task.killKind = 'output_cap';\n try {\n this.requestKill(task, 'SIGTERM');\n } catch (error) {\n task.error = `${task.error}; kill failed: ${error instanceof Error ? error.message : String(error)}`;\n void this.finalizeTask(task, 'failed', null, undefined, task.error);\n }\n }\n }\n\n /** Persist an internally generated notice (spawn/timeout/cap diagnostics) verbatim. */\n private writeNotice(task: BgTask, text: string): void {\n if (!text) return;\n this.writeToStream(task, Buffer.from(text, 'utf8'));\n }\n\n private appendChildOutput(\n task: BgTask,\n data: Buffer | string,\n source: 'stdout' | 'stderr',\n ): void {\n if (!task.stream || task.stream.destroyed) return;\n const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data, 'utf8');\n if (buffer.length === 0) return;\n if (task.telemetryWrapped) {\n // Wrapped Pi agents stream control lines on stdout (telemetry + activity); child\n // stderr is raw diagnostics and is always passed through to the transcript verbatim.\n if (source === 'stdout') this.processAgentStdout(task, buffer.toString('utf8'));\n else this.writeToStream(task, buffer);\n return;\n }\n this.ingestTelemetry(task, buffer.toString('utf8'));\n this.writeToStream(task, buffer);\n }\n\n /** Reconstruct wrapped-agent stdout into whole control lines, routing telemetry to metrics and activity to the transcript. */\n private processAgentStdout(task: BgTask, text: string): void {\n const buffered = `${task.agentStdoutBuffer ?? ''}${text}`;\n const lastNewline = buffered.lastIndexOf('\\n');\n task.agentStdoutBuffer = lastNewline >= 0 ? buffered.slice(lastNewline + 1) : buffered;\n if (lastNewline < 0) return;\n const latest: TelemetryDelta = {};\n for (const line of buffered.slice(0, lastNewline).split('\\n'))\n this.consumeAgentLine(task, line, latest);\n this.commitTelemetry(task, latest);\n }\n\n /** Flush a trailing partial wrapped-agent line on finalize so the last transcript fragment is never lost. */\n private flushAgentStdout(task: BgTask): void {\n const remainder = task.agentStdoutBuffer;\n if (!remainder) return;\n task.agentStdoutBuffer = '';\n const latest: TelemetryDelta = {};\n this.consumeAgentLine(task, remainder, latest);\n this.commitTelemetry(task, latest);\n }\n\n private consumeAgentLine(task: BgTask, rawLine: string, latest: TelemetryDelta): void {\n const line = rawLine.replace(/\\r$/, '');\n const trimmed = line.trim();\n if (!trimmed) return;\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n this.writeNotice(task, `${line}\\n`);\n return;\n }\n let parsed: unknown;\n try {\n parsed = parseJsonText(trimmed);\n } catch {\n this.writeNotice(task, `${line}\\n`);\n return;\n }\n if (!isJsonObject(parsed)) {\n this.writeNotice(task, `${line}\\n`);\n return;\n }\n const record: TelemetryControlPayload = parsed;\n const type = record.type;\n if (type === 'background-task-context-usage') {\n const context = normalizeContextUsage(record);\n if (context) latest.context = context;\n return;\n }\n if (type === 'background-task-telemetry') {\n const context = normalizeContextUsage(record.contextUsage);\n if (context) latest.context = context;\n const tokens = normalizeTokenUsage(record.tokenUsage);\n if (tokens) latest.tokens = tokens;\n const tools = normalizeToolUsage(record.toolUsage);\n if (tools) latest.tools = tools;\n const model = normalizeModel(record.model);\n if (model) latest.model = model;\n return;\n }\n const activity = parseAgentActivity(parsed);\n if (activity) {\n const formatted = formatAgentActivityLine(activity);\n if (formatted) this.writeNotice(task, `${formatted}\\n`);\n return;\n }\n // Unknown JSON object: pass through to the transcript rather than silently dropping it.\n this.writeNotice(task, `${line}\\n`);\n }\n\n private beginPosixProcessGroupKill(task: BgTask, armGrace: boolean): PosixProcessGroupKillState {\n const existing = this.posixProcessGroupKillStates.get(task);\n if (existing !== undefined) return existing;\n if (task.posixProcessGroupSignalAuthorityReleased === true) {\n throw new Error(`Task ${task.id} has released its POSIX process-group signal authority`);\n }\n const groupId = task.ownedPosixProcessGroupId;\n if (groupId === undefined) {\n throw new Error(`Task ${task.id} has no owned POSIX process group`);\n }\n\n let resolveCompletion = (): void => undefined;\n const completion = new Promise<void>((resolve) => {\n resolveCompletion = resolve;\n });\n // Finish ownership slightly before stopTask's waiter so a force/proof\n // failure is observed as that specific loud error instead of a generic\n // cancellation timeout.\n const reserveMs = Math.min(25, Math.max(1, Math.floor(this.stopWaitMs / 4)));\n const ownershipMs = Math.max(1, this.stopWaitMs - reserveMs);\n const state: PosixProcessGroupKillState = {\n groupId,\n completion,\n resolveCompletion,\n deadlineAt: Date.now() + ownershipMs,\n forceAttempted: false,\n settled: false,\n };\n this.posixProcessGroupKillStates.set(task, state);\n\n if (armGrace) {\n // Publish the sole force owner before TERM. An injected signal can emit\n // close reentrantly; that close must see and await this exact state.\n task.killEscalationTimer = setTimeout(\n () => {\n task.killEscalationTimer = undefined;\n this.forceOwnedPosixProcessGroup(task, state);\n },\n Math.min(this.killGraceMs, ownershipMs),\n );\n // Unlike ordinary housekeeping timers, this owner stays referenced: a\n // departed leader must not let the host exit and strand its owned group.\n }\n return state;\n }\n\n private finishPosixProcessGroupKill(\n task: BgTask,\n state: PosixProcessGroupKillState,\n releaseOwnership: boolean,\n ): void {\n if (state.settled) return;\n state.settled = true;\n this.clearKillEscalationTimer(task);\n if (state.verificationTimer !== undefined) {\n clearTimeout(state.verificationTimer);\n state.verificationTimer = undefined;\n }\n task.posixProcessGroupSignalAuthorityReleased = true;\n if (releaseOwnership && task.ownedPosixProcessGroupId === state.groupId) {\n delete task.ownedPosixProcessGroupId;\n }\n state.resolveCompletion();\n const failure = state.failure;\n const listeners = state.failureListeners;\n if (listeners !== undefined) {\n delete state.failureListeners;\n if (failure !== undefined) {\n for (const listener of listeners) listener(failure);\n }\n }\n }\n\n private observeOwnedPosixProcessGroupGone(\n task: BgTask,\n state: PosixProcessGroupKillState,\n ): boolean {\n if (state.settled) return state.failure === undefined;\n try {\n const exists = this.killProcess(-state.groupId, 0);\n state.lastProbeError = exists\n ? undefined\n : new Error(`process-group probe for ${String(state.groupId)} returned false`);\n return false;\n } catch (error) {\n if (typeof error === 'object' && error !== null && Reflect.get(error, 'code') === 'ESRCH') {\n this.finishPosixProcessGroupKill(task, state, true);\n return true;\n }\n state.lastProbeError =\n error instanceof Error ? error : new Error(BackgroundTaskRegistry.errorMessage(error));\n return false;\n }\n }\n\n private recordPosixProcessGroupForceFailure(\n task: BgTask,\n state: PosixProcessGroupKillState,\n error: Error,\n ): void {\n if (state.settled) return;\n state.failure = error;\n this.finishPosixProcessGroupKill(task, state, false);\n task.error = BackgroundTaskRegistry.appendTaskError(task.error, error.message);\n this.writeNotice(task, `\\n[background task POSIX termination: ${error.message}]\\n`);\n this.onChange();\n void this.writeMetadata(task).catch((metadataError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write POSIX process-group failure metadata for ${task.id}:`,\n metadataError,\n );\n });\n }\n\n private schedulePosixProcessGroupVerification(\n task: BgTask,\n state: PosixProcessGroupKillState,\n ): void {\n if (state.settled) return;\n const remainingMs = state.deadlineAt - Date.now();\n if (remainingMs <= 0) {\n const probeDetail =\n state.lastProbeError === undefined\n ? ''\n : `; last group probe failed: ${state.lastProbeError.message}`;\n this.recordPosixProcessGroupForceFailure(\n task,\n state,\n new Error(\n `POSIX process group ${String(state.groupId)} remained present after SIGKILL${probeDetail}. Descendant processes may have leaked.`,\n ),\n );\n return;\n }\n state.verificationTimer = setTimeout(\n () => {\n state.verificationTimer = undefined;\n if (this.observeOwnedPosixProcessGroupGone(task, state)) return;\n this.schedulePosixProcessGroupVerification(task, state);\n },\n Math.min(10, remainingMs),\n );\n }\n\n private forceOwnedPosixProcessGroup(task: BgTask, state: PosixProcessGroupKillState): void {\n if (state.settled || state.forceAttempted) return;\n // Latch before either probe or signal: both are injected boundaries that can\n // reentrantly emit root close, and no continuation may launch a second KILL.\n state.forceAttempted = true;\n this.clearKillEscalationTimer(task);\n if (this.observeOwnedPosixProcessGroupGone(task, state)) return;\n\n try {\n const forced = this.killProcess(-state.groupId, 'SIGKILL');\n if (!forced) {\n this.recordPosixProcessGroupForceFailure(\n task,\n state,\n new Error(\n `POSIX process-group SIGKILL returned false for task ${task.id} group ${String(state.groupId)}. Descendant processes may have leaked.`,\n ),\n );\n return;\n }\n } catch (error) {\n if (typeof error === 'object' && error !== null && Reflect.get(error, 'code') === 'ESRCH') {\n this.finishPosixProcessGroupKill(task, state, true);\n return;\n }\n this.recordPosixProcessGroupForceFailure(\n task,\n state,\n new Error(\n `POSIX process-group SIGKILL failed for task ${task.id} group ${String(state.groupId)}: ${BackgroundTaskRegistry.errorMessage(error)}. Descendant processes may have leaked.`,\n ),\n );\n return;\n }\n\n if (this.observeOwnedPosixProcessGroupGone(task, state)) return;\n this.schedulePosixProcessGroupVerification(task, state);\n }\n\n private requestPosixKill(task: BgTask, signal: NodeJS.Signals): void {\n const state = this.beginPosixProcessGroupKill(task, signal !== 'SIGKILL');\n if (signal === 'SIGKILL') {\n task.killSignalSent = true;\n this.forceOwnedPosixProcessGroup(task, state);\n return;\n }\n if (task.killSignalSent) return;\n // Publish de-duplication before the signal boundary for the same reason the\n // state/timer is published above: close may be emitted synchronously.\n task.killSignalSent = true;\n\n const errors: string[] = [];\n let killed = false;\n try {\n killed = this.killProcess(-state.groupId, signal);\n if (!killed) errors.push(`process group ${signal} returned false`);\n } catch (error) {\n if (typeof error === 'object' && error !== null && Reflect.get(error, 'code') === 'ESRCH') {\n this.finishPosixProcessGroupKill(task, state, true);\n } else {\n errors.push(`process group kill failed: ${BackgroundTaskRegistry.errorMessage(error)}`);\n }\n }\n\n if (!killed) {\n try {\n killed = task.child?.kill(signal) === true;\n if (!killed) errors.push(`child ${signal} returned false`);\n } catch (error) {\n errors.push(`child kill failed: ${BackgroundTaskRegistry.errorMessage(error)}`);\n }\n }\n\n if (!killed) {\n // If TERM reached neither target, waiting out grace has no benefit. Keep\n // the same owner but attempt its one force phase immediately.\n if (!state.settled) this.forceOwnedPosixProcessGroup(task, state);\n throw new Error(`Could not kill task ${task.id}: ${errors.join('; ')}`);\n }\n }\n\n private async awaitPosixProcessGroupBeforeTerminal(task: BgTask): Promise<Error | undefined> {\n if (this.platform === 'win32') return undefined;\n const state = this.posixProcessGroupKillStates.get(task);\n if (state === undefined) {\n // No tree stop won the race before direct-child finalization. Release\n // signal authority synchronously so a concurrent late stop waits for this\n // terminalization instead of targeting a potentially reused group id.\n task.posixProcessGroupSignalAuthorityReleased = true;\n delete task.ownedPosixProcessGroupId;\n return undefined;\n }\n this.observeOwnedPosixProcessGroupGone(task, state);\n await state.completion;\n return state.failure;\n }\n\n private waitForEndOrPosixForceFailure(task: BgTask, timeoutMs: number): Promise<boolean> {\n const state = this.posixProcessGroupKillStates.get(task);\n if (state === undefined) return this.waitForEnd(task, timeoutMs);\n if (state.failure !== undefined) return Promise.reject(state.failure);\n if (task.status !== 'running') return Promise.resolve(true);\n return new Promise((resolve, reject) => {\n const cleanup = () => {\n clearTimeout(timeout);\n const waiterIndex = task.waiters.indexOf(done);\n if (waiterIndex >= 0) task.waiters.splice(waiterIndex, 1);\n const listeners = state.failureListeners;\n if (listeners !== undefined) {\n const listenerIndex = listeners.indexOf(failed);\n if (listenerIndex >= 0) listeners.splice(listenerIndex, 1);\n if (listeners.length === 0) delete state.failureListeners;\n }\n };\n const timeout = setTimeout(() => {\n cleanup();\n resolve(false);\n }, timeoutMs);\n const done = () => {\n cleanup();\n resolve(true);\n };\n const failed = (error: Error) => {\n cleanup();\n reject(error);\n };\n task.waiters.push(done);\n if (state.failureListeners === undefined) state.failureListeners = [];\n state.failureListeners.push(failed);\n });\n }\n\n private getWindowsKillState(task: BgTask): WindowsKillState {\n let state = this.windowsKillStates.get(task);\n if (state === undefined) {\n state = {};\n this.windowsKillStates.set(task, state);\n }\n return state;\n }\n\n private static errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n }\n\n private static appendTaskError(existing: string | undefined, next: string): string {\n if (existing === undefined || existing.length === 0) return next;\n if (existing.includes(next)) return existing;\n return `${existing}; ${next}`;\n }\n\n private static describeTaskkillOutcome(outcome: TaskkillOutcome): string {\n const exitCode = outcome.exitCode === null ? 'null' : String(outcome.exitCode);\n const signal = outcome.signal === null ? 'null' : outcome.signal;\n const stdout = outcome.stdout.length > 0 ? ` stdout=${JSON.stringify(outcome.stdout)}` : '';\n const stderr = outcome.stderr.length > 0 ? ` stderr=${JSON.stringify(outcome.stderr)}` : '';\n const stdoutTruncated = outcome.stdoutTruncated ? ' stdout_truncated=true' : '';\n const stderrTruncated = outcome.stderrTruncated ? ' stderr_truncated=true' : '';\n return `exit=${exitCode} signal=${signal}${stdout}${stderr}${stdoutTruncated}${stderrTruncated}`;\n }\n\n private isWindowsTaskkillTerminalRace(task: BgTask): boolean {\n return task.status !== 'running' || task.finalized === true;\n }\n\n private clearKillEscalationTimer(task: BgTask): void {\n if (task.killEscalationTimer !== undefined) {\n clearTimeout(task.killEscalationTimer);\n task.killEscalationTimer = undefined;\n }\n }\n\n private recordWindowsTaskkillNotice(task: BgTask, message: string): void {\n this.writeNotice(task, `\\n[background task Windows termination: ${message}]\\n`);\n }\n\n private recordWindowsSoftFailure(task: BgTask, pid: number, detail: string): void {\n const message =\n `Windows taskkill /T logical termination request failed for task ${task.id} pid ${String(pid)}: ` +\n `${detail}; force escalation remains scheduled`;\n task.error = BackgroundTaskRegistry.appendTaskError(task.error, message);\n this.recordWindowsTaskkillNotice(task, message);\n this.onChange();\n void this.writeMetadata(task).catch((metadataError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write Windows taskkill soft-failure metadata for ${task.id}:`,\n metadataError,\n );\n });\n }\n\n private makeWindowsForceFailure(task: BgTask, pid: number, detail: string): Error {\n return new Error(\n `Windows taskkill /T /F force termination failed for task ${task.id} pid ${String(pid)}: ${detail}. Descendant processes may have leaked.`,\n );\n }\n\n private recordWindowsForceFailure(task: BgTask, error: Error): void {\n const state = this.getWindowsKillState(task);\n state.forceFailure = error;\n task.error = BackgroundTaskRegistry.appendTaskError(task.error, error.message);\n this.recordWindowsTaskkillNotice(task, error.message);\n this.onChange();\n void this.writeMetadata(task).catch((metadataError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write Windows taskkill force-failure metadata for ${task.id}:`,\n metadataError,\n );\n });\n const listeners = state.forceFailureListeners;\n if (listeners !== undefined) {\n delete state.forceFailureListeners;\n for (const listener of listeners) listener(error);\n }\n }\n\n private evaluateWindowsTaskkillOutcome(\n task: BgTask,\n pid: number,\n phase: WindowsKillPhase,\n outcome: TaskkillOutcome,\n ): Error | undefined {\n if (outcome.exitCode === 0) return undefined;\n const detail = BackgroundTaskRegistry.describeTaskkillOutcome(outcome);\n if (outcome.exitCode === 128) {\n this.recordWindowsTaskkillNotice(\n task,\n `taskkill ${phase} reported process not found for pid ${String(pid)} (${detail}); treating as an already-exited race`,\n );\n return undefined;\n }\n if (this.isWindowsTaskkillTerminalRace(task)) {\n this.recordWindowsTaskkillNotice(\n task,\n `taskkill ${phase} finished after the task became terminal for pid ${String(pid)} (${detail}); treating as a terminal race`,\n );\n return undefined;\n }\n if (phase === 'terminate') {\n this.recordWindowsSoftFailure(task, pid, detail);\n return undefined;\n }\n return this.makeWindowsForceFailure(task, pid, detail);\n }\n\n private handleWindowsSoftException(\n task: BgTask,\n pid: number,\n error: unknown,\n state: WindowsKillState,\n ): void {\n const message = BackgroundTaskRegistry.errorMessage(error);\n if (state.forcePromise !== undefined || this.isWindowsTaskkillTerminalRace(task)) return;\n this.recordWindowsSoftFailure(task, pid, message);\n }\n\n private startWindowsSoftKill(task: BgTask, pid: number): Promise<void> {\n const state = this.getWindowsKillState(task);\n if (state.softPromise !== undefined) return state.softPromise;\n const controller = new AbortController();\n state.softController = controller;\n\n let launched: Promise<TaskkillOutcome>;\n try {\n launched = this.killTree(pid, 'terminate', controller.signal);\n } catch (error) {\n delete state.softController;\n throw new Error(\n `Could not kill task ${task.id}: Windows taskkill /T failed to start: ${BackgroundTaskRegistry.errorMessage(error)}`,\n );\n }\n\n const promise = launched\n .then((outcome) => {\n if (state.forcePromise !== undefined || this.isWindowsTaskkillTerminalRace(task)) return;\n const failure = this.evaluateWindowsTaskkillOutcome(task, pid, 'terminate', outcome);\n if (failure !== undefined) throw failure;\n })\n .catch((error: unknown) => {\n this.handleWindowsSoftException(task, pid, error, state);\n })\n .finally(() => {\n if (state.softController === controller) delete state.softController;\n });\n state.softPromise = promise;\n return promise;\n }\n\n private startWindowsForceKill(task: BgTask, pid: number): Promise<void> {\n const state = this.getWindowsKillState(task);\n if (state.forcePromise !== undefined) return state.forcePromise;\n\n let resolveForce: (() => void) | undefined;\n let rejectForce: ((error: unknown) => void) | undefined;\n const forcePromise = new Promise<void>((resolve, reject) => {\n resolveForce = resolve;\n rejectForce = reject;\n });\n if (resolveForce === undefined || rejectForce === undefined) {\n throw new Error('Windows force termination promise could not be initialized');\n }\n const resolveForceReady = resolveForce;\n const rejectForceReady = rejectForce;\n state.forcePromise = forcePromise;\n void forcePromise.catch((error: unknown) => {\n this.logger.error(\n `[background-tasks] Windows force tree termination failed for ${task.id}:`,\n error,\n );\n });\n\n this.clearKillEscalationTimer(task);\n if (state.softController !== undefined && !state.softController.signal.aborted) {\n state.softController.abort();\n }\n\n let launched: Promise<TaskkillOutcome>;\n try {\n launched = this.killTree(pid, 'force');\n } catch (error) {\n const failure = this.makeWindowsForceFailure(\n task,\n pid,\n `helper failed to start: ${BackgroundTaskRegistry.errorMessage(error)}`,\n );\n delete state.forcePromise;\n this.recordWindowsForceFailure(task, failure);\n rejectForceReady(failure);\n throw failure;\n }\n\n launched.then(\n (outcome) => {\n const failure = this.evaluateWindowsTaskkillOutcome(task, pid, 'force', outcome);\n if (failure !== undefined) {\n this.recordWindowsForceFailure(task, failure);\n rejectForceReady(failure);\n return;\n }\n resolveForceReady();\n },\n (error: unknown) => {\n if (this.isWindowsTaskkillTerminalRace(task)) {\n this.recordWindowsTaskkillNotice(\n task,\n `taskkill force rejected after the task became terminal for pid ${String(pid)} (${BackgroundTaskRegistry.errorMessage(error)}); treating as a terminal race`,\n );\n resolveForceReady();\n return;\n }\n const failure = this.makeWindowsForceFailure(\n task,\n pid,\n BackgroundTaskRegistry.errorMessage(error),\n );\n this.recordWindowsForceFailure(task, failure);\n rejectForceReady(failure);\n },\n );\n\n return forcePromise;\n }\n\n private requestWindowsKill(task: BgTask, pid: number, signal: NodeJS.Signals): void {\n if (signal === 'SIGKILL') {\n this.startWindowsForceKill(task, pid);\n task.killSignalSent = true;\n return;\n }\n\n this.startWindowsSoftKill(task, pid);\n task.killSignalSent = true;\n if (task.killEscalationTimer !== undefined) return;\n task.killEscalationTimer = setTimeout(() => {\n task.killEscalationTimer = undefined;\n if (task.status !== 'running') return;\n try {\n this.requestKill(task, 'SIGKILL');\n } catch (error) {\n task.error = BackgroundTaskRegistry.appendTaskError(\n task.error,\n `SIGKILL failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n void this.writeMetadata(task).catch((metadataError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write metadata for ${task.id}:`,\n metadataError,\n );\n });\n }\n }, this.killGraceMs).unref();\n }\n\n private requestKill(task: BgTask, signal: NodeJS.Signals = 'SIGTERM'): void {\n if (task.status !== 'running') {\n throw new Error(`Task ${task.id} is ${task.status}, not running`);\n }\n if (task.managedCancel !== undefined) {\n if (task.managedCancelRequested) return;\n task.managedCancelRequested = true;\n try {\n task.managedCancel();\n } catch (error) {\n throw new Error(\n `Could not cancel managed task ${task.id}: ${BackgroundTaskRegistry.errorMessage(error)}`,\n );\n }\n task.killSignalSent = true;\n return;\n }\n if (!task.child) {\n throw new Error(`Task ${task.id} has no child process handle`);\n }\n if (task.killSignalSent && signal === 'SIGTERM') return;\n\n if (this.platform === 'win32') {\n if (!task.pid) throw new Error(`Task ${task.id} has no process id`);\n this.requestWindowsKill(task, task.pid, signal);\n return;\n }\n\n this.requestPosixKill(task, signal);\n }\n\n private waitForEnd(task: BgTask, timeoutMs: number): Promise<boolean> {\n if (task.status !== 'running') return Promise.resolve(true);\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n const idx = task.waiters.indexOf(done);\n if (idx >= 0) task.waiters.splice(idx, 1);\n resolve(false);\n }, timeoutMs);\n const done = () => {\n clearTimeout(timeout);\n resolve(true);\n };\n task.waiters.push(done);\n });\n }\n\n private waitForEndOrWindowsForceFailure(task: BgTask, timeoutMs: number): Promise<boolean> {\n const state = this.getWindowsKillState(task);\n if (state.forceFailure !== undefined) return Promise.reject(state.forceFailure);\n if (task.status !== 'running') return Promise.resolve(true);\n return new Promise((resolve, reject) => {\n const cleanup = () => {\n clearTimeout(timeout);\n const waiterIndex = task.waiters.indexOf(done);\n if (waiterIndex >= 0) task.waiters.splice(waiterIndex, 1);\n const listeners = state.forceFailureListeners;\n if (listeners !== undefined) {\n const listenerIndex = listeners.indexOf(failed);\n if (listenerIndex >= 0) listeners.splice(listenerIndex, 1);\n if (listeners.length === 0) delete state.forceFailureListeners;\n }\n };\n const timeout = setTimeout(() => {\n cleanup();\n resolve(false);\n }, timeoutMs);\n const done = () => {\n cleanup();\n resolve(true);\n };\n const failed = (error: Error) => {\n cleanup();\n reject(error);\n };\n task.waiters.push(done);\n if (state.forceFailureListeners === undefined) state.forceFailureListeners = [];\n state.forceFailureListeners.push(failed);\n });\n }\n\n private async awaitWindowsForceBeforeTerminal(task: BgTask): Promise<Error | undefined> {\n const state = this.windowsKillStates.get(task);\n if (state === undefined) return undefined;\n const forcePromise = state.forcePromise;\n if (forcePromise === undefined) return state.forceFailure;\n try {\n await forcePromise;\n } catch (error) {\n return error instanceof Error ? error : new Error(String(error));\n }\n return state.forceFailure;\n }\n\n private async deliverReloadTerminal(\n execution: ReloadableShellExecutionV1,\n lease: ReloadShellActivationLeaseV1,\n ): Promise<void> {\n const task = execution.task;\n if (task.reloadHostDeliveryInFlight || task.reloadHostDeliverySettled) {\n this.maybeReleaseReloadExecution(task);\n return;\n }\n task.reloadHostDeliveryInFlight = true;\n try {\n if (!this.ownsReloadExecution(execution, lease)) return;\n this.onChange();\n this.publishTerminal(task);\n const deliveryGate = await this.waitForTerminalPublicationGate(task);\n if (!this.ownsReloadExecution(execution, lease)) return;\n if (deliveryGate.kind === 'rejected') {\n this.logger.error(\n `[background-tasks] completion delivery gate failed for ${task.id}: ${this.terminalPublicationError(deliveryGate.error)}`,\n );\n } else if (\n task.notifyOnCompletion &&\n !task.notified &&\n !this.shuttingDown &&\n execution.notificationState === 'pending'\n ) {\n const token = execution.beginNotification(lease);\n if (token !== undefined) {\n try {\n this.notifyCompletion(task);\n execution.finishNotification(token, task.notified);\n } catch (error) {\n execution.finishNotification(token, false);\n this.logger.error(`[background-tasks] notification failed for ${task.id}:`, error);\n }\n }\n }\n if (!this.ownsReloadExecution(execution, lease)) return;\n task.reloadHostNotificationSettled = true;\n task.reloadHostDeliverySettled = true;\n try {\n await this.writeMetadata(task);\n } catch (error) {\n this.logger.error(\n `[background-tasks] failed to update survivor notification metadata for ${task.id}:`,\n error,\n );\n }\n } finally {\n task.reloadHostDeliveryInFlight = false;\n this.maybeReleaseReloadExecution(task);\n }\n }\n\n private maybeReleaseReloadExecution(task: BgTask): void {\n const execution = task.reloadExecution;\n const lease = this.reloadShellLease;\n if (\n execution === undefined ||\n execution.phase !== 'terminal' ||\n task.reloadHostNotificationSettled !== true ||\n task.terminalPublicationState === 'pending' ||\n !this.ownsReloadExecution(execution, lease) ||\n this.reloadShellOwner === undefined ||\n lease === undefined\n ) {\n return;\n }\n try {\n this.reloadShellOwner.releaseExecution(lease, execution);\n } catch (error) {\n if (\n typeof error !== 'object' ||\n error === null ||\n Reflect.get(error, 'code') !== 'pi_bg_reload_owner_stale_claim'\n ) {\n this.logger.error(\n `[background-tasks] failed to release reload shell execution ${task.id}:`,\n error,\n );\n }\n }\n }\n\n private terminalPublicationAbandonSignal(task: BgTask): TerminalPublicationAbandonSignal {\n const existing = this.terminalPublicationAbandonSignals.get(task);\n if (existing !== undefined) return existing;\n let resolveSignal: (reason: TerminalPublicationAbandonReason) => void = () => {};\n const promise = new Promise<TerminalPublicationAbandonReason>((resolve) => {\n resolveSignal = resolve;\n });\n const signal = { promise, resolve: resolveSignal };\n this.terminalPublicationAbandonSignals.set(task, signal);\n return signal;\n }\n\n private publishTerminal(task: BgTask): void {\n if (task.reloadExecution !== undefined && this.tasks.get(task.id) !== task) return;\n if (task.terminalPublicationState !== 'pending' || task.terminalPublishInFlight) return;\n if (this.terminalPublicationClosed) {\n this.abandonTerminalPublication(\n task,\n this.terminalPublicationCloseReason ?? 'registry_shutdown',\n );\n return;\n }\n task.terminalPublishInFlight = true;\n if (task.terminalPublicationGate === undefined) {\n this.tryPublishTerminalNow(task);\n return;\n }\n void this.publishTerminalWhenReady(task);\n }\n\n private async publishTerminalWhenReady(task: BgTask): Promise<void> {\n const outcome = await this.waitForTerminalPublicationGate(task);\n if (task.reloadExecution !== undefined && this.tasks.get(task.id) !== task) {\n task.terminalPublishInFlight = false;\n return;\n }\n if (outcome.kind === 'closed') {\n this.abandonTerminalPublication(task, outcome.reason);\n return;\n }\n if (outcome.kind === 'rejected') {\n this.abandonTerminalPublication(task, 'gate_rejected', outcome.error);\n return;\n }\n // The gate and registry closure can settle in the same microtask turn.\n // Re-check after the await so a late gate cannot publish into a disposed\n // activation or revive a task already abandoned by shutdown.\n if (this.terminalPublicationClosed || task.terminalPublicationState !== 'pending') {\n this.abandonTerminalPublication(\n task,\n this.terminalPublicationCloseReason ?? 'registry_shutdown',\n );\n return;\n }\n this.tryPublishTerminalNow(task);\n }\n\n private async waitForTerminalPublicationGate(\n task: BgTask,\n ): Promise<TerminalPublicationGateOutcome> {\n if (this.terminalPublicationClosed) {\n return {\n kind: 'closed',\n reason: this.terminalPublicationCloseReason ?? 'registry_shutdown',\n };\n }\n if (task.terminalPublicationState === 'abandoned') {\n if (task.terminalPublicationAbandonReason === 'gate_rejected') {\n return { kind: 'rejected', error: new Error('terminal publication gate rejected') };\n }\n return {\n kind: 'closed',\n reason: task.terminalPublicationAbandonReason ?? 'registry_shutdown',\n };\n }\n const gate = task.terminalPublicationGate;\n if (gate === undefined) return { kind: 'released' };\n\n const gateOutcome: Promise<TerminalPublicationGateOutcome> = gate.then(\n () => ({ kind: 'released' }),\n (error: unknown) => ({ kind: 'rejected', error }),\n );\n const closureOutcome: Promise<TerminalPublicationGateOutcome> =\n this.terminalPublicationClosedSignal.then((reason) => ({ kind: 'closed', reason }));\n const abandonmentOutcome: Promise<TerminalPublicationGateOutcome> =\n this.terminalPublicationAbandonSignal(task).promise.then((reason) => ({\n kind: 'closed',\n reason,\n }));\n const outcome = await Promise.race([gateOutcome, closureOutcome, abandonmentOutcome]);\n\n // Closure wins if it happened before this continuation resumed, regardless\n // of which promise queued its reaction first.\n if (this.terminalPublicationClosed) {\n return {\n kind: 'closed',\n reason: this.terminalPublicationCloseReason ?? 'registry_shutdown',\n };\n }\n return outcome;\n }\n\n private tryPublishTerminalNow(task: BgTask): void {\n if (task.reloadExecution !== undefined && this.tasks.get(task.id) !== task) {\n task.terminalPublishInFlight = false;\n return;\n }\n if (task.terminalPublicationState !== 'pending') {\n task.terminalPublishInFlight = false;\n return;\n }\n if (this.terminalPublicationClosed) {\n task.terminalPublishInFlight = false;\n this.abandonTerminalPublication(\n task,\n this.terminalPublicationCloseReason ?? 'registry_shutdown',\n );\n this.pruneOldTasks();\n return;\n }\n\n task.terminalPublishAttempts += 1;\n task.terminalEmitInFlight = true;\n let emitFailed = false;\n let emitError: unknown;\n try {\n this.publishTerminalSnapshot(snapshot(task));\n } catch (error) {\n emitFailed = true;\n emitError = error;\n }\n task.terminalEmitInFlight = false;\n task.terminalPublishInFlight = false;\n\n if (emitFailed) {\n const execution = task.reloadExecution;\n if (execution !== undefined && !this.ownsReloadExecution(execution, this.reloadShellLease)) {\n // The emitter synchronously detached this task into a reload handoff\n // before throwing. Attempt 1 is consumed, but only the fresh owner may\n // retry or decide abandonment on the shared publication ledger.\n return;\n }\n this.handleTerminalPublishFailure(task, emitError);\n } else {\n this.markTerminalPublicationDelivered(task);\n }\n this.pruneOldTasks();\n }\n\n private markTerminalPublicationDelivered(task: BgTask): void {\n if (task.terminalPublishRetryHandle !== undefined) {\n clearTimeout(task.terminalPublishRetryHandle);\n task.terminalPublishRetryHandle = undefined;\n }\n task.terminalPublicationGate = undefined;\n task.terminalEmitInFlight = false;\n task.terminalPublishInFlight = false;\n task.terminalPublicationState = 'delivered';\n delete task.terminalPublicationAbandonReason;\n task.terminalPublished = true;\n this.maybeReleaseReloadExecution(task);\n }\n\n private abandonTerminalPublication(\n task: BgTask,\n reason: TerminalPublicationAbandonReason,\n error?: unknown,\n log = true,\n ): void {\n if (task.terminalPublishRetryHandle !== undefined) {\n clearTimeout(task.terminalPublishRetryHandle);\n task.terminalPublishRetryHandle = undefined;\n }\n task.terminalPublicationGate = undefined;\n if (task.terminalEmitInFlight !== true) task.terminalPublishInFlight = false;\n if (task.terminalPublicationState === 'delivered') return;\n if (task.terminalPublicationState === 'abandoned') return;\n\n task.terminalPublicationState = 'abandoned';\n task.terminalPublicationAbandonReason = reason;\n task.terminalPublished = false;\n this.terminalPublicationAbandonSignal(task).resolve(reason);\n if (log) {\n const detail = error === undefined ? '' : `: ${this.terminalPublicationError(error)}`;\n this.logger.error(\n `[background-tasks] terminal publication abandoned for ${task.id} (${reason}) after ${String(task.terminalPublishAttempts)}/${String(TERMINAL_PUBLICATION_MAX_ATTEMPTS)} emit attempts${detail}`,\n );\n }\n this.maybeReleaseReloadExecution(task);\n }\n\n private terminalPublicationError(error: unknown): string {\n const compact = BackgroundTaskRegistry.errorMessage(error).replace(/\\s+/gu, ' ').trim();\n if (compact.length <= TERMINAL_PUBLICATION_DIAGNOSTIC_CHARS) return compact;\n return `${compact.slice(0, TERMINAL_PUBLICATION_DIAGNOSTIC_CHARS - 1)}…`;\n }\n\n private handleTerminalPublishFailure(task: BgTask, error: unknown): void {\n task.terminalPublishInFlight = false;\n if (task.terminalPublicationState !== 'pending') return;\n if (error instanceof BackgroundTaskExtensionServiceClosedError) {\n this.closeTerminalPublication('publisher_closed');\n return;\n }\n if (this.terminalPublicationClosed) {\n this.abandonTerminalPublication(\n task,\n this.terminalPublicationCloseReason ?? 'registry_shutdown',\n error,\n );\n this.pruneOldTasks();\n return;\n }\n if (task.terminalPublishAttempts >= TERMINAL_PUBLICATION_MAX_ATTEMPTS) {\n this.abandonTerminalPublication(task, 'retry_exhausted', error);\n this.pruneOldTasks();\n return;\n }\n\n this.logger.error(\n `[background-tasks] terminal publication failed for ${task.id} (attempt ${String(task.terminalPublishAttempts)}/${String(TERMINAL_PUBLICATION_MAX_ATTEMPTS)}; retrying): ${this.terminalPublicationError(error)}`,\n );\n if (task.terminalPublishRetryHandle !== undefined) return;\n task.terminalPublishRetryHandle = setTimeout(() => {\n task.terminalPublishRetryHandle = undefined;\n if (\n this.terminalPublicationClosed ||\n task.terminalPublicationState !== 'pending' ||\n (task.reloadExecution !== undefined && this.tasks.get(task.id) !== task)\n )\n return;\n this.publishTerminal(task);\n }, TERMINAL_PUBLICATION_RETRY_MS);\n task.terminalPublishRetryHandle.unref();\n }\n\n private notifyCompletion(task: BgTask): void {\n if (!task.notifyOnCompletion || task.notified || this.shuttingDown) return;\n task.notified = true;\n const exit =\n task.exitCode === undefined ? '' : `\\n <exit-code>${String(task.exitCode)}</exit-code>`;\n const error = task.error ? `\\n <error>${escapeXml(task.error)}</error>` : '';\n const taskName = taskDisplayName(task);\n const guidance =\n task.fusion === undefined\n ? 'Terminal state and output metadata are durable. Do not call bg_status to reconfirm; use bg_logs only if output is needed.'\n : task.status === 'completed'\n ? `Fusion result is durably committed at ${task.fusion.artifactDir}. Call bg_result({taskId:${JSON.stringify(task.id)}}) once to retrieve it; do not poll.`\n : `Fusion ended ${task.status}. Inspect the preserved artifacts at ${task.fusion.artifactDir}; do not poll.`;\n const content = [\n '<background-task-notification>',\n ` <task-id>${task.id}</task-id>`,\n ` <task-name>${escapeXml(taskName)}</task-name>`,\n ` <status>${task.status}</status>`,\n exit,\n error,\n ` <output-file>${escapeXml(task.outputPath)}</output-file>`,\n ` <summary>${escapeXml(`Background task ${JSON.stringify(taskName)} ${task.status}`)}</summary>`,\n ` <guidance>${escapeXml(guidance)}</guidance>`,\n '</background-task-notification>',\n ]\n .filter(Boolean)\n .join('\\n');\n\n try {\n this.sendCompletionNotification(\n {\n customType: 'background-task-notification',\n content,\n display: true,\n details: snapshot(task),\n },\n { deliverAs: 'followUp', triggerTurn: task.triggerOnCompletion },\n );\n } catch (error) {\n task.notified = false;\n throw new Error(\n `Failed to send background task notification for ${task.id}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private async finalizeTask(\n task: BgTask,\n status: TaskStatus,\n exitCode: number | null,\n signal?: string | null,\n error?: string,\n ): Promise<void> {\n if (task.finalized) return;\n task.finalized = true;\n if (task.timeoutHandle) clearTimeout(task.timeoutHandle);\n if (this.platform === 'win32') this.clearKillEscalationTimer(task);\n let finalStatus = status;\n let finalError = error;\n const posixForceFailure = await this.awaitPosixProcessGroupBeforeTerminal(task);\n if (posixForceFailure !== undefined) {\n finalStatus = 'failed';\n finalError = BackgroundTaskRegistry.appendTaskError(finalError, posixForceFailure.message);\n }\n const windowsForceFailure = await this.awaitWindowsForceBeforeTerminal(task);\n if (windowsForceFailure !== undefined) {\n finalStatus = 'failed';\n finalError = BackgroundTaskRegistry.appendTaskError(finalError, windowsForceFailure.message);\n }\n task.exitCode = exitCode;\n task.signal = signal ?? null;\n\n // Keep status=\"running\" until the final wrapped-agent fragment has been\n // consumed and the output plus terminal metadata are durable. Publishing a\n // terminal state earlier lets bg_status observe the previous assistant\n // turn's context snapshot and recreates the same false-completion race the\n // attested producer is required to prevent.\n try {\n if (task.telemetryWrapped) {\n // Child-process close can be observed before the wrapper stdout listener has\n // committed its last parsed telemetry batch. Wait for a short quiet window,\n // then flush the trailing partial line, so completed status never races\n // ahead of the final assistant-turn context/token/tool snapshot.\n await new Promise<void>((resolve) => setTimeout(resolve, 25));\n this.flushAgentStdout(task);\n }\n if (task.stream && !task.stream.destroyed) await closeAndFsyncOutputStream(task.stream);\n } catch (finalizeError) {\n finalStatus = 'failed';\n const message =\n finalizeError instanceof Error ? finalizeError.message : String(finalizeError);\n finalError = finalError\n ? `${finalError}; final output durability failed: ${message}`\n : `Final output durability failed: ${message}`;\n }\n\n task.endTime = this.now();\n if (finalError) task.error = finalError;\n try {\n await this.writeMetadataSnapshot(task, { ...snapshot(task), status: finalStatus });\n task.status = finalStatus;\n } catch (metadataError) {\n finalStatus = 'failed';\n task.status = 'failed';\n task.error = `Terminal metadata write failed: ${metadataError instanceof Error ? metadataError.message : String(metadataError)}`;\n this.logger.error(\n `[background-tasks] failed to write metadata for ${task.id}:`,\n metadataError,\n );\n await this.writeMetadata(task).catch((retryError: unknown) => {\n this.logger.error(\n `[background-tasks] failed to write failed terminal metadata for ${task.id}:`,\n retryError,\n );\n });\n }\n\n for (const waiter of task.waiters.splice(0)) waiter();\n this.onChange();\n this.publishTerminal(task);\n const deliveryGate = await this.waitForTerminalPublicationGate(task);\n if (deliveryGate.kind === 'rejected') {\n this.logger.error(\n `[background-tasks] completion delivery gate failed for ${task.id}: ${this.terminalPublicationError(deliveryGate.error)}`,\n );\n } else {\n // EventBus disposal abandons only EventBus publication. Notification truth\n // remains independent; notifyCompletion itself suppresses session shutdown.\n try {\n this.notifyCompletion(task);\n } catch (notificationError) {\n this.logger.error(\n `[background-tasks] notification failed for ${task.id}:`,\n notificationError,\n );\n }\n }\n try {\n await this.writeMetadata(task);\n } catch (metadataError) {\n this.logger.error(\n `[background-tasks] failed to update notification metadata for ${task.id}:`,\n metadataError,\n );\n }\n this.pruneOldTasks();\n }\n\n private pruneOldTasks(): void {\n if (this.tasks.size <= this.maxRecentTasks) return;\n const removable = [...this.tasks.values()]\n .filter((task) => task.status !== 'running' && task.terminalEmitInFlight !== true)\n .sort((a, b) => (a.endTime ?? a.startTime) - (b.endTime ?? b.startTime));\n while (this.tasks.size > this.maxRecentTasks && removable.length > 0) {\n const task = removable.shift();\n if (task === undefined) continue;\n if (task.terminalPublicationState === 'pending') {\n this.abandonTerminalPublication(task, 'retention_limit');\n }\n this.tasks.delete(task.id);\n }\n }\n}\n"]}
|