claude-all-hands 1.0.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.
Files changed (1463) hide show
  1. package/.claude/agents/curator.md +128 -0
  2. package/.claude/agents/explorer.md +70 -0
  3. package/.claude/agents/parallel-worker.md +104 -0
  4. package/.claude/agents/planner.md +131 -0
  5. package/.claude/agents/researcher.md +48 -0
  6. package/.claude/commands/curation-fix.md +68 -0
  7. package/.claude/commands/new-branch.md +11 -0
  8. package/.claude/commands/parallel-discovery.md +51 -0
  9. package/.claude/commands/parallel-orchestration.md +81 -0
  10. package/.claude/commands/plan-checkpoint.md +12 -0
  11. package/.claude/commands/plan.md +64 -0
  12. package/.claude/envoy/.venv/.requirements.txt +2 -0
  13. package/.claude/envoy/.venv/bin/Activate.ps1 +241 -0
  14. package/.claude/envoy/.venv/bin/activate +66 -0
  15. package/.claude/envoy/.venv/bin/activate.csh +25 -0
  16. package/.claude/envoy/.venv/bin/activate.fish +64 -0
  17. package/.claude/envoy/.venv/bin/httpx +8 -0
  18. package/.claude/envoy/.venv/bin/normalizer +8 -0
  19. package/.claude/envoy/.venv/bin/pip +8 -0
  20. package/.claude/envoy/.venv/bin/pip3 +8 -0
  21. package/.claude/envoy/.venv/bin/pip3.9 +8 -0
  22. package/.claude/envoy/.venv/bin/pyrsa-decrypt +8 -0
  23. package/.claude/envoy/.venv/bin/pyrsa-encrypt +8 -0
  24. package/.claude/envoy/.venv/bin/pyrsa-keygen +8 -0
  25. package/.claude/envoy/.venv/bin/pyrsa-priv2pub +8 -0
  26. package/.claude/envoy/.venv/bin/pyrsa-sign +8 -0
  27. package/.claude/envoy/.venv/bin/pyrsa-verify +8 -0
  28. package/.claude/envoy/.venv/bin/websockets +8 -0
  29. package/.claude/envoy/.venv/lib/python3.9/site-packages/_distutils_hack/__init__.py +128 -0
  30. package/.claude/envoy/.venv/lib/python3.9/site-packages/_distutils_hack/override.py +1 -0
  31. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types/__init__.py +432 -0
  32. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types/py.typed +0 -0
  33. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types/test_cases.py +151 -0
  34. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types-0.7.0.dist-info/INSTALLER +1 -0
  35. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types-0.7.0.dist-info/METADATA +295 -0
  36. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types-0.7.0.dist-info/RECORD +10 -0
  37. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types-0.7.0.dist-info/WHEEL +4 -0
  38. package/.claude/envoy/.venv/lib/python3.9/site-packages/annotated_types-0.7.0.dist-info/licenses/LICENSE +21 -0
  39. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/__init__.py +111 -0
  40. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_backends/__init__.py +0 -0
  41. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.py +3007 -0
  42. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_backends/_trio.py +1384 -0
  43. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/__init__.py +0 -0
  44. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_asyncio_selector_thread.py +167 -0
  45. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_contextmanagers.py +200 -0
  46. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_eventloop.py +229 -0
  47. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_exceptions.py +153 -0
  48. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_fileio.py +797 -0
  49. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_resources.py +18 -0
  50. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_signals.py +27 -0
  51. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_sockets.py +991 -0
  52. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_streams.py +52 -0
  53. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_subprocesses.py +202 -0
  54. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_synchronization.py +753 -0
  55. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_tasks.py +163 -0
  56. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_tempfile.py +616 -0
  57. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_testing.py +78 -0
  58. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/_core/_typedattr.py +81 -0
  59. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/__init__.py +58 -0
  60. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_eventloop.py +420 -0
  61. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_resources.py +33 -0
  62. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_sockets.py +405 -0
  63. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_streams.py +239 -0
  64. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_subprocesses.py +79 -0
  65. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_tasks.py +117 -0
  66. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/abc/_testing.py +65 -0
  67. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/from_thread.py +570 -0
  68. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/functools.py +347 -0
  69. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/lowlevel.py +195 -0
  70. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/py.typed +0 -0
  71. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/pytest_plugin.py +302 -0
  72. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/__init__.py +0 -0
  73. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/buffered.py +188 -0
  74. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/file.py +154 -0
  75. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/memory.py +325 -0
  76. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/stapled.py +147 -0
  77. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/text.py +176 -0
  78. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/streams/tls.py +424 -0
  79. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/to_interpreter.py +246 -0
  80. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/to_process.py +264 -0
  81. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio/to_thread.py +74 -0
  82. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/INSTALLER +1 -0
  83. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/METADATA +96 -0
  84. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/RECORD +92 -0
  85. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/WHEEL +5 -0
  86. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/entry_points.txt +2 -0
  87. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/licenses/LICENSE +20 -0
  88. package/.claude/envoy/.venv/lib/python3.9/site-packages/anyio-4.12.0.dist-info/top_level.txt +1 -0
  89. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools/__init__.py +718 -0
  90. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools/_cached.py +247 -0
  91. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools/_cachedmethod.py +128 -0
  92. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools/func.py +102 -0
  93. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools/keys.py +62 -0
  94. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/INSTALLER +1 -0
  95. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/METADATA +156 -0
  96. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/RECORD +16 -0
  97. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/WHEEL +5 -0
  98. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/licenses/LICENSE +20 -0
  99. package/.claude/envoy/.venv/lib/python3.9/site-packages/cachetools-6.2.2.dist-info/top_level.txt +1 -0
  100. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi/__init__.py +4 -0
  101. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi/__main__.py +12 -0
  102. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi/cacert.pem +4678 -0
  103. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi/core.py +83 -0
  104. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi/py.typed +0 -0
  105. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/INSTALLER +1 -0
  106. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/METADATA +78 -0
  107. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/RECORD +14 -0
  108. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/WHEEL +5 -0
  109. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE +20 -0
  110. package/.claude/envoy/.venv/lib/python3.9/site-packages/certifi-2025.11.12.dist-info/top_level.txt +1 -0
  111. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/__init__.py +48 -0
  112. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/__main__.py +6 -0
  113. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/api.py +669 -0
  114. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/cd.py +395 -0
  115. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/cli/__init__.py +8 -0
  116. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/cli/__main__.py +381 -0
  117. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/constant.py +2015 -0
  118. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/legacy.py +80 -0
  119. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/md.cpython-39-darwin.so +0 -0
  120. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/md.py +635 -0
  121. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/md__mypyc.cpython-39-darwin.so +0 -0
  122. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/models.py +360 -0
  123. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/py.typed +0 -0
  124. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/utils.py +414 -0
  125. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer/version.py +8 -0
  126. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER +1 -0
  127. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/METADATA +764 -0
  128. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/RECORD +35 -0
  129. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL +6 -0
  130. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/entry_points.txt +2 -0
  131. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE +21 -0
  132. package/.claude/envoy/.venv/lib/python3.9/site-packages/charset_normalizer-3.4.4.dist-info/top_level.txt +1 -0
  133. package/.claude/envoy/.venv/lib/python3.9/site-packages/distutils-precedence.pth +1 -0
  134. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/__init__.py +46 -0
  135. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/_catch.py +138 -0
  136. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/_exceptions.py +336 -0
  137. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/_formatting.py +602 -0
  138. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/_suppress.py +55 -0
  139. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/_version.py +34 -0
  140. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup/py.typed +0 -0
  141. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup-1.3.1.dist-info/INSTALLER +1 -0
  142. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup-1.3.1.dist-info/METADATA +159 -0
  143. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup-1.3.1.dist-info/RECORD +18 -0
  144. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup-1.3.1.dist-info/WHEEL +4 -0
  145. package/.claude/envoy/.venv/lib/python3.9/site-packages/exceptiongroup-1.3.1.dist-info/licenses/LICENSE +73 -0
  146. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/__init__.py +53 -0
  147. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_cloud_sdk.py +153 -0
  148. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_constants.py +5 -0
  149. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_credentials_async.py +171 -0
  150. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_credentials_base.py +75 -0
  151. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_default.py +739 -0
  152. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_default_async.py +288 -0
  153. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_exponential_backoff.py +164 -0
  154. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_helpers.py +554 -0
  155. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_jwt_async.py +164 -0
  156. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_oauth2client.py +167 -0
  157. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_refresh_worker.py +109 -0
  158. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/_service_account_info.py +80 -0
  159. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/__init__.py +25 -0
  160. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/_helpers.py +62 -0
  161. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/credentials.py +143 -0
  162. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/transport/__init__.py +144 -0
  163. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/transport/aiohttp.py +190 -0
  164. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aio/transport/sessions.py +268 -0
  165. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/api_key.py +76 -0
  166. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/app_engine.py +180 -0
  167. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/aws.py +861 -0
  168. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/compute_engine/__init__.py +22 -0
  169. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/compute_engine/_metadata.py +379 -0
  170. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/compute_engine/credentials.py +558 -0
  171. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/credentials.py +665 -0
  172. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/__init__.py +98 -0
  173. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/_cryptography_rsa.py +151 -0
  174. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/_helpers.py +0 -0
  175. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/_python_rsa.py +175 -0
  176. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/base.py +127 -0
  177. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/es256.py +175 -0
  178. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/crypt/rsa.py +30 -0
  179. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/downscoped.py +512 -0
  180. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/environment_vars.py +88 -0
  181. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/exceptions.py +108 -0
  182. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/external_account.py +708 -0
  183. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/external_account_authorized_user.py +433 -0
  184. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/iam.py +136 -0
  185. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/identity_pool.py +552 -0
  186. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/impersonated_credentials.py +705 -0
  187. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/jwt.py +878 -0
  188. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/metrics.py +154 -0
  189. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/pluggable.py +453 -0
  190. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/py.typed +2 -0
  191. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/__init__.py +104 -0
  192. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/_aiohttp_requests.py +398 -0
  193. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/_custom_tls_signer.py +283 -0
  194. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/_http_client.py +115 -0
  195. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/_mtls_helper.py +446 -0
  196. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/_requests_base.py +53 -0
  197. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/grpc.py +337 -0
  198. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/mtls.py +129 -0
  199. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/requests.py +597 -0
  200. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/transport/urllib3.py +449 -0
  201. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/auth/version.py +15 -0
  202. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/__init__.py +25 -0
  203. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_adapters.py +55 -0
  204. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_api_client.py +1840 -0
  205. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_api_module.py +29 -0
  206. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_automatic_function_calling_util.py +325 -0
  207. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_base_transformers.py +26 -0
  208. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_base_url.py +50 -0
  209. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_common.py +778 -0
  210. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_extra_utils.py +618 -0
  211. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_live_converters.py +1424 -0
  212. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_local_tokenizer_loader.py +223 -0
  213. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_mcp_utils.py +117 -0
  214. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_operations_converters.py +298 -0
  215. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_replay_api_client.py +686 -0
  216. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_test_api_client.py +149 -0
  217. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_tokens_converters.py +480 -0
  218. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/_transformers.py +1368 -0
  219. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/batches.py +2461 -0
  220. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/caches.py +1489 -0
  221. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/chats.py +531 -0
  222. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/client.py +403 -0
  223. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/errors.py +202 -0
  224. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/files.py +1019 -0
  225. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/live.py +1165 -0
  226. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/live_music.py +197 -0
  227. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/local_tokenizer.py +395 -0
  228. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/models.py +7335 -0
  229. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/operations.py +498 -0
  230. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/pagers.py +262 -0
  231. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/py.typed +1 -0
  232. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/tokens.py +362 -0
  233. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/tunings.py +1970 -0
  234. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/types.py +16507 -0
  235. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/genai/version.py +16 -0
  236. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/__init__.py +36 -0
  237. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_client.py +625 -0
  238. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_client_async.py +286 -0
  239. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_credentials_async.py +118 -0
  240. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_id_token_async.py +285 -0
  241. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_reauth_async.py +328 -0
  242. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/_service_account_async.py +132 -0
  243. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/challenges.py +281 -0
  244. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/credentials.py +614 -0
  245. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/gdch_credentials.py +251 -0
  246. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/id_token.py +370 -0
  247. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/py.typed +2 -0
  248. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/reauth.py +369 -0
  249. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/service_account.py +881 -0
  250. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/sts.py +176 -0
  251. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/utils.py +168 -0
  252. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/webauthn_handler.py +82 -0
  253. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/webauthn_handler_factory.py +16 -0
  254. package/.claude/envoy/.venv/lib/python3.9/site-packages/google/oauth2/webauthn_types.py +156 -0
  255. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/INSTALLER +1 -0
  256. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/METADATA +181 -0
  257. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/RECORD +154 -0
  258. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/WHEEL +6 -0
  259. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/licenses/LICENSE +201 -0
  260. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_auth-2.43.0.dist-info/top_level.txt +1 -0
  261. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/INSTALLER +1 -0
  262. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/METADATA +1864 -0
  263. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/RECORD +74 -0
  264. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/REQUESTED +0 -0
  265. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/WHEEL +5 -0
  266. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/licenses/LICENSE +202 -0
  267. package/.claude/envoy/.venv/lib/python3.9/site-packages/google_genai-1.47.0.dist-info/top_level.txt +1 -0
  268. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/__init__.py +62 -0
  269. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_abnf.py +132 -0
  270. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_connection.py +659 -0
  271. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_events.py +369 -0
  272. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_headers.py +282 -0
  273. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_readers.py +250 -0
  274. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_receivebuffer.py +153 -0
  275. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_state.py +365 -0
  276. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_util.py +135 -0
  277. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_version.py +16 -0
  278. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/_writers.py +145 -0
  279. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11/py.typed +1 -0
  280. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/INSTALLER +1 -0
  281. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/METADATA +202 -0
  282. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/RECORD +29 -0
  283. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/WHEEL +5 -0
  284. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/licenses/LICENSE.txt +22 -0
  285. package/.claude/envoy/.venv/lib/python3.9/site-packages/h11-0.16.0.dist-info/top_level.txt +1 -0
  286. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/__init__.py +141 -0
  287. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_api.py +94 -0
  288. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/__init__.py +39 -0
  289. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/connection.py +222 -0
  290. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/connection_pool.py +420 -0
  291. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/http11.py +379 -0
  292. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/http2.py +592 -0
  293. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/http_proxy.py +367 -0
  294. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/interfaces.py +137 -0
  295. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_async/socks_proxy.py +341 -0
  296. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/__init__.py +0 -0
  297. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/anyio.py +146 -0
  298. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/auto.py +52 -0
  299. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/base.py +101 -0
  300. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/mock.py +143 -0
  301. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/sync.py +241 -0
  302. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_backends/trio.py +159 -0
  303. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_exceptions.py +81 -0
  304. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_models.py +516 -0
  305. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_ssl.py +9 -0
  306. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/__init__.py +39 -0
  307. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/connection.py +222 -0
  308. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/connection_pool.py +420 -0
  309. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/http11.py +379 -0
  310. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/http2.py +592 -0
  311. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/http_proxy.py +367 -0
  312. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/interfaces.py +137 -0
  313. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_sync/socks_proxy.py +341 -0
  314. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_synchronization.py +318 -0
  315. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_trace.py +107 -0
  316. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/_utils.py +37 -0
  317. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore/py.typed +0 -0
  318. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore-1.0.9.dist-info/INSTALLER +1 -0
  319. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore-1.0.9.dist-info/METADATA +625 -0
  320. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore-1.0.9.dist-info/RECORD +68 -0
  321. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore-1.0.9.dist-info/WHEEL +4 -0
  322. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpcore-1.0.9.dist-info/licenses/LICENSE.md +27 -0
  323. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/__init__.py +105 -0
  324. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/__version__.py +3 -0
  325. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_api.py +438 -0
  326. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_auth.py +348 -0
  327. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_client.py +2019 -0
  328. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_config.py +248 -0
  329. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_content.py +240 -0
  330. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_decoders.py +393 -0
  331. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_exceptions.py +379 -0
  332. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_main.py +506 -0
  333. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_models.py +1277 -0
  334. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_multipart.py +300 -0
  335. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_status_codes.py +162 -0
  336. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/__init__.py +15 -0
  337. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/asgi.py +187 -0
  338. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/base.py +86 -0
  339. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/default.py +406 -0
  340. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/mock.py +43 -0
  341. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_transports/wsgi.py +149 -0
  342. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_types.py +114 -0
  343. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_urlparse.py +527 -0
  344. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_urls.py +641 -0
  345. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/_utils.py +242 -0
  346. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx/py.typed +0 -0
  347. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/INSTALLER +1 -0
  348. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/METADATA +203 -0
  349. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/RECORD +54 -0
  350. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/WHEEL +4 -0
  351. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/entry_points.txt +2 -0
  352. package/.claude/envoy/.venv/lib/python3.9/site-packages/httpx-0.28.1.dist-info/licenses/LICENSE.md +12 -0
  353. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/__init__.py +45 -0
  354. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/codec.py +122 -0
  355. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/compat.py +15 -0
  356. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/core.py +437 -0
  357. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/idnadata.py +4309 -0
  358. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/intranges.py +57 -0
  359. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/package_data.py +1 -0
  360. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/py.typed +0 -0
  361. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna/uts46data.py +8841 -0
  362. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna-3.11.dist-info/INSTALLER +1 -0
  363. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna-3.11.dist-info/METADATA +209 -0
  364. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna-3.11.dist-info/RECORD +22 -0
  365. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna-3.11.dist-info/WHEEL +4 -0
  366. package/.claude/envoy/.venv/lib/python3.9/site-packages/idna-3.11.dist-info/licenses/LICENSE.md +31 -0
  367. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/__init__.py +13 -0
  368. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/__main__.py +31 -0
  369. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/__init__.py +19 -0
  370. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/build_env.py +294 -0
  371. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cache.py +287 -0
  372. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/__init__.py +4 -0
  373. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py +163 -0
  374. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/base_command.py +214 -0
  375. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/cmdoptions.py +1009 -0
  376. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/command_context.py +27 -0
  377. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/main.py +70 -0
  378. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/main_parser.py +87 -0
  379. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/parser.py +292 -0
  380. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/progress_bars.py +250 -0
  381. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.py +453 -0
  382. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/spinners.py +157 -0
  383. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/cli/status_codes.py +6 -0
  384. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/__init__.py +112 -0
  385. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/cache.py +216 -0
  386. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/check.py +47 -0
  387. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/completion.py +91 -0
  388. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/configuration.py +266 -0
  389. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/debug.py +204 -0
  390. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/download.py +139 -0
  391. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/freeze.py +84 -0
  392. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/hash.py +55 -0
  393. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/help.py +41 -0
  394. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/index.py +139 -0
  395. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/install.py +750 -0
  396. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/list.py +337 -0
  397. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/search.py +164 -0
  398. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/show.py +234 -0
  399. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/uninstall.py +100 -0
  400. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/commands/wheel.py +176 -0
  401. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/configuration.py +403 -0
  402. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/distributions/__init__.py +21 -0
  403. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/distributions/base.py +38 -0
  404. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/distributions/installed.py +22 -0
  405. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/distributions/sdist.py +95 -0
  406. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/distributions/wheel.py +34 -0
  407. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/exceptions.py +397 -0
  408. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/index/__init__.py +2 -0
  409. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/index/collector.py +534 -0
  410. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/index/package_finder.py +982 -0
  411. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/index/sources.py +224 -0
  412. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/locations/__init__.py +408 -0
  413. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/locations/_distutils.py +169 -0
  414. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/locations/_sysconfig.py +219 -0
  415. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/locations/base.py +52 -0
  416. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/main.py +13 -0
  417. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/metadata/__init__.py +48 -0
  418. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/metadata/base.py +242 -0
  419. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/metadata/pkg_resources.py +153 -0
  420. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/__init__.py +2 -0
  421. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/candidate.py +31 -0
  422. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/direct_url.py +220 -0
  423. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/format_control.py +84 -0
  424. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/index.py +32 -0
  425. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/link.py +288 -0
  426. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/scheme.py +31 -0
  427. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/search_scope.py +126 -0
  428. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/selection_prefs.py +46 -0
  429. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/target_python.py +111 -0
  430. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/models/wheel.py +92 -0
  431. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/__init__.py +2 -0
  432. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/auth.py +316 -0
  433. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/cache.py +69 -0
  434. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/download.py +184 -0
  435. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/lazy_wheel.py +210 -0
  436. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/session.py +454 -0
  437. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/utils.py +96 -0
  438. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/network/xmlrpc.py +60 -0
  439. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/__init__.py +0 -0
  440. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  441. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata.py +35 -0
  442. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/metadata_legacy.py +74 -0
  443. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  444. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/build/wheel_legacy.py +110 -0
  445. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/check.py +153 -0
  446. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/freeze.py +277 -0
  447. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/__init__.py +2 -0
  448. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/editable_legacy.py +47 -0
  449. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/legacy.py +132 -0
  450. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/install/wheel.py +803 -0
  451. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/operations/prepare.py +655 -0
  452. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/pyproject.py +183 -0
  453. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/__init__.py +94 -0
  454. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/constructors.py +474 -0
  455. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/req_file.py +528 -0
  456. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/req_install.py +846 -0
  457. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/req_set.py +190 -0
  458. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/req_tracker.py +130 -0
  459. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/req/req_uninstall.py +629 -0
  460. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/__init__.py +0 -0
  461. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/base.py +18 -0
  462. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  463. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/legacy/resolver.py +453 -0
  464. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  465. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/base.py +144 -0
  466. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py +555 -0
  467. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py +700 -0
  468. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +142 -0
  469. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/provider.py +197 -0
  470. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/reporter.py +69 -0
  471. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/requirements.py +166 -0
  472. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/resolver.py +272 -0
  473. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/self_outdated_check.py +187 -0
  474. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/__init__.py +0 -0
  475. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/_log.py +38 -0
  476. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/appdirs.py +35 -0
  477. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/compat.py +63 -0
  478. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/compatibility_tags.py +168 -0
  479. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/datetime.py +11 -0
  480. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/deprecation.py +104 -0
  481. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/direct_url_helpers.py +79 -0
  482. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/distutils_args.py +42 -0
  483. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/encoding.py +36 -0
  484. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/entrypoints.py +27 -0
  485. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/filesystem.py +182 -0
  486. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/filetypes.py +28 -0
  487. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/glibc.py +92 -0
  488. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/hashes.py +165 -0
  489. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/inject_securetransport.py +36 -0
  490. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/logging.py +391 -0
  491. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/misc.py +828 -0
  492. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/models.py +47 -0
  493. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/packaging.py +89 -0
  494. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/parallel.py +101 -0
  495. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/pkg_resources.py +40 -0
  496. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/setuptools_build.py +173 -0
  497. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/subprocess.py +281 -0
  498. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/temp_dir.py +260 -0
  499. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/unpacking.py +267 -0
  500. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/urls.py +65 -0
  501. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/virtualenv.py +111 -0
  502. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/utils/wheel.py +189 -0
  503. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/__init__.py +15 -0
  504. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/bazaar.py +96 -0
  505. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/git.py +506 -0
  506. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/mercurial.py +158 -0
  507. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/subversion.py +329 -0
  508. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/vcs/versioncontrol.py +722 -0
  509. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_internal/wheel_builder.py +360 -0
  510. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/__init__.py +111 -0
  511. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/appdirs.py +633 -0
  512. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/__init__.py +11 -0
  513. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/_cmd.py +57 -0
  514. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/adapter.py +133 -0
  515. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/cache.py +39 -0
  516. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +2 -0
  517. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +146 -0
  518. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +33 -0
  519. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/compat.py +29 -0
  520. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/controller.py +376 -0
  521. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/filewrapper.py +80 -0
  522. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/heuristics.py +135 -0
  523. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/serialize.py +188 -0
  524. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/cachecontrol/wrapper.py +29 -0
  525. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__init__.py +3 -0
  526. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  527. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/cacert.pem +4257 -0
  528. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/certifi/core.py +76 -0
  529. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/__init__.py +83 -0
  530. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
  531. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
  532. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/chardistribution.py +233 -0
  533. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetgroupprober.py +107 -0
  534. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/charsetprober.py +145 -0
  535. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/__init__.py +1 -0
  536. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cli/chardetect.py +84 -0
  537. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/codingstatemachine.py +88 -0
  538. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/compat.py +36 -0
  539. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
  540. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/enums.py +76 -0
  541. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escprober.py +101 -0
  542. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/escsm.py +246 -0
  543. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/eucjpprober.py +92 -0
  544. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrfreq.py +195 -0
  545. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
  546. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwfreq.py +387 -0
  547. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/euctwprober.py +46 -0
  548. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312freq.py +283 -0
  549. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/gb2312prober.py +46 -0
  550. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/hebrewprober.py +292 -0
  551. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
  552. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/jpcntx.py +233 -0
  553. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +4650 -0
  554. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langgreekmodel.py +4398 -0
  555. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhebrewmodel.py +4383 -0
  556. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langhungarianmodel.py +4650 -0
  557. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langrussianmodel.py +5718 -0
  558. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langthaimodel.py +4383 -0
  559. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/langturkishmodel.py +4383 -0
  560. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/latin1prober.py +145 -0
  561. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcharsetprober.py +91 -0
  562. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +54 -0
  563. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/mbcssm.py +572 -0
  564. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
  565. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/metadata/languages.py +310 -0
  566. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcharsetprober.py +145 -0
  567. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +83 -0
  568. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/sjisprober.py +92 -0
  569. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/universaldetector.py +286 -0
  570. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
  571. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/chardet/version.py +9 -0
  572. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/__init__.py +6 -0
  573. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansi.py +102 -0
  574. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/ansitowin32.py +258 -0
  575. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/initialise.py +80 -0
  576. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/win32.py +152 -0
  577. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/colorama/winterm.py +169 -0
  578. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/__init__.py +23 -0
  579. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/__init__.py +6 -0
  580. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/misc.py +41 -0
  581. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/shutil.py +764 -0
  582. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +84 -0
  583. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +786 -0
  584. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/_backport/tarfile.py +2607 -0
  585. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/compat.py +1120 -0
  586. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/database.py +1339 -0
  587. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/index.py +509 -0
  588. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/locators.py +1300 -0
  589. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/manifest.py +393 -0
  590. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/markers.py +130 -0
  591. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/metadata.py +1058 -0
  592. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/resources.py +358 -0
  593. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/scripts.py +423 -0
  594. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  595. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  596. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/util.py +1965 -0
  597. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/version.py +739 -0
  598. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  599. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  600. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distlib/wheel.py +1056 -0
  601. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/distro.py +1230 -0
  602. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/__init__.py +35 -0
  603. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_ihatexml.py +289 -0
  604. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_inputstream.py +918 -0
  605. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_tokenizer.py +1735 -0
  606. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/__init__.py +5 -0
  607. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/_base.py +40 -0
  608. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_trie/py.py +67 -0
  609. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/_utils.py +159 -0
  610. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/constants.py +2946 -0
  611. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
  612. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
  613. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/base.py +12 -0
  614. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
  615. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/lint.py +93 -0
  616. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +207 -0
  617. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +916 -0
  618. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/filters/whitespace.py +38 -0
  619. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/html5parser.py +2795 -0
  620. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/serializer.py +409 -0
  621. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +30 -0
  622. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +54 -0
  623. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +50 -0
  624. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +88 -0
  625. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/base.py +417 -0
  626. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +239 -0
  627. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +343 -0
  628. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
  629. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +154 -0
  630. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/base.py +252 -0
  631. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +43 -0
  632. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +131 -0
  633. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
  634. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +69 -0
  635. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/__init__.py +44 -0
  636. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/codec.py +117 -0
  637. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/compat.py +16 -0
  638. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/core.py +409 -0
  639. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/idnadata.py +2050 -0
  640. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/intranges.py +58 -0
  641. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/package_data.py +2 -0
  642. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/idna/uts46data.py +8438 -0
  643. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/__init__.py +54 -0
  644. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/_version.py +1 -0
  645. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  646. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/ext.py +193 -0
  647. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/msgpack/fallback.py +1087 -0
  648. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__about__.py +26 -0
  649. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/__init__.py +25 -0
  650. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_manylinux.py +301 -0
  651. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_musllinux.py +136 -0
  652. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/_structures.py +67 -0
  653. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/markers.py +304 -0
  654. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/requirements.py +146 -0
  655. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/specifiers.py +828 -0
  656. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/tags.py +484 -0
  657. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/utils.py +136 -0
  658. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/packaging/version.py +504 -0
  659. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/__init__.py +6 -0
  660. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/build.py +127 -0
  661. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/check.py +207 -0
  662. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/colorlog.py +115 -0
  663. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/compat.py +42 -0
  664. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/dirtools.py +44 -0
  665. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/envbuild.py +171 -0
  666. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/__init__.py +17 -0
  667. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py +349 -0
  668. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/meta.py +92 -0
  669. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py +371 -0
  670. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/__init__.py +3296 -0
  671. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pkg_resources/py31compat.py +23 -0
  672. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/progress/__init__.py +177 -0
  673. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/progress/bar.py +91 -0
  674. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/progress/counter.py +41 -0
  675. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/progress/spinner.py +43 -0
  676. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/pyparsing.py +7107 -0
  677. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__init__.py +154 -0
  678. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/__version__.py +14 -0
  679. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/_internal_utils.py +42 -0
  680. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/adapters.py +533 -0
  681. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/api.py +159 -0
  682. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/auth.py +305 -0
  683. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/certs.py +18 -0
  684. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/compat.py +76 -0
  685. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/cookies.py +549 -0
  686. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/exceptions.py +127 -0
  687. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/help.py +132 -0
  688. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/hooks.py +34 -0
  689. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/models.py +966 -0
  690. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/packages.py +16 -0
  691. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/sessions.py +781 -0
  692. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/status_codes.py +123 -0
  693. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/structures.py +105 -0
  694. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/requests/utils.py +1013 -0
  695. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
  696. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  697. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
  698. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/providers.py +124 -0
  699. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/reporters.py +37 -0
  700. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py +473 -0
  701. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.py +165 -0
  702. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/six.py +998 -0
  703. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/__init__.py +517 -0
  704. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_asyncio.py +92 -0
  705. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/_utils.py +68 -0
  706. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/after.py +46 -0
  707. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before.py +41 -0
  708. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/before_sleep.py +58 -0
  709. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/nap.py +43 -0
  710. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/retry.py +213 -0
  711. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/stop.py +96 -0
  712. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/tornadoweb.py +59 -0
  713. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tenacity/wait.py +191 -0
  714. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/__init__.py +6 -0
  715. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_parser.py +703 -0
  716. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/tomli/_re.py +83 -0
  717. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/__init__.py +85 -0
  718. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
  719. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  720. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connection.py +539 -0
  721. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/connectionpool.py +1067 -0
  722. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  723. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  724. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  725. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  726. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +396 -0
  727. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  728. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  729. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +511 -0
  730. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +922 -0
  731. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  732. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  733. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  734. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  735. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/__init__.py +5 -0
  736. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  737. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  738. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/six.py +1077 -0
  739. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +24 -0
  740. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +160 -0
  741. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/poolmanager.py +536 -0
  742. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/request.py +170 -0
  743. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/response.py +821 -0
  744. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  745. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/connection.py +150 -0
  746. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/proxy.py +56 -0
  747. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  748. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/request.py +143 -0
  749. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  750. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/retry.py +602 -0
  751. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssl_.py +495 -0
  752. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  753. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/timeout.py +268 -0
  754. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/url.py +432 -0
  755. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/urllib3/util/wait.py +153 -0
  756. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/vendor.txt +22 -0
  757. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
  758. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/labels.py +231 -0
  759. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
  760. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/tests.py +153 -0
  761. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
  762. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip/py.typed +4 -0
  763. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/INSTALLER +1 -0
  764. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/LICENSE.txt +20 -0
  765. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/METADATA +92 -0
  766. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/RECORD +795 -0
  767. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/REQUESTED +0 -0
  768. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/WHEEL +5 -0
  769. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/entry_points.txt +5 -0
  770. package/.claude/envoy/.venv/lib/python3.9/site-packages/pip-21.2.4.dist-info/top_level.txt +1 -0
  771. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py +3288 -0
  772. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  773. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
  774. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__about__.py +27 -0
  775. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__init__.py +26 -0
  776. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_compat.py +38 -0
  777. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_structures.py +86 -0
  778. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_typing.py +48 -0
  779. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py +328 -0
  780. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py +145 -0
  781. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py +863 -0
  782. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/tags.py +751 -0
  783. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/utils.py +65 -0
  784. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py +535 -0
  785. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/_vendor/pyparsing.py +5742 -0
  786. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/extern/__init__.py +73 -0
  787. package/.claude/envoy/.venv/lib/python3.9/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +6 -0
  788. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/__init__.py +2 -0
  789. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/__init__.py +1 -0
  790. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/ber/__init__.py +1 -0
  791. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/ber/decoder.py +2189 -0
  792. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/ber/encoder.py +954 -0
  793. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/ber/eoo.py +28 -0
  794. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/cer/__init__.py +1 -0
  795. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/cer/decoder.py +149 -0
  796. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/cer/encoder.py +331 -0
  797. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/der/__init__.py +1 -0
  798. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/der/decoder.py +120 -0
  799. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/der/encoder.py +126 -0
  800. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/native/__init__.py +1 -0
  801. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/native/decoder.py +244 -0
  802. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/native/encoder.py +285 -0
  803. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/codec/streaming.py +234 -0
  804. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/compat/__init__.py +4 -0
  805. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/compat/integer.py +13 -0
  806. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/debug.py +146 -0
  807. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/error.py +116 -0
  808. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/__init__.py +1 -0
  809. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/base.py +699 -0
  810. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/char.py +288 -0
  811. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/constraint.py +751 -0
  812. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/error.py +11 -0
  813. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/namedtype.py +550 -0
  814. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/namedval.py +192 -0
  815. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/opentype.py +104 -0
  816. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/tag.py +335 -0
  817. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/tagmap.py +96 -0
  818. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/univ.py +3327 -0
  819. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1/type/useful.py +189 -0
  820. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/INSTALLER +1 -0
  821. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/LICENSE.rst +24 -0
  822. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/METADATA +228 -0
  823. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/RECORD +71 -0
  824. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/WHEEL +5 -0
  825. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/top_level.txt +1 -0
  826. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1-0.6.1.dist-info/zip-safe +1 -0
  827. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/__init__.py +2 -0
  828. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/pem.py +58 -0
  829. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc1155.py +96 -0
  830. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc1157.py +126 -0
  831. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc1901.py +22 -0
  832. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc1902.py +129 -0
  833. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc1905.py +135 -0
  834. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2251.py +563 -0
  835. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2314.py +48 -0
  836. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2315.py +294 -0
  837. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2437.py +69 -0
  838. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2459.py +1339 -0
  839. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2511.py +258 -0
  840. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2560.py +225 -0
  841. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2631.py +37 -0
  842. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2634.py +336 -0
  843. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2876.py +56 -0
  844. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2985.py +588 -0
  845. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc2986.py +75 -0
  846. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3058.py +42 -0
  847. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3114.py +77 -0
  848. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3125.py +469 -0
  849. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3161.py +142 -0
  850. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3274.py +59 -0
  851. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3279.py +260 -0
  852. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3280.py +1543 -0
  853. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3281.py +331 -0
  854. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3370.py +146 -0
  855. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3412.py +53 -0
  856. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3414.py +28 -0
  857. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3447.py +45 -0
  858. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3537.py +34 -0
  859. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3560.py +74 -0
  860. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3565.py +57 -0
  861. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3657.py +66 -0
  862. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3709.py +207 -0
  863. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3739.py +203 -0
  864. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3770.py +75 -0
  865. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3779.py +137 -0
  866. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3820.py +65 -0
  867. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc3852.py +706 -0
  868. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4010.py +58 -0
  869. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4043.py +43 -0
  870. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4055.py +258 -0
  871. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4073.py +59 -0
  872. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4108.py +350 -0
  873. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4210.py +803 -0
  874. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4211.py +396 -0
  875. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4334.py +75 -0
  876. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4357.py +477 -0
  877. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4387.py +23 -0
  878. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4476.py +93 -0
  879. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4490.py +113 -0
  880. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4491.py +44 -0
  881. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4683.py +72 -0
  882. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc4985.py +49 -0
  883. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5035.py +199 -0
  884. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5083.py +52 -0
  885. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5084.py +97 -0
  886. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5126.py +577 -0
  887. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5208.py +56 -0
  888. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5275.py +404 -0
  889. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5280.py +1658 -0
  890. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5480.py +190 -0
  891. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5636.py +113 -0
  892. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5639.py +49 -0
  893. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5649.py +33 -0
  894. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5652.py +761 -0
  895. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5697.py +70 -0
  896. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5751.py +124 -0
  897. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5752.py +49 -0
  898. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5753.py +157 -0
  899. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5755.py +398 -0
  900. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5913.py +44 -0
  901. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5914.py +119 -0
  902. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5915.py +32 -0
  903. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5916.py +35 -0
  904. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5917.py +55 -0
  905. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5924.py +19 -0
  906. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5934.py +786 -0
  907. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5940.py +59 -0
  908. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5958.py +98 -0
  909. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc5990.py +237 -0
  910. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6010.py +88 -0
  911. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6019.py +45 -0
  912. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6031.py +469 -0
  913. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6032.py +68 -0
  914. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6120.py +43 -0
  915. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6170.py +17 -0
  916. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6187.py +22 -0
  917. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6210.py +42 -0
  918. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6211.py +72 -0
  919. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6402.py +628 -0
  920. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6482.py +74 -0
  921. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6486.py +68 -0
  922. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6487.py +22 -0
  923. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6664.py +147 -0
  924. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6955.py +108 -0
  925. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc6960.py +223 -0
  926. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7030.py +66 -0
  927. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7191.py +261 -0
  928. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7229.py +29 -0
  929. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7292.py +357 -0
  930. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7296.py +32 -0
  931. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7508.py +90 -0
  932. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7585.py +50 -0
  933. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7633.py +38 -0
  934. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7773.py +52 -0
  935. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7894.py +92 -0
  936. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7906.py +736 -0
  937. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc7914.py +49 -0
  938. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8017.py +153 -0
  939. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8018.py +260 -0
  940. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8103.py +36 -0
  941. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8209.py +20 -0
  942. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8226.py +149 -0
  943. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8358.py +50 -0
  944. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8360.py +44 -0
  945. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8398.py +52 -0
  946. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8410.py +43 -0
  947. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8418.py +36 -0
  948. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8419.py +68 -0
  949. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8479.py +45 -0
  950. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8494.py +80 -0
  951. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8520.py +63 -0
  952. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8619.py +45 -0
  953. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8649.py +40 -0
  954. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8692.py +79 -0
  955. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8696.py +104 -0
  956. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8702.py +105 -0
  957. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8708.py +41 -0
  958. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules/rfc8769.py +21 -0
  959. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/INSTALLER +1 -0
  960. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/METADATA +73 -0
  961. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/RECORD +271 -0
  962. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/WHEEL +5 -0
  963. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/licenses/LICENSE.txt +24 -0
  964. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/top_level.txt +1 -0
  965. package/.claude/envoy/.venv/lib/python3.9/site-packages/pyasn1_modules-0.4.2.dist-info/zip-safe +1 -0
  966. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/__init__.py +456 -0
  967. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/__init__.py +0 -0
  968. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_config.py +383 -0
  969. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_core_metadata.py +97 -0
  970. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_core_utils.py +174 -0
  971. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_dataclasses.py +315 -0
  972. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_decorators.py +858 -0
  973. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_decorators_v1.py +174 -0
  974. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_discriminated_union.py +479 -0
  975. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_docs_extraction.py +113 -0
  976. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_fields.py +635 -0
  977. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_forward_ref.py +23 -0
  978. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_generate_schema.py +2867 -0
  979. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_generics.py +543 -0
  980. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_git.py +27 -0
  981. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_import_utils.py +20 -0
  982. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_internal_dataclass.py +7 -0
  983. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_known_annotated_metadata.py +401 -0
  984. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py +228 -0
  985. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_model_construction.py +848 -0
  986. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_namespace_utils.py +293 -0
  987. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_repr.py +124 -0
  988. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_schema_gather.py +209 -0
  989. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_schema_generation_shared.py +125 -0
  990. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_serializers.py +53 -0
  991. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_signature.py +188 -0
  992. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_typing_extra.py +760 -0
  993. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_utils.py +446 -0
  994. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_validate_call.py +140 -0
  995. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_internal/_validators.py +533 -0
  996. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/_migration.py +316 -0
  997. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/alias_generators.py +62 -0
  998. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/aliases.py +135 -0
  999. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/annotated_handlers.py +122 -0
  1000. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/class_validators.py +5 -0
  1001. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/color.py +604 -0
  1002. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/config.py +1288 -0
  1003. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/dataclasses.py +413 -0
  1004. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/datetime_parse.py +5 -0
  1005. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/decorator.py +5 -0
  1006. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/__init__.py +0 -0
  1007. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/class_validators.py +256 -0
  1008. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/config.py +72 -0
  1009. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/copy_internals.py +224 -0
  1010. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/decorator.py +284 -0
  1011. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/json.py +141 -0
  1012. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/parse.py +80 -0
  1013. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/deprecated/tools.py +103 -0
  1014. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/env_settings.py +5 -0
  1015. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/error_wrappers.py +5 -0
  1016. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/errors.py +189 -0
  1017. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/experimental/__init__.py +1 -0
  1018. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/experimental/arguments_schema.py +44 -0
  1019. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/experimental/missing_sentinel.py +5 -0
  1020. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/experimental/pipeline.py +654 -0
  1021. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/fields.py +1834 -0
  1022. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/functional_serializers.py +451 -0
  1023. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/functional_validators.py +893 -0
  1024. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/generics.py +5 -0
  1025. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/json.py +5 -0
  1026. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/json_schema.py +2854 -0
  1027. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/main.py +1819 -0
  1028. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/mypy.py +1374 -0
  1029. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/networks.py +1331 -0
  1030. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/parse.py +5 -0
  1031. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/plugin/__init__.py +193 -0
  1032. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/plugin/_loader.py +58 -0
  1033. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/plugin/_schema_validator.py +140 -0
  1034. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/py.typed +0 -0
  1035. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/root_model.py +155 -0
  1036. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/schema.py +5 -0
  1037. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/tools.py +5 -0
  1038. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/type_adapter.py +795 -0
  1039. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/types.py +3295 -0
  1040. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/typing.py +5 -0
  1041. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/utils.py +5 -0
  1042. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/__init__.py +142 -0
  1043. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/_hypothesis_plugin.py +391 -0
  1044. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/annotated_types.py +72 -0
  1045. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/class_validators.py +361 -0
  1046. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/color.py +494 -0
  1047. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/config.py +191 -0
  1048. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/dataclasses.py +500 -0
  1049. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/datetime_parse.py +248 -0
  1050. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/decorator.py +264 -0
  1051. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/env_settings.py +350 -0
  1052. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/error_wrappers.py +161 -0
  1053. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/errors.py +646 -0
  1054. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/fields.py +1253 -0
  1055. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/generics.py +400 -0
  1056. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/json.py +112 -0
  1057. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/main.py +1113 -0
  1058. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/mypy.py +949 -0
  1059. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/networks.py +747 -0
  1060. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/parse.py +66 -0
  1061. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/py.typed +0 -0
  1062. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/schema.py +1163 -0
  1063. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/tools.py +92 -0
  1064. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/types.py +1205 -0
  1065. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/typing.py +614 -0
  1066. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/utils.py +806 -0
  1067. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/validators.py +768 -0
  1068. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/v1/version.py +38 -0
  1069. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/validate_call_decorator.py +116 -0
  1070. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/validators.py +5 -0
  1071. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/version.py +113 -0
  1072. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic/warnings.py +122 -0
  1073. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic-2.12.5.dist-info/INSTALLER +1 -0
  1074. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic-2.12.5.dist-info/METADATA +1029 -0
  1075. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic-2.12.5.dist-info/RECORD +217 -0
  1076. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic-2.12.5.dist-info/WHEEL +4 -0
  1077. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic-2.12.5.dist-info/licenses/LICENSE +21 -0
  1078. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core/__init__.py +171 -0
  1079. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core/_pydantic_core.cpython-39-darwin.so +0 -0
  1080. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core/_pydantic_core.pyi +1046 -0
  1081. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core/core_schema.py +4435 -0
  1082. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core/py.typed +0 -0
  1083. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core-2.41.5.dist-info/INSTALLER +1 -0
  1084. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core-2.41.5.dist-info/METADATA +180 -0
  1085. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core-2.41.5.dist-info/RECORD +12 -0
  1086. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core-2.41.5.dist-info/WHEEL +4 -0
  1087. package/.claude/envoy/.venv/lib/python3.9/site-packages/pydantic_core-2.41.5.dist-info/licenses/LICENSE +21 -0
  1088. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/__init__.py +184 -0
  1089. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/__version__.py +14 -0
  1090. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/_internal_utils.py +50 -0
  1091. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/adapters.py +696 -0
  1092. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/api.py +157 -0
  1093. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/auth.py +314 -0
  1094. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/certs.py +17 -0
  1095. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/compat.py +106 -0
  1096. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/cookies.py +561 -0
  1097. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/exceptions.py +151 -0
  1098. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/help.py +134 -0
  1099. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/hooks.py +33 -0
  1100. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/models.py +1039 -0
  1101. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/packages.py +23 -0
  1102. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/sessions.py +831 -0
  1103. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/status_codes.py +128 -0
  1104. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/structures.py +99 -0
  1105. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests/utils.py +1086 -0
  1106. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/INSTALLER +1 -0
  1107. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/METADATA +133 -0
  1108. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/RECORD +43 -0
  1109. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/REQUESTED +0 -0
  1110. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/WHEEL +5 -0
  1111. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/licenses/LICENSE +175 -0
  1112. package/.claude/envoy/.venv/lib/python3.9/site-packages/requests-2.32.5.dist-info/top_level.txt +1 -0
  1113. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/__init__.py +60 -0
  1114. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/asn1.py +52 -0
  1115. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/cli.py +321 -0
  1116. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/common.py +184 -0
  1117. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/core.py +53 -0
  1118. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/key.py +858 -0
  1119. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/parallel.py +96 -0
  1120. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/pem.py +134 -0
  1121. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/pkcs1.py +485 -0
  1122. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/pkcs1_v2.py +100 -0
  1123. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/prime.py +198 -0
  1124. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/py.typed +1 -0
  1125. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/randnum.py +95 -0
  1126. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/transform.py +72 -0
  1127. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa/util.py +97 -0
  1128. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/INSTALLER +1 -0
  1129. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/LICENSE +13 -0
  1130. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/METADATA +140 -0
  1131. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/RECORD +41 -0
  1132. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/WHEEL +4 -0
  1133. package/.claude/envoy/.venv/lib/python3.9/site-packages/rsa-4.9.1.dist-info/entry_points.txt +8 -0
  1134. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/__init__.py +242 -0
  1135. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_deprecation_warning.py +7 -0
  1136. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/__init__.py +15 -0
  1137. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/_msvccompiler.py +561 -0
  1138. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/archive_util.py +256 -0
  1139. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/bcppcompiler.py +393 -0
  1140. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/ccompiler.py +1123 -0
  1141. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/cmd.py +403 -0
  1142. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/__init__.py +31 -0
  1143. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist.py +143 -0
  1144. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_dumb.py +123 -0
  1145. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_msi.py +749 -0
  1146. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_rpm.py +579 -0
  1147. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/bdist_wininst.py +377 -0
  1148. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build.py +157 -0
  1149. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_clib.py +209 -0
  1150. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py +757 -0
  1151. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_py.py +392 -0
  1152. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/build_scripts.py +152 -0
  1153. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/check.py +148 -0
  1154. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/clean.py +76 -0
  1155. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/config.py +344 -0
  1156. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install.py +677 -0
  1157. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_data.py +79 -0
  1158. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_egg_info.py +77 -0
  1159. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_headers.py +47 -0
  1160. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_lib.py +217 -0
  1161. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/install_scripts.py +60 -0
  1162. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/py37compat.py +30 -0
  1163. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/register.py +304 -0
  1164. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py +494 -0
  1165. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/command/upload.py +214 -0
  1166. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/config.py +130 -0
  1167. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/core.py +234 -0
  1168. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/cygwinccompiler.py +414 -0
  1169. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/debug.py +5 -0
  1170. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/dep_util.py +92 -0
  1171. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/dir_util.py +210 -0
  1172. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/dist.py +1257 -0
  1173. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/errors.py +97 -0
  1174. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/extension.py +240 -0
  1175. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/fancy_getopt.py +457 -0
  1176. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/file_util.py +238 -0
  1177. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/filelist.py +355 -0
  1178. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/log.py +77 -0
  1179. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvc9compiler.py +788 -0
  1180. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/msvccompiler.py +643 -0
  1181. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/py35compat.py +19 -0
  1182. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/py38compat.py +7 -0
  1183. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/spawn.py +106 -0
  1184. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/sysconfig.py +573 -0
  1185. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/text_file.py +286 -0
  1186. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/unixccompiler.py +332 -0
  1187. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/util.py +535 -0
  1188. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/version.py +347 -0
  1189. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_distutils/versionpredicate.py +166 -0
  1190. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_imp.py +82 -0
  1191. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/__init__.py +0 -0
  1192. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/__init__.py +4 -0
  1193. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/more.py +3825 -0
  1194. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/recipes.py +620 -0
  1195. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/ordered_set.py +488 -0
  1196. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__about__.py +27 -0
  1197. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/__init__.py +26 -0
  1198. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_compat.py +38 -0
  1199. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_structures.py +86 -0
  1200. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/_typing.py +48 -0
  1201. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/markers.py +328 -0
  1202. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/requirements.py +145 -0
  1203. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/specifiers.py +863 -0
  1204. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/tags.py +751 -0
  1205. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/utils.py +65 -0
  1206. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/packaging/version.py +535 -0
  1207. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/_vendor/pyparsing.py +5742 -0
  1208. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/archive_util.py +205 -0
  1209. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/build_meta.py +281 -0
  1210. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/cli-32.exe +0 -0
  1211. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/cli-64.exe +0 -0
  1212. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/cli.exe +0 -0
  1213. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/__init__.py +8 -0
  1214. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/alias.py +78 -0
  1215. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/bdist_egg.py +456 -0
  1216. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/bdist_rpm.py +31 -0
  1217. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/build_clib.py +101 -0
  1218. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/build_ext.py +328 -0
  1219. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/build_py.py +232 -0
  1220. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/develop.py +193 -0
  1221. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/dist_info.py +36 -0
  1222. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/easy_install.py +2290 -0
  1223. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/egg_info.py +734 -0
  1224. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/install.py +125 -0
  1225. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/install_egg_info.py +62 -0
  1226. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/install_lib.py +122 -0
  1227. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/install_scripts.py +69 -0
  1228. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/launcher manifest.xml +15 -0
  1229. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/py36compat.py +134 -0
  1230. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/register.py +18 -0
  1231. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/rotate.py +64 -0
  1232. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/saveopts.py +22 -0
  1233. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/sdist.py +189 -0
  1234. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/setopt.py +149 -0
  1235. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/test.py +252 -0
  1236. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/upload.py +17 -0
  1237. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/command/upload_docs.py +202 -0
  1238. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/config.py +749 -0
  1239. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/dep_util.py +25 -0
  1240. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/depends.py +175 -0
  1241. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/dist.py +1150 -0
  1242. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/errors.py +16 -0
  1243. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/extension.py +55 -0
  1244. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/extern/__init__.py +73 -0
  1245. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/glob.py +167 -0
  1246. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/gui-32.exe +0 -0
  1247. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/gui-64.exe +0 -0
  1248. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/gui.exe +0 -0
  1249. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/installer.py +97 -0
  1250. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/launch.py +36 -0
  1251. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/monkey.py +177 -0
  1252. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/msvc.py +1805 -0
  1253. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/namespaces.py +107 -0
  1254. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/package_index.py +1119 -0
  1255. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/py34compat.py +13 -0
  1256. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/sandbox.py +530 -0
  1257. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/script (dev).tmpl +6 -0
  1258. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/script.tmpl +3 -0
  1259. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/unicode_utils.py +42 -0
  1260. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/version.py +6 -0
  1261. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/wheel.py +213 -0
  1262. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools/windows_support.py +29 -0
  1263. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/INSTALLER +1 -0
  1264. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/LICENSE +19 -0
  1265. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/METADATA +119 -0
  1266. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/RECORD +296 -0
  1267. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/REQUESTED +0 -0
  1268. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/WHEEL +5 -0
  1269. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/entry_points.txt +56 -0
  1270. package/.claude/envoy/.venv/lib/python3.9/site-packages/setuptools-58.0.4.dist-info/top_level.txt +3 -0
  1271. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/__init__.py +722 -0
  1272. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/_utils.py +101 -0
  1273. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/after.py +51 -0
  1274. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/asyncio/__init__.py +206 -0
  1275. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/asyncio/retry.py +125 -0
  1276. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/before.py +48 -0
  1277. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/before_sleep.py +72 -0
  1278. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/nap.py +43 -0
  1279. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/py.typed +0 -0
  1280. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/retry.py +282 -0
  1281. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/stop.py +130 -0
  1282. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/tornadoweb.py +63 -0
  1283. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity/wait.py +234 -0
  1284. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/INSTALLER +1 -0
  1285. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/METADATA +31 -0
  1286. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/RECORD +31 -0
  1287. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/WHEEL +5 -0
  1288. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/licenses/LICENSE +202 -0
  1289. package/.claude/envoy/.venv/lib/python3.9/site-packages/tenacity-9.1.2.dist-info/top_level.txt +1 -0
  1290. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER +1 -0
  1291. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions-4.15.0.dist-info/METADATA +72 -0
  1292. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions-4.15.0.dist-info/RECORD +7 -0
  1293. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions-4.15.0.dist-info/WHEEL +4 -0
  1294. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE +279 -0
  1295. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_extensions.py +4317 -0
  1296. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection/__init__.py +0 -0
  1297. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection/introspection.py +587 -0
  1298. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection/py.typed +0 -0
  1299. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection/typing_objects.py +607 -0
  1300. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection/typing_objects.pyi +417 -0
  1301. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection-0.4.2.dist-info/INSTALLER +1 -0
  1302. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection-0.4.2.dist-info/METADATA +49 -0
  1303. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection-0.4.2.dist-info/RECORD +13 -0
  1304. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection-0.4.2.dist-info/WHEEL +4 -0
  1305. package/.claude/envoy/.venv/lib/python3.9/site-packages/typing_inspection-0.4.2.dist-info/licenses/LICENSE +21 -0
  1306. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/__init__.py +211 -0
  1307. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/_base_connection.py +165 -0
  1308. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/_collections.py +487 -0
  1309. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/_request_methods.py +278 -0
  1310. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/_version.py +34 -0
  1311. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/connection.py +1099 -0
  1312. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/connectionpool.py +1178 -0
  1313. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/__init__.py +0 -0
  1314. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/__init__.py +16 -0
  1315. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/connection.py +259 -0
  1316. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js +110 -0
  1317. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/fetch.py +726 -0
  1318. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/request.py +22 -0
  1319. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/emscripten/response.py +277 -0
  1320. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/pyopenssl.py +564 -0
  1321. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/contrib/socks.py +228 -0
  1322. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/exceptions.py +335 -0
  1323. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/fields.py +341 -0
  1324. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/filepost.py +89 -0
  1325. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/http2/__init__.py +53 -0
  1326. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/http2/connection.py +356 -0
  1327. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/http2/probe.py +87 -0
  1328. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/poolmanager.py +651 -0
  1329. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/py.typed +2 -0
  1330. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/response.py +1465 -0
  1331. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/__init__.py +42 -0
  1332. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/connection.py +137 -0
  1333. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/proxy.py +43 -0
  1334. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/request.py +263 -0
  1335. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/response.py +101 -0
  1336. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/retry.py +533 -0
  1337. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/ssl_.py +527 -0
  1338. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/ssl_match_hostname.py +159 -0
  1339. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/ssltransport.py +271 -0
  1340. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/timeout.py +275 -0
  1341. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/url.py +469 -0
  1342. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/util.py +42 -0
  1343. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3/util/wait.py +124 -0
  1344. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3-2.6.0.dist-info/INSTALLER +1 -0
  1345. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3-2.6.0.dist-info/METADATA +156 -0
  1346. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3-2.6.0.dist-info/RECORD +79 -0
  1347. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3-2.6.0.dist-info/WHEEL +4 -0
  1348. package/.claude/envoy/.venv/lib/python3.9/site-packages/urllib3-2.6.0.dist-info/licenses/LICENSE.txt +21 -0
  1349. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/__init__.py +236 -0
  1350. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/__main__.py +5 -0
  1351. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/__init__.py +0 -0
  1352. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/async_timeout.py +282 -0
  1353. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/client.py +820 -0
  1354. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/compatibility.py +30 -0
  1355. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/connection.py +1237 -0
  1356. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/messages.py +314 -0
  1357. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/router.py +198 -0
  1358. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/asyncio/server.py +981 -0
  1359. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/auth.py +18 -0
  1360. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/cli.py +178 -0
  1361. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/client.py +389 -0
  1362. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/connection.py +12 -0
  1363. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/datastructures.py +187 -0
  1364. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/exceptions.py +473 -0
  1365. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/extensions/__init__.py +4 -0
  1366. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/extensions/base.py +123 -0
  1367. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/extensions/permessage_deflate.py +697 -0
  1368. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/frames.py +430 -0
  1369. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/headers.py +586 -0
  1370. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/http.py +20 -0
  1371. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/http11.py +427 -0
  1372. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/imports.py +100 -0
  1373. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/__init__.py +11 -0
  1374. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/auth.py +190 -0
  1375. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/client.py +705 -0
  1376. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/exceptions.py +71 -0
  1377. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/framing.py +225 -0
  1378. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/handshake.py +158 -0
  1379. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/http.py +201 -0
  1380. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/protocol.py +1641 -0
  1381. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/legacy/server.py +1191 -0
  1382. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/protocol.py +758 -0
  1383. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/py.typed +0 -0
  1384. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/server.py +587 -0
  1385. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/speedups.c +222 -0
  1386. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/speedups.cpython-39-darwin.so +0 -0
  1387. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/speedups.pyi +1 -0
  1388. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/streams.py +151 -0
  1389. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/__init__.py +0 -0
  1390. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/client.py +648 -0
  1391. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/connection.py +1072 -0
  1392. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/messages.py +345 -0
  1393. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/router.py +192 -0
  1394. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/server.py +763 -0
  1395. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/sync/utils.py +45 -0
  1396. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/typing.py +74 -0
  1397. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/uri.py +225 -0
  1398. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/utils.py +51 -0
  1399. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets/version.py +92 -0
  1400. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/INSTALLER +1 -0
  1401. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/LICENSE +24 -0
  1402. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/METADATA +179 -0
  1403. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/RECORD +106 -0
  1404. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/WHEEL +5 -0
  1405. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/entry_points.txt +2 -0
  1406. package/.claude/envoy/.venv/lib/python3.9/site-packages/websockets-15.0.1.dist-info/top_level.txt +1 -0
  1407. package/.claude/envoy/.venv/pyvenv.cfg +3 -0
  1408. package/.claude/envoy/README.md +76 -0
  1409. package/.claude/envoy/claude-envoy.py +0 -0
  1410. package/.claude/envoy/commands/__init__.py +1 -0
  1411. package/.claude/envoy/commands/base.py +95 -0
  1412. package/.claude/envoy/commands/parallel.py +439 -0
  1413. package/.claude/envoy/commands/perplexity.py +86 -0
  1414. package/.claude/envoy/commands/plans.py +451 -0
  1415. package/.claude/envoy/commands/tavily.py +156 -0
  1416. package/.claude/envoy/commands/vertex.py +358 -0
  1417. package/.claude/envoy/commands/xai.py +124 -0
  1418. package/.claude/envoy/envoy +30 -0
  1419. package/.claude/envoy/envoy.py +122 -0
  1420. package/.claude/envoy/pyrightconfig.json +4 -0
  1421. package/.claude/envoy/requirements.txt +2 -0
  1422. package/.claude/hooks/capture-queries.sh +3 -0
  1423. package/.claude/hooks/scripts/enforce_planning.py +118 -0
  1424. package/.claude/hooks/scripts/enforce_research_fetch.py +17 -0
  1425. package/.claude/hooks/scripts/enforce_research_search.py +11 -0
  1426. package/.claude/hooks/scripts/enforce_rg.py +34 -0
  1427. package/.claude/hooks/scripts/github_url_to_gh.py +44 -0
  1428. package/.claude/hooks/scripts/scan_skills.py +89 -0
  1429. package/.claude/hooks/scripts/validate_skill.py +81 -0
  1430. package/.claude/hooks/startup.sh +57 -0
  1431. package/.claude/output-styles/systematic-bug-fixer.md +0 -0
  1432. package/.claude/plans/feat-npm-package-cli/plan.md +85 -0
  1433. package/.claude/plans/feat-specialist-builder-patterns/plan.md +298 -0
  1434. package/.claude/settings.json +145 -0
  1435. package/.claude/skills/claude-code-patterns/SKILL.md +51 -0
  1436. package/.claude/skills/claude-code-patterns/docs/context-hygiene.md +19 -0
  1437. package/.claude/skills/claude-envoy-curation/SKILL.md +99 -0
  1438. package/.claude/skills/claude-envoy-usage/SKILL.md +38 -0
  1439. package/.claude/skills/command-development/SKILL.md +216 -0
  1440. package/.claude/skills/command-development/examples/simple-commands.md +212 -0
  1441. package/.claude/skills/command-development/references/frontmatter-reference.md +221 -0
  1442. package/.claude/skills/git-ops/SKILL.md +137 -0
  1443. package/.claude/skills/hook-development/SKILL.md +103 -0
  1444. package/.claude/skills/hook-development/examples/command-hooks.md +301 -0
  1445. package/.claude/skills/hook-development/examples/prompt-hooks.md +114 -0
  1446. package/.claude/skills/hook-development/references/event-reference.md +226 -0
  1447. package/.claude/skills/orchestration-idols/SKILL.md +68 -0
  1448. package/.claude/skills/repomix-extraction/SKILL.md +89 -0
  1449. package/.claude/skills/research-tools/SKILL.md +129 -0
  1450. package/.claude/skills/skill-development/SKILL.md +236 -0
  1451. package/.claude/skills/skill-development/examples/complete-skill-examples.md +281 -0
  1452. package/.claude/skills/skill-development/references/progressive-disclosure.md +141 -0
  1453. package/.claude/skills/skill-development/references/writing-style.md +180 -0
  1454. package/.claude/skills/skill-development/scripts/validate-skill.sh +144 -0
  1455. package/.claude/skills/specialist-builder/SKILL.md +348 -0
  1456. package/.claude/skills/specialist-builder/docs/agent-catalog.md +28 -0
  1457. package/.claude/skills/specialist-builder/examples/complete-agent-examples.md +206 -0
  1458. package/.claude/skills/specialist-builder/references/system-prompt-patterns.md +281 -0
  1459. package/.claude/skills/specialist-builder/references/triggering-examples.md +162 -0
  1460. package/.claude/skills/specialist-builder/scripts/validate-agent.sh +137 -0
  1461. package/README.md +94 -0
  1462. package/bin/cli.js +7326 -0
  1463. package/package.json +45 -0
@@ -0,0 +1,2795 @@
1
+ from __future__ import absolute_import, division, unicode_literals
2
+ from pip._vendor.six import with_metaclass, viewkeys
3
+
4
+ import types
5
+
6
+ from . import _inputstream
7
+ from . import _tokenizer
8
+
9
+ from . import treebuilders
10
+ from .treebuilders.base import Marker
11
+
12
+ from . import _utils
13
+ from .constants import (
14
+ spaceCharacters, asciiUpper2Lower,
15
+ specialElements, headingElements, cdataElements, rcdataElements,
16
+ tokenTypes, tagTokenTypes,
17
+ namespaces,
18
+ htmlIntegrationPointElements, mathmlTextIntegrationPointElements,
19
+ adjustForeignAttributes as adjustForeignAttributesMap,
20
+ adjustMathMLAttributes, adjustSVGAttributes,
21
+ E,
22
+ _ReparseException
23
+ )
24
+
25
+
26
+ def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs):
27
+ """Parse an HTML document as a string or file-like object into a tree
28
+
29
+ :arg doc: the document to parse as a string or file-like object
30
+
31
+ :arg treebuilder: the treebuilder to use when parsing
32
+
33
+ :arg namespaceHTMLElements: whether or not to namespace HTML elements
34
+
35
+ :returns: parsed tree
36
+
37
+ Example:
38
+
39
+ >>> from html5lib.html5parser import parse
40
+ >>> parse('<html><body><p>This is a doc</p></body></html>')
41
+ <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>
42
+
43
+ """
44
+ tb = treebuilders.getTreeBuilder(treebuilder)
45
+ p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements)
46
+ return p.parse(doc, **kwargs)
47
+
48
+
49
+ def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs):
50
+ """Parse an HTML fragment as a string or file-like object into a tree
51
+
52
+ :arg doc: the fragment to parse as a string or file-like object
53
+
54
+ :arg container: the container context to parse the fragment in
55
+
56
+ :arg treebuilder: the treebuilder to use when parsing
57
+
58
+ :arg namespaceHTMLElements: whether or not to namespace HTML elements
59
+
60
+ :returns: parsed tree
61
+
62
+ Example:
63
+
64
+ >>> from html5lib.html5libparser import parseFragment
65
+ >>> parseFragment('<b>this is a fragment</b>')
66
+ <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>
67
+
68
+ """
69
+ tb = treebuilders.getTreeBuilder(treebuilder)
70
+ p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements)
71
+ return p.parseFragment(doc, container=container, **kwargs)
72
+
73
+
74
+ def method_decorator_metaclass(function):
75
+ class Decorated(type):
76
+ def __new__(meta, classname, bases, classDict):
77
+ for attributeName, attribute in classDict.items():
78
+ if isinstance(attribute, types.FunctionType):
79
+ attribute = function(attribute)
80
+
81
+ classDict[attributeName] = attribute
82
+ return type.__new__(meta, classname, bases, classDict)
83
+ return Decorated
84
+
85
+
86
+ class HTMLParser(object):
87
+ """HTML parser
88
+
89
+ Generates a tree structure from a stream of (possibly malformed) HTML.
90
+
91
+ """
92
+
93
+ def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False):
94
+ """
95
+ :arg tree: a treebuilder class controlling the type of tree that will be
96
+ returned. Built in treebuilders can be accessed through
97
+ html5lib.treebuilders.getTreeBuilder(treeType)
98
+
99
+ :arg strict: raise an exception when a parse error is encountered
100
+
101
+ :arg namespaceHTMLElements: whether or not to namespace HTML elements
102
+
103
+ :arg debug: whether or not to enable debug mode which logs things
104
+
105
+ Example:
106
+
107
+ >>> from html5lib.html5parser import HTMLParser
108
+ >>> parser = HTMLParser() # generates parser with etree builder
109
+ >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict
110
+
111
+ """
112
+
113
+ # Raise an exception on the first error encountered
114
+ self.strict = strict
115
+
116
+ if tree is None:
117
+ tree = treebuilders.getTreeBuilder("etree")
118
+ self.tree = tree(namespaceHTMLElements)
119
+ self.errors = []
120
+
121
+ self.phases = {name: cls(self, self.tree) for name, cls in
122
+ getPhases(debug).items()}
123
+
124
+ def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs):
125
+
126
+ self.innerHTMLMode = innerHTML
127
+ self.container = container
128
+ self.scripting = scripting
129
+ self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs)
130
+ self.reset()
131
+
132
+ try:
133
+ self.mainLoop()
134
+ except _ReparseException:
135
+ self.reset()
136
+ self.mainLoop()
137
+
138
+ def reset(self):
139
+ self.tree.reset()
140
+ self.firstStartTag = False
141
+ self.errors = []
142
+ self.log = [] # only used with debug mode
143
+ # "quirks" / "limited quirks" / "no quirks"
144
+ self.compatMode = "no quirks"
145
+
146
+ if self.innerHTMLMode:
147
+ self.innerHTML = self.container.lower()
148
+
149
+ if self.innerHTML in cdataElements:
150
+ self.tokenizer.state = self.tokenizer.rcdataState
151
+ elif self.innerHTML in rcdataElements:
152
+ self.tokenizer.state = self.tokenizer.rawtextState
153
+ elif self.innerHTML == 'plaintext':
154
+ self.tokenizer.state = self.tokenizer.plaintextState
155
+ else:
156
+ # state already is data state
157
+ # self.tokenizer.state = self.tokenizer.dataState
158
+ pass
159
+ self.phase = self.phases["beforeHtml"]
160
+ self.phase.insertHtmlElement()
161
+ self.resetInsertionMode()
162
+ else:
163
+ self.innerHTML = False # pylint:disable=redefined-variable-type
164
+ self.phase = self.phases["initial"]
165
+
166
+ self.lastPhase = None
167
+
168
+ self.beforeRCDataPhase = None
169
+
170
+ self.framesetOK = True
171
+
172
+ @property
173
+ def documentEncoding(self):
174
+ """Name of the character encoding that was used to decode the input stream, or
175
+ :obj:`None` if that is not determined yet
176
+
177
+ """
178
+ if not hasattr(self, 'tokenizer'):
179
+ return None
180
+ return self.tokenizer.stream.charEncoding[0].name
181
+
182
+ def isHTMLIntegrationPoint(self, element):
183
+ if (element.name == "annotation-xml" and
184
+ element.namespace == namespaces["mathml"]):
185
+ return ("encoding" in element.attributes and
186
+ element.attributes["encoding"].translate(
187
+ asciiUpper2Lower) in
188
+ ("text/html", "application/xhtml+xml"))
189
+ else:
190
+ return (element.namespace, element.name) in htmlIntegrationPointElements
191
+
192
+ def isMathMLTextIntegrationPoint(self, element):
193
+ return (element.namespace, element.name) in mathmlTextIntegrationPointElements
194
+
195
+ def mainLoop(self):
196
+ CharactersToken = tokenTypes["Characters"]
197
+ SpaceCharactersToken = tokenTypes["SpaceCharacters"]
198
+ StartTagToken = tokenTypes["StartTag"]
199
+ EndTagToken = tokenTypes["EndTag"]
200
+ CommentToken = tokenTypes["Comment"]
201
+ DoctypeToken = tokenTypes["Doctype"]
202
+ ParseErrorToken = tokenTypes["ParseError"]
203
+
204
+ for token in self.tokenizer:
205
+ prev_token = None
206
+ new_token = token
207
+ while new_token is not None:
208
+ prev_token = new_token
209
+ currentNode = self.tree.openElements[-1] if self.tree.openElements else None
210
+ currentNodeNamespace = currentNode.namespace if currentNode else None
211
+ currentNodeName = currentNode.name if currentNode else None
212
+
213
+ type = new_token["type"]
214
+
215
+ if type == ParseErrorToken:
216
+ self.parseError(new_token["data"], new_token.get("datavars", {}))
217
+ new_token = None
218
+ else:
219
+ if (len(self.tree.openElements) == 0 or
220
+ currentNodeNamespace == self.tree.defaultNamespace or
221
+ (self.isMathMLTextIntegrationPoint(currentNode) and
222
+ ((type == StartTagToken and
223
+ token["name"] not in frozenset(["mglyph", "malignmark"])) or
224
+ type in (CharactersToken, SpaceCharactersToken))) or
225
+ (currentNodeNamespace == namespaces["mathml"] and
226
+ currentNodeName == "annotation-xml" and
227
+ type == StartTagToken and
228
+ token["name"] == "svg") or
229
+ (self.isHTMLIntegrationPoint(currentNode) and
230
+ type in (StartTagToken, CharactersToken, SpaceCharactersToken))):
231
+ phase = self.phase
232
+ else:
233
+ phase = self.phases["inForeignContent"]
234
+
235
+ if type == CharactersToken:
236
+ new_token = phase.processCharacters(new_token)
237
+ elif type == SpaceCharactersToken:
238
+ new_token = phase.processSpaceCharacters(new_token)
239
+ elif type == StartTagToken:
240
+ new_token = phase.processStartTag(new_token)
241
+ elif type == EndTagToken:
242
+ new_token = phase.processEndTag(new_token)
243
+ elif type == CommentToken:
244
+ new_token = phase.processComment(new_token)
245
+ elif type == DoctypeToken:
246
+ new_token = phase.processDoctype(new_token)
247
+
248
+ if (type == StartTagToken and prev_token["selfClosing"] and
249
+ not prev_token["selfClosingAcknowledged"]):
250
+ self.parseError("non-void-element-with-trailing-solidus",
251
+ {"name": prev_token["name"]})
252
+
253
+ # When the loop finishes it's EOF
254
+ reprocess = True
255
+ phases = []
256
+ while reprocess:
257
+ phases.append(self.phase)
258
+ reprocess = self.phase.processEOF()
259
+ if reprocess:
260
+ assert self.phase not in phases
261
+
262
+ def parse(self, stream, *args, **kwargs):
263
+ """Parse a HTML document into a well-formed tree
264
+
265
+ :arg stream: a file-like object or string containing the HTML to be parsed
266
+
267
+ The optional encoding parameter must be a string that indicates
268
+ the encoding. If specified, that encoding will be used,
269
+ regardless of any BOM or later declaration (such as in a meta
270
+ element).
271
+
272
+ :arg scripting: treat noscript elements as if JavaScript was turned on
273
+
274
+ :returns: parsed tree
275
+
276
+ Example:
277
+
278
+ >>> from html5lib.html5parser import HTMLParser
279
+ >>> parser = HTMLParser()
280
+ >>> parser.parse('<html><body><p>This is a doc</p></body></html>')
281
+ <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>
282
+
283
+ """
284
+ self._parse(stream, False, None, *args, **kwargs)
285
+ return self.tree.getDocument()
286
+
287
+ def parseFragment(self, stream, *args, **kwargs):
288
+ """Parse a HTML fragment into a well-formed tree fragment
289
+
290
+ :arg container: name of the element we're setting the innerHTML
291
+ property if set to None, default to 'div'
292
+
293
+ :arg stream: a file-like object or string containing the HTML to be parsed
294
+
295
+ The optional encoding parameter must be a string that indicates
296
+ the encoding. If specified, that encoding will be used,
297
+ regardless of any BOM or later declaration (such as in a meta
298
+ element)
299
+
300
+ :arg scripting: treat noscript elements as if JavaScript was turned on
301
+
302
+ :returns: parsed tree
303
+
304
+ Example:
305
+
306
+ >>> from html5lib.html5libparser import HTMLParser
307
+ >>> parser = HTMLParser()
308
+ >>> parser.parseFragment('<b>this is a fragment</b>')
309
+ <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>
310
+
311
+ """
312
+ self._parse(stream, True, *args, **kwargs)
313
+ return self.tree.getFragment()
314
+
315
+ def parseError(self, errorcode="XXX-undefined-error", datavars=None):
316
+ # XXX The idea is to make errorcode mandatory.
317
+ if datavars is None:
318
+ datavars = {}
319
+ self.errors.append((self.tokenizer.stream.position(), errorcode, datavars))
320
+ if self.strict:
321
+ raise ParseError(E[errorcode] % datavars)
322
+
323
+ def adjustMathMLAttributes(self, token):
324
+ adjust_attributes(token, adjustMathMLAttributes)
325
+
326
+ def adjustSVGAttributes(self, token):
327
+ adjust_attributes(token, adjustSVGAttributes)
328
+
329
+ def adjustForeignAttributes(self, token):
330
+ adjust_attributes(token, adjustForeignAttributesMap)
331
+
332
+ def reparseTokenNormal(self, token):
333
+ # pylint:disable=unused-argument
334
+ self.parser.phase()
335
+
336
+ def resetInsertionMode(self):
337
+ # The name of this method is mostly historical. (It's also used in the
338
+ # specification.)
339
+ last = False
340
+ newModes = {
341
+ "select": "inSelect",
342
+ "td": "inCell",
343
+ "th": "inCell",
344
+ "tr": "inRow",
345
+ "tbody": "inTableBody",
346
+ "thead": "inTableBody",
347
+ "tfoot": "inTableBody",
348
+ "caption": "inCaption",
349
+ "colgroup": "inColumnGroup",
350
+ "table": "inTable",
351
+ "head": "inBody",
352
+ "body": "inBody",
353
+ "frameset": "inFrameset",
354
+ "html": "beforeHead"
355
+ }
356
+ for node in self.tree.openElements[::-1]:
357
+ nodeName = node.name
358
+ new_phase = None
359
+ if node == self.tree.openElements[0]:
360
+ assert self.innerHTML
361
+ last = True
362
+ nodeName = self.innerHTML
363
+ # Check for conditions that should only happen in the innerHTML
364
+ # case
365
+ if nodeName in ("select", "colgroup", "head", "html"):
366
+ assert self.innerHTML
367
+
368
+ if not last and node.namespace != self.tree.defaultNamespace:
369
+ continue
370
+
371
+ if nodeName in newModes:
372
+ new_phase = self.phases[newModes[nodeName]]
373
+ break
374
+ elif last:
375
+ new_phase = self.phases["inBody"]
376
+ break
377
+
378
+ self.phase = new_phase
379
+
380
+ def parseRCDataRawtext(self, token, contentType):
381
+ # Generic RCDATA/RAWTEXT Parsing algorithm
382
+ assert contentType in ("RAWTEXT", "RCDATA")
383
+
384
+ self.tree.insertElement(token)
385
+
386
+ if contentType == "RAWTEXT":
387
+ self.tokenizer.state = self.tokenizer.rawtextState
388
+ else:
389
+ self.tokenizer.state = self.tokenizer.rcdataState
390
+
391
+ self.originalPhase = self.phase
392
+
393
+ self.phase = self.phases["text"]
394
+
395
+
396
+ @_utils.memoize
397
+ def getPhases(debug):
398
+ def log(function):
399
+ """Logger that records which phase processes each token"""
400
+ type_names = {value: key for key, value in tokenTypes.items()}
401
+
402
+ def wrapped(self, *args, **kwargs):
403
+ if function.__name__.startswith("process") and len(args) > 0:
404
+ token = args[0]
405
+ info = {"type": type_names[token['type']]}
406
+ if token['type'] in tagTokenTypes:
407
+ info["name"] = token['name']
408
+
409
+ self.parser.log.append((self.parser.tokenizer.state.__name__,
410
+ self.parser.phase.__class__.__name__,
411
+ self.__class__.__name__,
412
+ function.__name__,
413
+ info))
414
+ return function(self, *args, **kwargs)
415
+ else:
416
+ return function(self, *args, **kwargs)
417
+ return wrapped
418
+
419
+ def getMetaclass(use_metaclass, metaclass_func):
420
+ if use_metaclass:
421
+ return method_decorator_metaclass(metaclass_func)
422
+ else:
423
+ return type
424
+
425
+ # pylint:disable=unused-argument
426
+ class Phase(with_metaclass(getMetaclass(debug, log))):
427
+ """Base class for helper object that implements each phase of processing
428
+ """
429
+ __slots__ = ("parser", "tree", "__startTagCache", "__endTagCache")
430
+
431
+ def __init__(self, parser, tree):
432
+ self.parser = parser
433
+ self.tree = tree
434
+ self.__startTagCache = {}
435
+ self.__endTagCache = {}
436
+
437
+ def processEOF(self):
438
+ raise NotImplementedError
439
+
440
+ def processComment(self, token):
441
+ # For most phases the following is correct. Where it's not it will be
442
+ # overridden.
443
+ self.tree.insertComment(token, self.tree.openElements[-1])
444
+
445
+ def processDoctype(self, token):
446
+ self.parser.parseError("unexpected-doctype")
447
+
448
+ def processCharacters(self, token):
449
+ self.tree.insertText(token["data"])
450
+
451
+ def processSpaceCharacters(self, token):
452
+ self.tree.insertText(token["data"])
453
+
454
+ def processStartTag(self, token):
455
+ # Note the caching is done here rather than BoundMethodDispatcher as doing it there
456
+ # requires a circular reference to the Phase, and this ends up with a significant
457
+ # (CPython 2.7, 3.8) GC cost when parsing many short inputs
458
+ name = token["name"]
459
+ # In Py2, using `in` is quicker in general than try/except KeyError
460
+ # In Py3, `in` is quicker when there are few cache hits (typically short inputs)
461
+ if name in self.__startTagCache:
462
+ func = self.__startTagCache[name]
463
+ else:
464
+ func = self.__startTagCache[name] = self.startTagHandler[name]
465
+ # bound the cache size in case we get loads of unknown tags
466
+ while len(self.__startTagCache) > len(self.startTagHandler) * 1.1:
467
+ # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7
468
+ self.__startTagCache.pop(next(iter(self.__startTagCache)))
469
+ return func(token)
470
+
471
+ def startTagHtml(self, token):
472
+ if not self.parser.firstStartTag and token["name"] == "html":
473
+ self.parser.parseError("non-html-root")
474
+ # XXX Need a check here to see if the first start tag token emitted is
475
+ # this token... If it's not, invoke self.parser.parseError().
476
+ for attr, value in token["data"].items():
477
+ if attr not in self.tree.openElements[0].attributes:
478
+ self.tree.openElements[0].attributes[attr] = value
479
+ self.parser.firstStartTag = False
480
+
481
+ def processEndTag(self, token):
482
+ # Note the caching is done here rather than BoundMethodDispatcher as doing it there
483
+ # requires a circular reference to the Phase, and this ends up with a significant
484
+ # (CPython 2.7, 3.8) GC cost when parsing many short inputs
485
+ name = token["name"]
486
+ # In Py2, using `in` is quicker in general than try/except KeyError
487
+ # In Py3, `in` is quicker when there are few cache hits (typically short inputs)
488
+ if name in self.__endTagCache:
489
+ func = self.__endTagCache[name]
490
+ else:
491
+ func = self.__endTagCache[name] = self.endTagHandler[name]
492
+ # bound the cache size in case we get loads of unknown tags
493
+ while len(self.__endTagCache) > len(self.endTagHandler) * 1.1:
494
+ # this makes the eviction policy random on Py < 3.7 and FIFO >= 3.7
495
+ self.__endTagCache.pop(next(iter(self.__endTagCache)))
496
+ return func(token)
497
+
498
+ class InitialPhase(Phase):
499
+ __slots__ = tuple()
500
+
501
+ def processSpaceCharacters(self, token):
502
+ pass
503
+
504
+ def processComment(self, token):
505
+ self.tree.insertComment(token, self.tree.document)
506
+
507
+ def processDoctype(self, token):
508
+ name = token["name"]
509
+ publicId = token["publicId"]
510
+ systemId = token["systemId"]
511
+ correct = token["correct"]
512
+
513
+ if (name != "html" or publicId is not None or
514
+ systemId is not None and systemId != "about:legacy-compat"):
515
+ self.parser.parseError("unknown-doctype")
516
+
517
+ if publicId is None:
518
+ publicId = ""
519
+
520
+ self.tree.insertDoctype(token)
521
+
522
+ if publicId != "":
523
+ publicId = publicId.translate(asciiUpper2Lower)
524
+
525
+ if (not correct or token["name"] != "html" or
526
+ publicId.startswith(
527
+ ("+//silmaril//dtd html pro v0r11 19970101//",
528
+ "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
529
+ "-//as//dtd html 3.0 aswedit + extensions//",
530
+ "-//ietf//dtd html 2.0 level 1//",
531
+ "-//ietf//dtd html 2.0 level 2//",
532
+ "-//ietf//dtd html 2.0 strict level 1//",
533
+ "-//ietf//dtd html 2.0 strict level 2//",
534
+ "-//ietf//dtd html 2.0 strict//",
535
+ "-//ietf//dtd html 2.0//",
536
+ "-//ietf//dtd html 2.1e//",
537
+ "-//ietf//dtd html 3.0//",
538
+ "-//ietf//dtd html 3.2 final//",
539
+ "-//ietf//dtd html 3.2//",
540
+ "-//ietf//dtd html 3//",
541
+ "-//ietf//dtd html level 0//",
542
+ "-//ietf//dtd html level 1//",
543
+ "-//ietf//dtd html level 2//",
544
+ "-//ietf//dtd html level 3//",
545
+ "-//ietf//dtd html strict level 0//",
546
+ "-//ietf//dtd html strict level 1//",
547
+ "-//ietf//dtd html strict level 2//",
548
+ "-//ietf//dtd html strict level 3//",
549
+ "-//ietf//dtd html strict//",
550
+ "-//ietf//dtd html//",
551
+ "-//metrius//dtd metrius presentational//",
552
+ "-//microsoft//dtd internet explorer 2.0 html strict//",
553
+ "-//microsoft//dtd internet explorer 2.0 html//",
554
+ "-//microsoft//dtd internet explorer 2.0 tables//",
555
+ "-//microsoft//dtd internet explorer 3.0 html strict//",
556
+ "-//microsoft//dtd internet explorer 3.0 html//",
557
+ "-//microsoft//dtd internet explorer 3.0 tables//",
558
+ "-//netscape comm. corp.//dtd html//",
559
+ "-//netscape comm. corp.//dtd strict html//",
560
+ "-//o'reilly and associates//dtd html 2.0//",
561
+ "-//o'reilly and associates//dtd html extended 1.0//",
562
+ "-//o'reilly and associates//dtd html extended relaxed 1.0//",
563
+ "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
564
+ "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
565
+ "-//spyglass//dtd html 2.0 extended//",
566
+ "-//sq//dtd html 2.0 hotmetal + extensions//",
567
+ "-//sun microsystems corp.//dtd hotjava html//",
568
+ "-//sun microsystems corp.//dtd hotjava strict html//",
569
+ "-//w3c//dtd html 3 1995-03-24//",
570
+ "-//w3c//dtd html 3.2 draft//",
571
+ "-//w3c//dtd html 3.2 final//",
572
+ "-//w3c//dtd html 3.2//",
573
+ "-//w3c//dtd html 3.2s draft//",
574
+ "-//w3c//dtd html 4.0 frameset//",
575
+ "-//w3c//dtd html 4.0 transitional//",
576
+ "-//w3c//dtd html experimental 19960712//",
577
+ "-//w3c//dtd html experimental 970421//",
578
+ "-//w3c//dtd w3 html//",
579
+ "-//w3o//dtd w3 html 3.0//",
580
+ "-//webtechs//dtd mozilla html 2.0//",
581
+ "-//webtechs//dtd mozilla html//")) or
582
+ publicId in ("-//w3o//dtd w3 html strict 3.0//en//",
583
+ "-/w3c/dtd html 4.0 transitional/en",
584
+ "html") or
585
+ publicId.startswith(
586
+ ("-//w3c//dtd html 4.01 frameset//",
587
+ "-//w3c//dtd html 4.01 transitional//")) and
588
+ systemId is None or
589
+ systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"):
590
+ self.parser.compatMode = "quirks"
591
+ elif (publicId.startswith(
592
+ ("-//w3c//dtd xhtml 1.0 frameset//",
593
+ "-//w3c//dtd xhtml 1.0 transitional//")) or
594
+ publicId.startswith(
595
+ ("-//w3c//dtd html 4.01 frameset//",
596
+ "-//w3c//dtd html 4.01 transitional//")) and
597
+ systemId is not None):
598
+ self.parser.compatMode = "limited quirks"
599
+
600
+ self.parser.phase = self.parser.phases["beforeHtml"]
601
+
602
+ def anythingElse(self):
603
+ self.parser.compatMode = "quirks"
604
+ self.parser.phase = self.parser.phases["beforeHtml"]
605
+
606
+ def processCharacters(self, token):
607
+ self.parser.parseError("expected-doctype-but-got-chars")
608
+ self.anythingElse()
609
+ return token
610
+
611
+ def processStartTag(self, token):
612
+ self.parser.parseError("expected-doctype-but-got-start-tag",
613
+ {"name": token["name"]})
614
+ self.anythingElse()
615
+ return token
616
+
617
+ def processEndTag(self, token):
618
+ self.parser.parseError("expected-doctype-but-got-end-tag",
619
+ {"name": token["name"]})
620
+ self.anythingElse()
621
+ return token
622
+
623
+ def processEOF(self):
624
+ self.parser.parseError("expected-doctype-but-got-eof")
625
+ self.anythingElse()
626
+ return True
627
+
628
+ class BeforeHtmlPhase(Phase):
629
+ __slots__ = tuple()
630
+
631
+ # helper methods
632
+ def insertHtmlElement(self):
633
+ self.tree.insertRoot(impliedTagToken("html", "StartTag"))
634
+ self.parser.phase = self.parser.phases["beforeHead"]
635
+
636
+ # other
637
+ def processEOF(self):
638
+ self.insertHtmlElement()
639
+ return True
640
+
641
+ def processComment(self, token):
642
+ self.tree.insertComment(token, self.tree.document)
643
+
644
+ def processSpaceCharacters(self, token):
645
+ pass
646
+
647
+ def processCharacters(self, token):
648
+ self.insertHtmlElement()
649
+ return token
650
+
651
+ def processStartTag(self, token):
652
+ if token["name"] == "html":
653
+ self.parser.firstStartTag = True
654
+ self.insertHtmlElement()
655
+ return token
656
+
657
+ def processEndTag(self, token):
658
+ if token["name"] not in ("head", "body", "html", "br"):
659
+ self.parser.parseError("unexpected-end-tag-before-html",
660
+ {"name": token["name"]})
661
+ else:
662
+ self.insertHtmlElement()
663
+ return token
664
+
665
+ class BeforeHeadPhase(Phase):
666
+ __slots__ = tuple()
667
+
668
+ def processEOF(self):
669
+ self.startTagHead(impliedTagToken("head", "StartTag"))
670
+ return True
671
+
672
+ def processSpaceCharacters(self, token):
673
+ pass
674
+
675
+ def processCharacters(self, token):
676
+ self.startTagHead(impliedTagToken("head", "StartTag"))
677
+ return token
678
+
679
+ def startTagHtml(self, token):
680
+ return self.parser.phases["inBody"].processStartTag(token)
681
+
682
+ def startTagHead(self, token):
683
+ self.tree.insertElement(token)
684
+ self.tree.headPointer = self.tree.openElements[-1]
685
+ self.parser.phase = self.parser.phases["inHead"]
686
+
687
+ def startTagOther(self, token):
688
+ self.startTagHead(impliedTagToken("head", "StartTag"))
689
+ return token
690
+
691
+ def endTagImplyHead(self, token):
692
+ self.startTagHead(impliedTagToken("head", "StartTag"))
693
+ return token
694
+
695
+ def endTagOther(self, token):
696
+ self.parser.parseError("end-tag-after-implied-root",
697
+ {"name": token["name"]})
698
+
699
+ startTagHandler = _utils.MethodDispatcher([
700
+ ("html", startTagHtml),
701
+ ("head", startTagHead)
702
+ ])
703
+ startTagHandler.default = startTagOther
704
+
705
+ endTagHandler = _utils.MethodDispatcher([
706
+ (("head", "body", "html", "br"), endTagImplyHead)
707
+ ])
708
+ endTagHandler.default = endTagOther
709
+
710
+ class InHeadPhase(Phase):
711
+ __slots__ = tuple()
712
+
713
+ # the real thing
714
+ def processEOF(self):
715
+ self.anythingElse()
716
+ return True
717
+
718
+ def processCharacters(self, token):
719
+ self.anythingElse()
720
+ return token
721
+
722
+ def startTagHtml(self, token):
723
+ return self.parser.phases["inBody"].processStartTag(token)
724
+
725
+ def startTagHead(self, token):
726
+ self.parser.parseError("two-heads-are-not-better-than-one")
727
+
728
+ def startTagBaseLinkCommand(self, token):
729
+ self.tree.insertElement(token)
730
+ self.tree.openElements.pop()
731
+ token["selfClosingAcknowledged"] = True
732
+
733
+ def startTagMeta(self, token):
734
+ self.tree.insertElement(token)
735
+ self.tree.openElements.pop()
736
+ token["selfClosingAcknowledged"] = True
737
+
738
+ attributes = token["data"]
739
+ if self.parser.tokenizer.stream.charEncoding[1] == "tentative":
740
+ if "charset" in attributes:
741
+ self.parser.tokenizer.stream.changeEncoding(attributes["charset"])
742
+ elif ("content" in attributes and
743
+ "http-equiv" in attributes and
744
+ attributes["http-equiv"].lower() == "content-type"):
745
+ # Encoding it as UTF-8 here is a hack, as really we should pass
746
+ # the abstract Unicode string, and just use the
747
+ # ContentAttrParser on that, but using UTF-8 allows all chars
748
+ # to be encoded and as a ASCII-superset works.
749
+ data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8"))
750
+ parser = _inputstream.ContentAttrParser(data)
751
+ codec = parser.parse()
752
+ self.parser.tokenizer.stream.changeEncoding(codec)
753
+
754
+ def startTagTitle(self, token):
755
+ self.parser.parseRCDataRawtext(token, "RCDATA")
756
+
757
+ def startTagNoFramesStyle(self, token):
758
+ # Need to decide whether to implement the scripting-disabled case
759
+ self.parser.parseRCDataRawtext(token, "RAWTEXT")
760
+
761
+ def startTagNoscript(self, token):
762
+ if self.parser.scripting:
763
+ self.parser.parseRCDataRawtext(token, "RAWTEXT")
764
+ else:
765
+ self.tree.insertElement(token)
766
+ self.parser.phase = self.parser.phases["inHeadNoscript"]
767
+
768
+ def startTagScript(self, token):
769
+ self.tree.insertElement(token)
770
+ self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState
771
+ self.parser.originalPhase = self.parser.phase
772
+ self.parser.phase = self.parser.phases["text"]
773
+
774
+ def startTagOther(self, token):
775
+ self.anythingElse()
776
+ return token
777
+
778
+ def endTagHead(self, token):
779
+ node = self.parser.tree.openElements.pop()
780
+ assert node.name == "head", "Expected head got %s" % node.name
781
+ self.parser.phase = self.parser.phases["afterHead"]
782
+
783
+ def endTagHtmlBodyBr(self, token):
784
+ self.anythingElse()
785
+ return token
786
+
787
+ def endTagOther(self, token):
788
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
789
+
790
+ def anythingElse(self):
791
+ self.endTagHead(impliedTagToken("head"))
792
+
793
+ startTagHandler = _utils.MethodDispatcher([
794
+ ("html", startTagHtml),
795
+ ("title", startTagTitle),
796
+ (("noframes", "style"), startTagNoFramesStyle),
797
+ ("noscript", startTagNoscript),
798
+ ("script", startTagScript),
799
+ (("base", "basefont", "bgsound", "command", "link"),
800
+ startTagBaseLinkCommand),
801
+ ("meta", startTagMeta),
802
+ ("head", startTagHead)
803
+ ])
804
+ startTagHandler.default = startTagOther
805
+
806
+ endTagHandler = _utils.MethodDispatcher([
807
+ ("head", endTagHead),
808
+ (("br", "html", "body"), endTagHtmlBodyBr)
809
+ ])
810
+ endTagHandler.default = endTagOther
811
+
812
+ class InHeadNoscriptPhase(Phase):
813
+ __slots__ = tuple()
814
+
815
+ def processEOF(self):
816
+ self.parser.parseError("eof-in-head-noscript")
817
+ self.anythingElse()
818
+ return True
819
+
820
+ def processComment(self, token):
821
+ return self.parser.phases["inHead"].processComment(token)
822
+
823
+ def processCharacters(self, token):
824
+ self.parser.parseError("char-in-head-noscript")
825
+ self.anythingElse()
826
+ return token
827
+
828
+ def processSpaceCharacters(self, token):
829
+ return self.parser.phases["inHead"].processSpaceCharacters(token)
830
+
831
+ def startTagHtml(self, token):
832
+ return self.parser.phases["inBody"].processStartTag(token)
833
+
834
+ def startTagBaseLinkCommand(self, token):
835
+ return self.parser.phases["inHead"].processStartTag(token)
836
+
837
+ def startTagHeadNoscript(self, token):
838
+ self.parser.parseError("unexpected-start-tag", {"name": token["name"]})
839
+
840
+ def startTagOther(self, token):
841
+ self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]})
842
+ self.anythingElse()
843
+ return token
844
+
845
+ def endTagNoscript(self, token):
846
+ node = self.parser.tree.openElements.pop()
847
+ assert node.name == "noscript", "Expected noscript got %s" % node.name
848
+ self.parser.phase = self.parser.phases["inHead"]
849
+
850
+ def endTagBr(self, token):
851
+ self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]})
852
+ self.anythingElse()
853
+ return token
854
+
855
+ def endTagOther(self, token):
856
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
857
+
858
+ def anythingElse(self):
859
+ # Caller must raise parse error first!
860
+ self.endTagNoscript(impliedTagToken("noscript"))
861
+
862
+ startTagHandler = _utils.MethodDispatcher([
863
+ ("html", startTagHtml),
864
+ (("basefont", "bgsound", "link", "meta", "noframes", "style"), startTagBaseLinkCommand),
865
+ (("head", "noscript"), startTagHeadNoscript),
866
+ ])
867
+ startTagHandler.default = startTagOther
868
+
869
+ endTagHandler = _utils.MethodDispatcher([
870
+ ("noscript", endTagNoscript),
871
+ ("br", endTagBr),
872
+ ])
873
+ endTagHandler.default = endTagOther
874
+
875
+ class AfterHeadPhase(Phase):
876
+ __slots__ = tuple()
877
+
878
+ def processEOF(self):
879
+ self.anythingElse()
880
+ return True
881
+
882
+ def processCharacters(self, token):
883
+ self.anythingElse()
884
+ return token
885
+
886
+ def startTagHtml(self, token):
887
+ return self.parser.phases["inBody"].processStartTag(token)
888
+
889
+ def startTagBody(self, token):
890
+ self.parser.framesetOK = False
891
+ self.tree.insertElement(token)
892
+ self.parser.phase = self.parser.phases["inBody"]
893
+
894
+ def startTagFrameset(self, token):
895
+ self.tree.insertElement(token)
896
+ self.parser.phase = self.parser.phases["inFrameset"]
897
+
898
+ def startTagFromHead(self, token):
899
+ self.parser.parseError("unexpected-start-tag-out-of-my-head",
900
+ {"name": token["name"]})
901
+ self.tree.openElements.append(self.tree.headPointer)
902
+ self.parser.phases["inHead"].processStartTag(token)
903
+ for node in self.tree.openElements[::-1]:
904
+ if node.name == "head":
905
+ self.tree.openElements.remove(node)
906
+ break
907
+
908
+ def startTagHead(self, token):
909
+ self.parser.parseError("unexpected-start-tag", {"name": token["name"]})
910
+
911
+ def startTagOther(self, token):
912
+ self.anythingElse()
913
+ return token
914
+
915
+ def endTagHtmlBodyBr(self, token):
916
+ self.anythingElse()
917
+ return token
918
+
919
+ def endTagOther(self, token):
920
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
921
+
922
+ def anythingElse(self):
923
+ self.tree.insertElement(impliedTagToken("body", "StartTag"))
924
+ self.parser.phase = self.parser.phases["inBody"]
925
+ self.parser.framesetOK = True
926
+
927
+ startTagHandler = _utils.MethodDispatcher([
928
+ ("html", startTagHtml),
929
+ ("body", startTagBody),
930
+ ("frameset", startTagFrameset),
931
+ (("base", "basefont", "bgsound", "link", "meta", "noframes", "script",
932
+ "style", "title"),
933
+ startTagFromHead),
934
+ ("head", startTagHead)
935
+ ])
936
+ startTagHandler.default = startTagOther
937
+ endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"),
938
+ endTagHtmlBodyBr)])
939
+ endTagHandler.default = endTagOther
940
+
941
+ class InBodyPhase(Phase):
942
+ # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody
943
+ # the really-really-really-very crazy mode
944
+ __slots__ = ("processSpaceCharacters",)
945
+
946
+ def __init__(self, *args, **kwargs):
947
+ super(InBodyPhase, self).__init__(*args, **kwargs)
948
+ # Set this to the default handler
949
+ self.processSpaceCharacters = self.processSpaceCharactersNonPre
950
+
951
+ def isMatchingFormattingElement(self, node1, node2):
952
+ return (node1.name == node2.name and
953
+ node1.namespace == node2.namespace and
954
+ node1.attributes == node2.attributes)
955
+
956
+ # helper
957
+ def addFormattingElement(self, token):
958
+ self.tree.insertElement(token)
959
+ element = self.tree.openElements[-1]
960
+
961
+ matchingElements = []
962
+ for node in self.tree.activeFormattingElements[::-1]:
963
+ if node is Marker:
964
+ break
965
+ elif self.isMatchingFormattingElement(node, element):
966
+ matchingElements.append(node)
967
+
968
+ assert len(matchingElements) <= 3
969
+ if len(matchingElements) == 3:
970
+ self.tree.activeFormattingElements.remove(matchingElements[-1])
971
+ self.tree.activeFormattingElements.append(element)
972
+
973
+ # the real deal
974
+ def processEOF(self):
975
+ allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td",
976
+ "tfoot", "th", "thead", "tr", "body",
977
+ "html"))
978
+ for node in self.tree.openElements[::-1]:
979
+ if node.name not in allowed_elements:
980
+ self.parser.parseError("expected-closing-tag-but-got-eof")
981
+ break
982
+ # Stop parsing
983
+
984
+ def processSpaceCharactersDropNewline(self, token):
985
+ # Sometimes (start of <pre>, <listing>, and <textarea> blocks) we
986
+ # want to drop leading newlines
987
+ data = token["data"]
988
+ self.processSpaceCharacters = self.processSpaceCharactersNonPre
989
+ if (data.startswith("\n") and
990
+ self.tree.openElements[-1].name in ("pre", "listing", "textarea") and
991
+ not self.tree.openElements[-1].hasContent()):
992
+ data = data[1:]
993
+ if data:
994
+ self.tree.reconstructActiveFormattingElements()
995
+ self.tree.insertText(data)
996
+
997
+ def processCharacters(self, token):
998
+ if token["data"] == "\u0000":
999
+ # The tokenizer should always emit null on its own
1000
+ return
1001
+ self.tree.reconstructActiveFormattingElements()
1002
+ self.tree.insertText(token["data"])
1003
+ # This must be bad for performance
1004
+ if (self.parser.framesetOK and
1005
+ any([char not in spaceCharacters
1006
+ for char in token["data"]])):
1007
+ self.parser.framesetOK = False
1008
+
1009
+ def processSpaceCharactersNonPre(self, token):
1010
+ self.tree.reconstructActiveFormattingElements()
1011
+ self.tree.insertText(token["data"])
1012
+
1013
+ def startTagProcessInHead(self, token):
1014
+ return self.parser.phases["inHead"].processStartTag(token)
1015
+
1016
+ def startTagBody(self, token):
1017
+ self.parser.parseError("unexpected-start-tag", {"name": "body"})
1018
+ if (len(self.tree.openElements) == 1 or
1019
+ self.tree.openElements[1].name != "body"):
1020
+ assert self.parser.innerHTML
1021
+ else:
1022
+ self.parser.framesetOK = False
1023
+ for attr, value in token["data"].items():
1024
+ if attr not in self.tree.openElements[1].attributes:
1025
+ self.tree.openElements[1].attributes[attr] = value
1026
+
1027
+ def startTagFrameset(self, token):
1028
+ self.parser.parseError("unexpected-start-tag", {"name": "frameset"})
1029
+ if (len(self.tree.openElements) == 1 or self.tree.openElements[1].name != "body"):
1030
+ assert self.parser.innerHTML
1031
+ elif not self.parser.framesetOK:
1032
+ pass
1033
+ else:
1034
+ if self.tree.openElements[1].parent:
1035
+ self.tree.openElements[1].parent.removeChild(self.tree.openElements[1])
1036
+ while self.tree.openElements[-1].name != "html":
1037
+ self.tree.openElements.pop()
1038
+ self.tree.insertElement(token)
1039
+ self.parser.phase = self.parser.phases["inFrameset"]
1040
+
1041
+ def startTagCloseP(self, token):
1042
+ if self.tree.elementInScope("p", variant="button"):
1043
+ self.endTagP(impliedTagToken("p"))
1044
+ self.tree.insertElement(token)
1045
+
1046
+ def startTagPreListing(self, token):
1047
+ if self.tree.elementInScope("p", variant="button"):
1048
+ self.endTagP(impliedTagToken("p"))
1049
+ self.tree.insertElement(token)
1050
+ self.parser.framesetOK = False
1051
+ self.processSpaceCharacters = self.processSpaceCharactersDropNewline
1052
+
1053
+ def startTagForm(self, token):
1054
+ if self.tree.formPointer:
1055
+ self.parser.parseError("unexpected-start-tag", {"name": "form"})
1056
+ else:
1057
+ if self.tree.elementInScope("p", variant="button"):
1058
+ self.endTagP(impliedTagToken("p"))
1059
+ self.tree.insertElement(token)
1060
+ self.tree.formPointer = self.tree.openElements[-1]
1061
+
1062
+ def startTagListItem(self, token):
1063
+ self.parser.framesetOK = False
1064
+
1065
+ stopNamesMap = {"li": ["li"],
1066
+ "dt": ["dt", "dd"],
1067
+ "dd": ["dt", "dd"]}
1068
+ stopNames = stopNamesMap[token["name"]]
1069
+ for node in reversed(self.tree.openElements):
1070
+ if node.name in stopNames:
1071
+ self.parser.phase.processEndTag(
1072
+ impliedTagToken(node.name, "EndTag"))
1073
+ break
1074
+ if (node.nameTuple in specialElements and
1075
+ node.name not in ("address", "div", "p")):
1076
+ break
1077
+
1078
+ if self.tree.elementInScope("p", variant="button"):
1079
+ self.parser.phase.processEndTag(
1080
+ impliedTagToken("p", "EndTag"))
1081
+
1082
+ self.tree.insertElement(token)
1083
+
1084
+ def startTagPlaintext(self, token):
1085
+ if self.tree.elementInScope("p", variant="button"):
1086
+ self.endTagP(impliedTagToken("p"))
1087
+ self.tree.insertElement(token)
1088
+ self.parser.tokenizer.state = self.parser.tokenizer.plaintextState
1089
+
1090
+ def startTagHeading(self, token):
1091
+ if self.tree.elementInScope("p", variant="button"):
1092
+ self.endTagP(impliedTagToken("p"))
1093
+ if self.tree.openElements[-1].name in headingElements:
1094
+ self.parser.parseError("unexpected-start-tag", {"name": token["name"]})
1095
+ self.tree.openElements.pop()
1096
+ self.tree.insertElement(token)
1097
+
1098
+ def startTagA(self, token):
1099
+ afeAElement = self.tree.elementInActiveFormattingElements("a")
1100
+ if afeAElement:
1101
+ self.parser.parseError("unexpected-start-tag-implies-end-tag",
1102
+ {"startName": "a", "endName": "a"})
1103
+ self.endTagFormatting(impliedTagToken("a"))
1104
+ if afeAElement in self.tree.openElements:
1105
+ self.tree.openElements.remove(afeAElement)
1106
+ if afeAElement in self.tree.activeFormattingElements:
1107
+ self.tree.activeFormattingElements.remove(afeAElement)
1108
+ self.tree.reconstructActiveFormattingElements()
1109
+ self.addFormattingElement(token)
1110
+
1111
+ def startTagFormatting(self, token):
1112
+ self.tree.reconstructActiveFormattingElements()
1113
+ self.addFormattingElement(token)
1114
+
1115
+ def startTagNobr(self, token):
1116
+ self.tree.reconstructActiveFormattingElements()
1117
+ if self.tree.elementInScope("nobr"):
1118
+ self.parser.parseError("unexpected-start-tag-implies-end-tag",
1119
+ {"startName": "nobr", "endName": "nobr"})
1120
+ self.processEndTag(impliedTagToken("nobr"))
1121
+ # XXX Need tests that trigger the following
1122
+ self.tree.reconstructActiveFormattingElements()
1123
+ self.addFormattingElement(token)
1124
+
1125
+ def startTagButton(self, token):
1126
+ if self.tree.elementInScope("button"):
1127
+ self.parser.parseError("unexpected-start-tag-implies-end-tag",
1128
+ {"startName": "button", "endName": "button"})
1129
+ self.processEndTag(impliedTagToken("button"))
1130
+ return token
1131
+ else:
1132
+ self.tree.reconstructActiveFormattingElements()
1133
+ self.tree.insertElement(token)
1134
+ self.parser.framesetOK = False
1135
+
1136
+ def startTagAppletMarqueeObject(self, token):
1137
+ self.tree.reconstructActiveFormattingElements()
1138
+ self.tree.insertElement(token)
1139
+ self.tree.activeFormattingElements.append(Marker)
1140
+ self.parser.framesetOK = False
1141
+
1142
+ def startTagXmp(self, token):
1143
+ if self.tree.elementInScope("p", variant="button"):
1144
+ self.endTagP(impliedTagToken("p"))
1145
+ self.tree.reconstructActiveFormattingElements()
1146
+ self.parser.framesetOK = False
1147
+ self.parser.parseRCDataRawtext(token, "RAWTEXT")
1148
+
1149
+ def startTagTable(self, token):
1150
+ if self.parser.compatMode != "quirks":
1151
+ if self.tree.elementInScope("p", variant="button"):
1152
+ self.processEndTag(impliedTagToken("p"))
1153
+ self.tree.insertElement(token)
1154
+ self.parser.framesetOK = False
1155
+ self.parser.phase = self.parser.phases["inTable"]
1156
+
1157
+ def startTagVoidFormatting(self, token):
1158
+ self.tree.reconstructActiveFormattingElements()
1159
+ self.tree.insertElement(token)
1160
+ self.tree.openElements.pop()
1161
+ token["selfClosingAcknowledged"] = True
1162
+ self.parser.framesetOK = False
1163
+
1164
+ def startTagInput(self, token):
1165
+ framesetOK = self.parser.framesetOK
1166
+ self.startTagVoidFormatting(token)
1167
+ if ("type" in token["data"] and
1168
+ token["data"]["type"].translate(asciiUpper2Lower) == "hidden"):
1169
+ # input type=hidden doesn't change framesetOK
1170
+ self.parser.framesetOK = framesetOK
1171
+
1172
+ def startTagParamSource(self, token):
1173
+ self.tree.insertElement(token)
1174
+ self.tree.openElements.pop()
1175
+ token["selfClosingAcknowledged"] = True
1176
+
1177
+ def startTagHr(self, token):
1178
+ if self.tree.elementInScope("p", variant="button"):
1179
+ self.endTagP(impliedTagToken("p"))
1180
+ self.tree.insertElement(token)
1181
+ self.tree.openElements.pop()
1182
+ token["selfClosingAcknowledged"] = True
1183
+ self.parser.framesetOK = False
1184
+
1185
+ def startTagImage(self, token):
1186
+ # No really...
1187
+ self.parser.parseError("unexpected-start-tag-treated-as",
1188
+ {"originalName": "image", "newName": "img"})
1189
+ self.processStartTag(impliedTagToken("img", "StartTag",
1190
+ attributes=token["data"],
1191
+ selfClosing=token["selfClosing"]))
1192
+
1193
+ def startTagIsIndex(self, token):
1194
+ self.parser.parseError("deprecated-tag", {"name": "isindex"})
1195
+ if self.tree.formPointer:
1196
+ return
1197
+ form_attrs = {}
1198
+ if "action" in token["data"]:
1199
+ form_attrs["action"] = token["data"]["action"]
1200
+ self.processStartTag(impliedTagToken("form", "StartTag",
1201
+ attributes=form_attrs))
1202
+ self.processStartTag(impliedTagToken("hr", "StartTag"))
1203
+ self.processStartTag(impliedTagToken("label", "StartTag"))
1204
+ # XXX Localization ...
1205
+ if "prompt" in token["data"]:
1206
+ prompt = token["data"]["prompt"]
1207
+ else:
1208
+ prompt = "This is a searchable index. Enter search keywords: "
1209
+ self.processCharacters(
1210
+ {"type": tokenTypes["Characters"], "data": prompt})
1211
+ attributes = token["data"].copy()
1212
+ if "action" in attributes:
1213
+ del attributes["action"]
1214
+ if "prompt" in attributes:
1215
+ del attributes["prompt"]
1216
+ attributes["name"] = "isindex"
1217
+ self.processStartTag(impliedTagToken("input", "StartTag",
1218
+ attributes=attributes,
1219
+ selfClosing=token["selfClosing"]))
1220
+ self.processEndTag(impliedTagToken("label"))
1221
+ self.processStartTag(impliedTagToken("hr", "StartTag"))
1222
+ self.processEndTag(impliedTagToken("form"))
1223
+
1224
+ def startTagTextarea(self, token):
1225
+ self.tree.insertElement(token)
1226
+ self.parser.tokenizer.state = self.parser.tokenizer.rcdataState
1227
+ self.processSpaceCharacters = self.processSpaceCharactersDropNewline
1228
+ self.parser.framesetOK = False
1229
+
1230
+ def startTagIFrame(self, token):
1231
+ self.parser.framesetOK = False
1232
+ self.startTagRawtext(token)
1233
+
1234
+ def startTagNoscript(self, token):
1235
+ if self.parser.scripting:
1236
+ self.startTagRawtext(token)
1237
+ else:
1238
+ self.startTagOther(token)
1239
+
1240
+ def startTagRawtext(self, token):
1241
+ """iframe, noembed noframes, noscript(if scripting enabled)"""
1242
+ self.parser.parseRCDataRawtext(token, "RAWTEXT")
1243
+
1244
+ def startTagOpt(self, token):
1245
+ if self.tree.openElements[-1].name == "option":
1246
+ self.parser.phase.processEndTag(impliedTagToken("option"))
1247
+ self.tree.reconstructActiveFormattingElements()
1248
+ self.parser.tree.insertElement(token)
1249
+
1250
+ def startTagSelect(self, token):
1251
+ self.tree.reconstructActiveFormattingElements()
1252
+ self.tree.insertElement(token)
1253
+ self.parser.framesetOK = False
1254
+ if self.parser.phase in (self.parser.phases["inTable"],
1255
+ self.parser.phases["inCaption"],
1256
+ self.parser.phases["inColumnGroup"],
1257
+ self.parser.phases["inTableBody"],
1258
+ self.parser.phases["inRow"],
1259
+ self.parser.phases["inCell"]):
1260
+ self.parser.phase = self.parser.phases["inSelectInTable"]
1261
+ else:
1262
+ self.parser.phase = self.parser.phases["inSelect"]
1263
+
1264
+ def startTagRpRt(self, token):
1265
+ if self.tree.elementInScope("ruby"):
1266
+ self.tree.generateImpliedEndTags()
1267
+ if self.tree.openElements[-1].name != "ruby":
1268
+ self.parser.parseError()
1269
+ self.tree.insertElement(token)
1270
+
1271
+ def startTagMath(self, token):
1272
+ self.tree.reconstructActiveFormattingElements()
1273
+ self.parser.adjustMathMLAttributes(token)
1274
+ self.parser.adjustForeignAttributes(token)
1275
+ token["namespace"] = namespaces["mathml"]
1276
+ self.tree.insertElement(token)
1277
+ # Need to get the parse error right for the case where the token
1278
+ # has a namespace not equal to the xmlns attribute
1279
+ if token["selfClosing"]:
1280
+ self.tree.openElements.pop()
1281
+ token["selfClosingAcknowledged"] = True
1282
+
1283
+ def startTagSvg(self, token):
1284
+ self.tree.reconstructActiveFormattingElements()
1285
+ self.parser.adjustSVGAttributes(token)
1286
+ self.parser.adjustForeignAttributes(token)
1287
+ token["namespace"] = namespaces["svg"]
1288
+ self.tree.insertElement(token)
1289
+ # Need to get the parse error right for the case where the token
1290
+ # has a namespace not equal to the xmlns attribute
1291
+ if token["selfClosing"]:
1292
+ self.tree.openElements.pop()
1293
+ token["selfClosingAcknowledged"] = True
1294
+
1295
+ def startTagMisplaced(self, token):
1296
+ """ Elements that should be children of other elements that have a
1297
+ different insertion mode; here they are ignored
1298
+ "caption", "col", "colgroup", "frame", "frameset", "head",
1299
+ "option", "optgroup", "tbody", "td", "tfoot", "th", "thead",
1300
+ "tr", "noscript"
1301
+ """
1302
+ self.parser.parseError("unexpected-start-tag-ignored", {"name": token["name"]})
1303
+
1304
+ def startTagOther(self, token):
1305
+ self.tree.reconstructActiveFormattingElements()
1306
+ self.tree.insertElement(token)
1307
+
1308
+ def endTagP(self, token):
1309
+ if not self.tree.elementInScope("p", variant="button"):
1310
+ self.startTagCloseP(impliedTagToken("p", "StartTag"))
1311
+ self.parser.parseError("unexpected-end-tag", {"name": "p"})
1312
+ self.endTagP(impliedTagToken("p", "EndTag"))
1313
+ else:
1314
+ self.tree.generateImpliedEndTags("p")
1315
+ if self.tree.openElements[-1].name != "p":
1316
+ self.parser.parseError("unexpected-end-tag", {"name": "p"})
1317
+ node = self.tree.openElements.pop()
1318
+ while node.name != "p":
1319
+ node = self.tree.openElements.pop()
1320
+
1321
+ def endTagBody(self, token):
1322
+ if not self.tree.elementInScope("body"):
1323
+ self.parser.parseError()
1324
+ return
1325
+ elif self.tree.openElements[-1].name != "body":
1326
+ for node in self.tree.openElements[2:]:
1327
+ if node.name not in frozenset(("dd", "dt", "li", "optgroup",
1328
+ "option", "p", "rp", "rt",
1329
+ "tbody", "td", "tfoot",
1330
+ "th", "thead", "tr", "body",
1331
+ "html")):
1332
+ # Not sure this is the correct name for the parse error
1333
+ self.parser.parseError(
1334
+ "expected-one-end-tag-but-got-another",
1335
+ {"gotName": "body", "expectedName": node.name})
1336
+ break
1337
+ self.parser.phase = self.parser.phases["afterBody"]
1338
+
1339
+ def endTagHtml(self, token):
1340
+ # We repeat the test for the body end tag token being ignored here
1341
+ if self.tree.elementInScope("body"):
1342
+ self.endTagBody(impliedTagToken("body"))
1343
+ return token
1344
+
1345
+ def endTagBlock(self, token):
1346
+ # Put us back in the right whitespace handling mode
1347
+ if token["name"] == "pre":
1348
+ self.processSpaceCharacters = self.processSpaceCharactersNonPre
1349
+ inScope = self.tree.elementInScope(token["name"])
1350
+ if inScope:
1351
+ self.tree.generateImpliedEndTags()
1352
+ if self.tree.openElements[-1].name != token["name"]:
1353
+ self.parser.parseError("end-tag-too-early", {"name": token["name"]})
1354
+ if inScope:
1355
+ node = self.tree.openElements.pop()
1356
+ while node.name != token["name"]:
1357
+ node = self.tree.openElements.pop()
1358
+
1359
+ def endTagForm(self, token):
1360
+ node = self.tree.formPointer
1361
+ self.tree.formPointer = None
1362
+ if node is None or not self.tree.elementInScope(node):
1363
+ self.parser.parseError("unexpected-end-tag",
1364
+ {"name": "form"})
1365
+ else:
1366
+ self.tree.generateImpliedEndTags()
1367
+ if self.tree.openElements[-1] != node:
1368
+ self.parser.parseError("end-tag-too-early-ignored",
1369
+ {"name": "form"})
1370
+ self.tree.openElements.remove(node)
1371
+
1372
+ def endTagListItem(self, token):
1373
+ if token["name"] == "li":
1374
+ variant = "list"
1375
+ else:
1376
+ variant = None
1377
+ if not self.tree.elementInScope(token["name"], variant=variant):
1378
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
1379
+ else:
1380
+ self.tree.generateImpliedEndTags(exclude=token["name"])
1381
+ if self.tree.openElements[-1].name != token["name"]:
1382
+ self.parser.parseError(
1383
+ "end-tag-too-early",
1384
+ {"name": token["name"]})
1385
+ node = self.tree.openElements.pop()
1386
+ while node.name != token["name"]:
1387
+ node = self.tree.openElements.pop()
1388
+
1389
+ def endTagHeading(self, token):
1390
+ for item in headingElements:
1391
+ if self.tree.elementInScope(item):
1392
+ self.tree.generateImpliedEndTags()
1393
+ break
1394
+ if self.tree.openElements[-1].name != token["name"]:
1395
+ self.parser.parseError("end-tag-too-early", {"name": token["name"]})
1396
+
1397
+ for item in headingElements:
1398
+ if self.tree.elementInScope(item):
1399
+ item = self.tree.openElements.pop()
1400
+ while item.name not in headingElements:
1401
+ item = self.tree.openElements.pop()
1402
+ break
1403
+
1404
+ def endTagFormatting(self, token):
1405
+ """The much-feared adoption agency algorithm"""
1406
+ # http://svn.whatwg.org/webapps/complete.html#adoptionAgency revision 7867
1407
+ # XXX Better parseError messages appreciated.
1408
+
1409
+ # Step 1
1410
+ outerLoopCounter = 0
1411
+
1412
+ # Step 2
1413
+ while outerLoopCounter < 8:
1414
+
1415
+ # Step 3
1416
+ outerLoopCounter += 1
1417
+
1418
+ # Step 4:
1419
+
1420
+ # Let the formatting element be the last element in
1421
+ # the list of active formatting elements that:
1422
+ # - is between the end of the list and the last scope
1423
+ # marker in the list, if any, or the start of the list
1424
+ # otherwise, and
1425
+ # - has the same tag name as the token.
1426
+ formattingElement = self.tree.elementInActiveFormattingElements(
1427
+ token["name"])
1428
+ if (not formattingElement or
1429
+ (formattingElement in self.tree.openElements and
1430
+ not self.tree.elementInScope(formattingElement.name))):
1431
+ # If there is no such node, then abort these steps
1432
+ # and instead act as described in the "any other
1433
+ # end tag" entry below.
1434
+ self.endTagOther(token)
1435
+ return
1436
+
1437
+ # Otherwise, if there is such a node, but that node is
1438
+ # not in the stack of open elements, then this is a
1439
+ # parse error; remove the element from the list, and
1440
+ # abort these steps.
1441
+ elif formattingElement not in self.tree.openElements:
1442
+ self.parser.parseError("adoption-agency-1.2", {"name": token["name"]})
1443
+ self.tree.activeFormattingElements.remove(formattingElement)
1444
+ return
1445
+
1446
+ # Otherwise, if there is such a node, and that node is
1447
+ # also in the stack of open elements, but the element
1448
+ # is not in scope, then this is a parse error; ignore
1449
+ # the token, and abort these steps.
1450
+ elif not self.tree.elementInScope(formattingElement.name):
1451
+ self.parser.parseError("adoption-agency-4.4", {"name": token["name"]})
1452
+ return
1453
+
1454
+ # Otherwise, there is a formatting element and that
1455
+ # element is in the stack and is in scope. If the
1456
+ # element is not the current node, this is a parse
1457
+ # error. In any case, proceed with the algorithm as
1458
+ # written in the following steps.
1459
+ else:
1460
+ if formattingElement != self.tree.openElements[-1]:
1461
+ self.parser.parseError("adoption-agency-1.3", {"name": token["name"]})
1462
+
1463
+ # Step 5:
1464
+
1465
+ # Let the furthest block be the topmost node in the
1466
+ # stack of open elements that is lower in the stack
1467
+ # than the formatting element, and is an element in
1468
+ # the special category. There might not be one.
1469
+ afeIndex = self.tree.openElements.index(formattingElement)
1470
+ furthestBlock = None
1471
+ for element in self.tree.openElements[afeIndex:]:
1472
+ if element.nameTuple in specialElements:
1473
+ furthestBlock = element
1474
+ break
1475
+
1476
+ # Step 6:
1477
+
1478
+ # If there is no furthest block, then the UA must
1479
+ # first pop all the nodes from the bottom of the stack
1480
+ # of open elements, from the current node up to and
1481
+ # including the formatting element, then remove the
1482
+ # formatting element from the list of active
1483
+ # formatting elements, and finally abort these steps.
1484
+ if furthestBlock is None:
1485
+ element = self.tree.openElements.pop()
1486
+ while element != formattingElement:
1487
+ element = self.tree.openElements.pop()
1488
+ self.tree.activeFormattingElements.remove(element)
1489
+ return
1490
+
1491
+ # Step 7
1492
+ commonAncestor = self.tree.openElements[afeIndex - 1]
1493
+
1494
+ # Step 8:
1495
+ # The bookmark is supposed to help us identify where to reinsert
1496
+ # nodes in step 15. We have to ensure that we reinsert nodes after
1497
+ # the node before the active formatting element. Note the bookmark
1498
+ # can move in step 9.7
1499
+ bookmark = self.tree.activeFormattingElements.index(formattingElement)
1500
+
1501
+ # Step 9
1502
+ lastNode = node = furthestBlock
1503
+ innerLoopCounter = 0
1504
+
1505
+ index = self.tree.openElements.index(node)
1506
+ while innerLoopCounter < 3:
1507
+ innerLoopCounter += 1
1508
+ # Node is element before node in open elements
1509
+ index -= 1
1510
+ node = self.tree.openElements[index]
1511
+ if node not in self.tree.activeFormattingElements:
1512
+ self.tree.openElements.remove(node)
1513
+ continue
1514
+ # Step 9.6
1515
+ if node == formattingElement:
1516
+ break
1517
+ # Step 9.7
1518
+ if lastNode == furthestBlock:
1519
+ bookmark = self.tree.activeFormattingElements.index(node) + 1
1520
+ # Step 9.8
1521
+ clone = node.cloneNode()
1522
+ # Replace node with clone
1523
+ self.tree.activeFormattingElements[
1524
+ self.tree.activeFormattingElements.index(node)] = clone
1525
+ self.tree.openElements[
1526
+ self.tree.openElements.index(node)] = clone
1527
+ node = clone
1528
+ # Step 9.9
1529
+ # Remove lastNode from its parents, if any
1530
+ if lastNode.parent:
1531
+ lastNode.parent.removeChild(lastNode)
1532
+ node.appendChild(lastNode)
1533
+ # Step 9.10
1534
+ lastNode = node
1535
+
1536
+ # Step 10
1537
+ # Foster parent lastNode if commonAncestor is a
1538
+ # table, tbody, tfoot, thead, or tr we need to foster
1539
+ # parent the lastNode
1540
+ if lastNode.parent:
1541
+ lastNode.parent.removeChild(lastNode)
1542
+
1543
+ if commonAncestor.name in frozenset(("table", "tbody", "tfoot", "thead", "tr")):
1544
+ parent, insertBefore = self.tree.getTableMisnestedNodePosition()
1545
+ parent.insertBefore(lastNode, insertBefore)
1546
+ else:
1547
+ commonAncestor.appendChild(lastNode)
1548
+
1549
+ # Step 11
1550
+ clone = formattingElement.cloneNode()
1551
+
1552
+ # Step 12
1553
+ furthestBlock.reparentChildren(clone)
1554
+
1555
+ # Step 13
1556
+ furthestBlock.appendChild(clone)
1557
+
1558
+ # Step 14
1559
+ self.tree.activeFormattingElements.remove(formattingElement)
1560
+ self.tree.activeFormattingElements.insert(bookmark, clone)
1561
+
1562
+ # Step 15
1563
+ self.tree.openElements.remove(formattingElement)
1564
+ self.tree.openElements.insert(
1565
+ self.tree.openElements.index(furthestBlock) + 1, clone)
1566
+
1567
+ def endTagAppletMarqueeObject(self, token):
1568
+ if self.tree.elementInScope(token["name"]):
1569
+ self.tree.generateImpliedEndTags()
1570
+ if self.tree.openElements[-1].name != token["name"]:
1571
+ self.parser.parseError("end-tag-too-early", {"name": token["name"]})
1572
+
1573
+ if self.tree.elementInScope(token["name"]):
1574
+ element = self.tree.openElements.pop()
1575
+ while element.name != token["name"]:
1576
+ element = self.tree.openElements.pop()
1577
+ self.tree.clearActiveFormattingElements()
1578
+
1579
+ def endTagBr(self, token):
1580
+ self.parser.parseError("unexpected-end-tag-treated-as",
1581
+ {"originalName": "br", "newName": "br element"})
1582
+ self.tree.reconstructActiveFormattingElements()
1583
+ self.tree.insertElement(impliedTagToken("br", "StartTag"))
1584
+ self.tree.openElements.pop()
1585
+
1586
+ def endTagOther(self, token):
1587
+ for node in self.tree.openElements[::-1]:
1588
+ if node.name == token["name"]:
1589
+ self.tree.generateImpliedEndTags(exclude=token["name"])
1590
+ if self.tree.openElements[-1].name != token["name"]:
1591
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
1592
+ while self.tree.openElements.pop() != node:
1593
+ pass
1594
+ break
1595
+ else:
1596
+ if node.nameTuple in specialElements:
1597
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
1598
+ break
1599
+
1600
+ startTagHandler = _utils.MethodDispatcher([
1601
+ ("html", Phase.startTagHtml),
1602
+ (("base", "basefont", "bgsound", "command", "link", "meta",
1603
+ "script", "style", "title"),
1604
+ startTagProcessInHead),
1605
+ ("body", startTagBody),
1606
+ ("frameset", startTagFrameset),
1607
+ (("address", "article", "aside", "blockquote", "center", "details",
1608
+ "dir", "div", "dl", "fieldset", "figcaption", "figure",
1609
+ "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p",
1610
+ "section", "summary", "ul"),
1611
+ startTagCloseP),
1612
+ (headingElements, startTagHeading),
1613
+ (("pre", "listing"), startTagPreListing),
1614
+ ("form", startTagForm),
1615
+ (("li", "dd", "dt"), startTagListItem),
1616
+ ("plaintext", startTagPlaintext),
1617
+ ("a", startTagA),
1618
+ (("b", "big", "code", "em", "font", "i", "s", "small", "strike",
1619
+ "strong", "tt", "u"), startTagFormatting),
1620
+ ("nobr", startTagNobr),
1621
+ ("button", startTagButton),
1622
+ (("applet", "marquee", "object"), startTagAppletMarqueeObject),
1623
+ ("xmp", startTagXmp),
1624
+ ("table", startTagTable),
1625
+ (("area", "br", "embed", "img", "keygen", "wbr"),
1626
+ startTagVoidFormatting),
1627
+ (("param", "source", "track"), startTagParamSource),
1628
+ ("input", startTagInput),
1629
+ ("hr", startTagHr),
1630
+ ("image", startTagImage),
1631
+ ("isindex", startTagIsIndex),
1632
+ ("textarea", startTagTextarea),
1633
+ ("iframe", startTagIFrame),
1634
+ ("noscript", startTagNoscript),
1635
+ (("noembed", "noframes"), startTagRawtext),
1636
+ ("select", startTagSelect),
1637
+ (("rp", "rt"), startTagRpRt),
1638
+ (("option", "optgroup"), startTagOpt),
1639
+ (("math"), startTagMath),
1640
+ (("svg"), startTagSvg),
1641
+ (("caption", "col", "colgroup", "frame", "head",
1642
+ "tbody", "td", "tfoot", "th", "thead",
1643
+ "tr"), startTagMisplaced)
1644
+ ])
1645
+ startTagHandler.default = startTagOther
1646
+
1647
+ endTagHandler = _utils.MethodDispatcher([
1648
+ ("body", endTagBody),
1649
+ ("html", endTagHtml),
1650
+ (("address", "article", "aside", "blockquote", "button", "center",
1651
+ "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure",
1652
+ "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre",
1653
+ "section", "summary", "ul"), endTagBlock),
1654
+ ("form", endTagForm),
1655
+ ("p", endTagP),
1656
+ (("dd", "dt", "li"), endTagListItem),
1657
+ (headingElements, endTagHeading),
1658
+ (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small",
1659
+ "strike", "strong", "tt", "u"), endTagFormatting),
1660
+ (("applet", "marquee", "object"), endTagAppletMarqueeObject),
1661
+ ("br", endTagBr),
1662
+ ])
1663
+ endTagHandler.default = endTagOther
1664
+
1665
+ class TextPhase(Phase):
1666
+ __slots__ = tuple()
1667
+
1668
+ def processCharacters(self, token):
1669
+ self.tree.insertText(token["data"])
1670
+
1671
+ def processEOF(self):
1672
+ self.parser.parseError("expected-named-closing-tag-but-got-eof",
1673
+ {"name": self.tree.openElements[-1].name})
1674
+ self.tree.openElements.pop()
1675
+ self.parser.phase = self.parser.originalPhase
1676
+ return True
1677
+
1678
+ def startTagOther(self, token):
1679
+ assert False, "Tried to process start tag %s in RCDATA/RAWTEXT mode" % token['name']
1680
+
1681
+ def endTagScript(self, token):
1682
+ node = self.tree.openElements.pop()
1683
+ assert node.name == "script"
1684
+ self.parser.phase = self.parser.originalPhase
1685
+ # The rest of this method is all stuff that only happens if
1686
+ # document.write works
1687
+
1688
+ def endTagOther(self, token):
1689
+ self.tree.openElements.pop()
1690
+ self.parser.phase = self.parser.originalPhase
1691
+
1692
+ startTagHandler = _utils.MethodDispatcher([])
1693
+ startTagHandler.default = startTagOther
1694
+ endTagHandler = _utils.MethodDispatcher([
1695
+ ("script", endTagScript)])
1696
+ endTagHandler.default = endTagOther
1697
+
1698
+ class InTablePhase(Phase):
1699
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-table
1700
+ __slots__ = tuple()
1701
+
1702
+ # helper methods
1703
+ def clearStackToTableContext(self):
1704
+ # "clear the stack back to a table context"
1705
+ while self.tree.openElements[-1].name not in ("table", "html"):
1706
+ # self.parser.parseError("unexpected-implied-end-tag-in-table",
1707
+ # {"name": self.tree.openElements[-1].name})
1708
+ self.tree.openElements.pop()
1709
+ # When the current node is <html> it's an innerHTML case
1710
+
1711
+ # processing methods
1712
+ def processEOF(self):
1713
+ if self.tree.openElements[-1].name != "html":
1714
+ self.parser.parseError("eof-in-table")
1715
+ else:
1716
+ assert self.parser.innerHTML
1717
+ # Stop parsing
1718
+
1719
+ def processSpaceCharacters(self, token):
1720
+ originalPhase = self.parser.phase
1721
+ self.parser.phase = self.parser.phases["inTableText"]
1722
+ self.parser.phase.originalPhase = originalPhase
1723
+ self.parser.phase.processSpaceCharacters(token)
1724
+
1725
+ def processCharacters(self, token):
1726
+ originalPhase = self.parser.phase
1727
+ self.parser.phase = self.parser.phases["inTableText"]
1728
+ self.parser.phase.originalPhase = originalPhase
1729
+ self.parser.phase.processCharacters(token)
1730
+
1731
+ def insertText(self, token):
1732
+ # If we get here there must be at least one non-whitespace character
1733
+ # Do the table magic!
1734
+ self.tree.insertFromTable = True
1735
+ self.parser.phases["inBody"].processCharacters(token)
1736
+ self.tree.insertFromTable = False
1737
+
1738
+ def startTagCaption(self, token):
1739
+ self.clearStackToTableContext()
1740
+ self.tree.activeFormattingElements.append(Marker)
1741
+ self.tree.insertElement(token)
1742
+ self.parser.phase = self.parser.phases["inCaption"]
1743
+
1744
+ def startTagColgroup(self, token):
1745
+ self.clearStackToTableContext()
1746
+ self.tree.insertElement(token)
1747
+ self.parser.phase = self.parser.phases["inColumnGroup"]
1748
+
1749
+ def startTagCol(self, token):
1750
+ self.startTagColgroup(impliedTagToken("colgroup", "StartTag"))
1751
+ return token
1752
+
1753
+ def startTagRowGroup(self, token):
1754
+ self.clearStackToTableContext()
1755
+ self.tree.insertElement(token)
1756
+ self.parser.phase = self.parser.phases["inTableBody"]
1757
+
1758
+ def startTagImplyTbody(self, token):
1759
+ self.startTagRowGroup(impliedTagToken("tbody", "StartTag"))
1760
+ return token
1761
+
1762
+ def startTagTable(self, token):
1763
+ self.parser.parseError("unexpected-start-tag-implies-end-tag",
1764
+ {"startName": "table", "endName": "table"})
1765
+ self.parser.phase.processEndTag(impliedTagToken("table"))
1766
+ if not self.parser.innerHTML:
1767
+ return token
1768
+
1769
+ def startTagStyleScript(self, token):
1770
+ return self.parser.phases["inHead"].processStartTag(token)
1771
+
1772
+ def startTagInput(self, token):
1773
+ if ("type" in token["data"] and
1774
+ token["data"]["type"].translate(asciiUpper2Lower) == "hidden"):
1775
+ self.parser.parseError("unexpected-hidden-input-in-table")
1776
+ self.tree.insertElement(token)
1777
+ # XXX associate with form
1778
+ self.tree.openElements.pop()
1779
+ else:
1780
+ self.startTagOther(token)
1781
+
1782
+ def startTagForm(self, token):
1783
+ self.parser.parseError("unexpected-form-in-table")
1784
+ if self.tree.formPointer is None:
1785
+ self.tree.insertElement(token)
1786
+ self.tree.formPointer = self.tree.openElements[-1]
1787
+ self.tree.openElements.pop()
1788
+
1789
+ def startTagOther(self, token):
1790
+ self.parser.parseError("unexpected-start-tag-implies-table-voodoo", {"name": token["name"]})
1791
+ # Do the table magic!
1792
+ self.tree.insertFromTable = True
1793
+ self.parser.phases["inBody"].processStartTag(token)
1794
+ self.tree.insertFromTable = False
1795
+
1796
+ def endTagTable(self, token):
1797
+ if self.tree.elementInScope("table", variant="table"):
1798
+ self.tree.generateImpliedEndTags()
1799
+ if self.tree.openElements[-1].name != "table":
1800
+ self.parser.parseError("end-tag-too-early-named",
1801
+ {"gotName": "table",
1802
+ "expectedName": self.tree.openElements[-1].name})
1803
+ while self.tree.openElements[-1].name != "table":
1804
+ self.tree.openElements.pop()
1805
+ self.tree.openElements.pop()
1806
+ self.parser.resetInsertionMode()
1807
+ else:
1808
+ # innerHTML case
1809
+ assert self.parser.innerHTML
1810
+ self.parser.parseError()
1811
+
1812
+ def endTagIgnore(self, token):
1813
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
1814
+
1815
+ def endTagOther(self, token):
1816
+ self.parser.parseError("unexpected-end-tag-implies-table-voodoo", {"name": token["name"]})
1817
+ # Do the table magic!
1818
+ self.tree.insertFromTable = True
1819
+ self.parser.phases["inBody"].processEndTag(token)
1820
+ self.tree.insertFromTable = False
1821
+
1822
+ startTagHandler = _utils.MethodDispatcher([
1823
+ ("html", Phase.startTagHtml),
1824
+ ("caption", startTagCaption),
1825
+ ("colgroup", startTagColgroup),
1826
+ ("col", startTagCol),
1827
+ (("tbody", "tfoot", "thead"), startTagRowGroup),
1828
+ (("td", "th", "tr"), startTagImplyTbody),
1829
+ ("table", startTagTable),
1830
+ (("style", "script"), startTagStyleScript),
1831
+ ("input", startTagInput),
1832
+ ("form", startTagForm)
1833
+ ])
1834
+ startTagHandler.default = startTagOther
1835
+
1836
+ endTagHandler = _utils.MethodDispatcher([
1837
+ ("table", endTagTable),
1838
+ (("body", "caption", "col", "colgroup", "html", "tbody", "td",
1839
+ "tfoot", "th", "thead", "tr"), endTagIgnore)
1840
+ ])
1841
+ endTagHandler.default = endTagOther
1842
+
1843
+ class InTableTextPhase(Phase):
1844
+ __slots__ = ("originalPhase", "characterTokens")
1845
+
1846
+ def __init__(self, *args, **kwargs):
1847
+ super(InTableTextPhase, self).__init__(*args, **kwargs)
1848
+ self.originalPhase = None
1849
+ self.characterTokens = []
1850
+
1851
+ def flushCharacters(self):
1852
+ data = "".join([item["data"] for item in self.characterTokens])
1853
+ if any([item not in spaceCharacters for item in data]):
1854
+ token = {"type": tokenTypes["Characters"], "data": data}
1855
+ self.parser.phases["inTable"].insertText(token)
1856
+ elif data:
1857
+ self.tree.insertText(data)
1858
+ self.characterTokens = []
1859
+
1860
+ def processComment(self, token):
1861
+ self.flushCharacters()
1862
+ self.parser.phase = self.originalPhase
1863
+ return token
1864
+
1865
+ def processEOF(self):
1866
+ self.flushCharacters()
1867
+ self.parser.phase = self.originalPhase
1868
+ return True
1869
+
1870
+ def processCharacters(self, token):
1871
+ if token["data"] == "\u0000":
1872
+ return
1873
+ self.characterTokens.append(token)
1874
+
1875
+ def processSpaceCharacters(self, token):
1876
+ # pretty sure we should never reach here
1877
+ self.characterTokens.append(token)
1878
+ # assert False
1879
+
1880
+ def processStartTag(self, token):
1881
+ self.flushCharacters()
1882
+ self.parser.phase = self.originalPhase
1883
+ return token
1884
+
1885
+ def processEndTag(self, token):
1886
+ self.flushCharacters()
1887
+ self.parser.phase = self.originalPhase
1888
+ return token
1889
+
1890
+ class InCaptionPhase(Phase):
1891
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-caption
1892
+ __slots__ = tuple()
1893
+
1894
+ def ignoreEndTagCaption(self):
1895
+ return not self.tree.elementInScope("caption", variant="table")
1896
+
1897
+ def processEOF(self):
1898
+ self.parser.phases["inBody"].processEOF()
1899
+
1900
+ def processCharacters(self, token):
1901
+ return self.parser.phases["inBody"].processCharacters(token)
1902
+
1903
+ def startTagTableElement(self, token):
1904
+ self.parser.parseError()
1905
+ # XXX Have to duplicate logic here to find out if the tag is ignored
1906
+ ignoreEndTag = self.ignoreEndTagCaption()
1907
+ self.parser.phase.processEndTag(impliedTagToken("caption"))
1908
+ if not ignoreEndTag:
1909
+ return token
1910
+
1911
+ def startTagOther(self, token):
1912
+ return self.parser.phases["inBody"].processStartTag(token)
1913
+
1914
+ def endTagCaption(self, token):
1915
+ if not self.ignoreEndTagCaption():
1916
+ # AT this code is quite similar to endTagTable in "InTable"
1917
+ self.tree.generateImpliedEndTags()
1918
+ if self.tree.openElements[-1].name != "caption":
1919
+ self.parser.parseError("expected-one-end-tag-but-got-another",
1920
+ {"gotName": "caption",
1921
+ "expectedName": self.tree.openElements[-1].name})
1922
+ while self.tree.openElements[-1].name != "caption":
1923
+ self.tree.openElements.pop()
1924
+ self.tree.openElements.pop()
1925
+ self.tree.clearActiveFormattingElements()
1926
+ self.parser.phase = self.parser.phases["inTable"]
1927
+ else:
1928
+ # innerHTML case
1929
+ assert self.parser.innerHTML
1930
+ self.parser.parseError()
1931
+
1932
+ def endTagTable(self, token):
1933
+ self.parser.parseError()
1934
+ ignoreEndTag = self.ignoreEndTagCaption()
1935
+ self.parser.phase.processEndTag(impliedTagToken("caption"))
1936
+ if not ignoreEndTag:
1937
+ return token
1938
+
1939
+ def endTagIgnore(self, token):
1940
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
1941
+
1942
+ def endTagOther(self, token):
1943
+ return self.parser.phases["inBody"].processEndTag(token)
1944
+
1945
+ startTagHandler = _utils.MethodDispatcher([
1946
+ ("html", Phase.startTagHtml),
1947
+ (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th",
1948
+ "thead", "tr"), startTagTableElement)
1949
+ ])
1950
+ startTagHandler.default = startTagOther
1951
+
1952
+ endTagHandler = _utils.MethodDispatcher([
1953
+ ("caption", endTagCaption),
1954
+ ("table", endTagTable),
1955
+ (("body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th",
1956
+ "thead", "tr"), endTagIgnore)
1957
+ ])
1958
+ endTagHandler.default = endTagOther
1959
+
1960
+ class InColumnGroupPhase(Phase):
1961
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-column
1962
+ __slots__ = tuple()
1963
+
1964
+ def ignoreEndTagColgroup(self):
1965
+ return self.tree.openElements[-1].name == "html"
1966
+
1967
+ def processEOF(self):
1968
+ if self.tree.openElements[-1].name == "html":
1969
+ assert self.parser.innerHTML
1970
+ return
1971
+ else:
1972
+ ignoreEndTag = self.ignoreEndTagColgroup()
1973
+ self.endTagColgroup(impliedTagToken("colgroup"))
1974
+ if not ignoreEndTag:
1975
+ return True
1976
+
1977
+ def processCharacters(self, token):
1978
+ ignoreEndTag = self.ignoreEndTagColgroup()
1979
+ self.endTagColgroup(impliedTagToken("colgroup"))
1980
+ if not ignoreEndTag:
1981
+ return token
1982
+
1983
+ def startTagCol(self, token):
1984
+ self.tree.insertElement(token)
1985
+ self.tree.openElements.pop()
1986
+ token["selfClosingAcknowledged"] = True
1987
+
1988
+ def startTagOther(self, token):
1989
+ ignoreEndTag = self.ignoreEndTagColgroup()
1990
+ self.endTagColgroup(impliedTagToken("colgroup"))
1991
+ if not ignoreEndTag:
1992
+ return token
1993
+
1994
+ def endTagColgroup(self, token):
1995
+ if self.ignoreEndTagColgroup():
1996
+ # innerHTML case
1997
+ assert self.parser.innerHTML
1998
+ self.parser.parseError()
1999
+ else:
2000
+ self.tree.openElements.pop()
2001
+ self.parser.phase = self.parser.phases["inTable"]
2002
+
2003
+ def endTagCol(self, token):
2004
+ self.parser.parseError("no-end-tag", {"name": "col"})
2005
+
2006
+ def endTagOther(self, token):
2007
+ ignoreEndTag = self.ignoreEndTagColgroup()
2008
+ self.endTagColgroup(impliedTagToken("colgroup"))
2009
+ if not ignoreEndTag:
2010
+ return token
2011
+
2012
+ startTagHandler = _utils.MethodDispatcher([
2013
+ ("html", Phase.startTagHtml),
2014
+ ("col", startTagCol)
2015
+ ])
2016
+ startTagHandler.default = startTagOther
2017
+
2018
+ endTagHandler = _utils.MethodDispatcher([
2019
+ ("colgroup", endTagColgroup),
2020
+ ("col", endTagCol)
2021
+ ])
2022
+ endTagHandler.default = endTagOther
2023
+
2024
+ class InTableBodyPhase(Phase):
2025
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-table0
2026
+ __slots__ = tuple()
2027
+
2028
+ # helper methods
2029
+ def clearStackToTableBodyContext(self):
2030
+ while self.tree.openElements[-1].name not in ("tbody", "tfoot",
2031
+ "thead", "html"):
2032
+ # self.parser.parseError("unexpected-implied-end-tag-in-table",
2033
+ # {"name": self.tree.openElements[-1].name})
2034
+ self.tree.openElements.pop()
2035
+ if self.tree.openElements[-1].name == "html":
2036
+ assert self.parser.innerHTML
2037
+
2038
+ # the rest
2039
+ def processEOF(self):
2040
+ self.parser.phases["inTable"].processEOF()
2041
+
2042
+ def processSpaceCharacters(self, token):
2043
+ return self.parser.phases["inTable"].processSpaceCharacters(token)
2044
+
2045
+ def processCharacters(self, token):
2046
+ return self.parser.phases["inTable"].processCharacters(token)
2047
+
2048
+ def startTagTr(self, token):
2049
+ self.clearStackToTableBodyContext()
2050
+ self.tree.insertElement(token)
2051
+ self.parser.phase = self.parser.phases["inRow"]
2052
+
2053
+ def startTagTableCell(self, token):
2054
+ self.parser.parseError("unexpected-cell-in-table-body",
2055
+ {"name": token["name"]})
2056
+ self.startTagTr(impliedTagToken("tr", "StartTag"))
2057
+ return token
2058
+
2059
+ def startTagTableOther(self, token):
2060
+ # XXX AT Any ideas on how to share this with endTagTable?
2061
+ if (self.tree.elementInScope("tbody", variant="table") or
2062
+ self.tree.elementInScope("thead", variant="table") or
2063
+ self.tree.elementInScope("tfoot", variant="table")):
2064
+ self.clearStackToTableBodyContext()
2065
+ self.endTagTableRowGroup(
2066
+ impliedTagToken(self.tree.openElements[-1].name))
2067
+ return token
2068
+ else:
2069
+ # innerHTML case
2070
+ assert self.parser.innerHTML
2071
+ self.parser.parseError()
2072
+
2073
+ def startTagOther(self, token):
2074
+ return self.parser.phases["inTable"].processStartTag(token)
2075
+
2076
+ def endTagTableRowGroup(self, token):
2077
+ if self.tree.elementInScope(token["name"], variant="table"):
2078
+ self.clearStackToTableBodyContext()
2079
+ self.tree.openElements.pop()
2080
+ self.parser.phase = self.parser.phases["inTable"]
2081
+ else:
2082
+ self.parser.parseError("unexpected-end-tag-in-table-body",
2083
+ {"name": token["name"]})
2084
+
2085
+ def endTagTable(self, token):
2086
+ if (self.tree.elementInScope("tbody", variant="table") or
2087
+ self.tree.elementInScope("thead", variant="table") or
2088
+ self.tree.elementInScope("tfoot", variant="table")):
2089
+ self.clearStackToTableBodyContext()
2090
+ self.endTagTableRowGroup(
2091
+ impliedTagToken(self.tree.openElements[-1].name))
2092
+ return token
2093
+ else:
2094
+ # innerHTML case
2095
+ assert self.parser.innerHTML
2096
+ self.parser.parseError()
2097
+
2098
+ def endTagIgnore(self, token):
2099
+ self.parser.parseError("unexpected-end-tag-in-table-body",
2100
+ {"name": token["name"]})
2101
+
2102
+ def endTagOther(self, token):
2103
+ return self.parser.phases["inTable"].processEndTag(token)
2104
+
2105
+ startTagHandler = _utils.MethodDispatcher([
2106
+ ("html", Phase.startTagHtml),
2107
+ ("tr", startTagTr),
2108
+ (("td", "th"), startTagTableCell),
2109
+ (("caption", "col", "colgroup", "tbody", "tfoot", "thead"),
2110
+ startTagTableOther)
2111
+ ])
2112
+ startTagHandler.default = startTagOther
2113
+
2114
+ endTagHandler = _utils.MethodDispatcher([
2115
+ (("tbody", "tfoot", "thead"), endTagTableRowGroup),
2116
+ ("table", endTagTable),
2117
+ (("body", "caption", "col", "colgroup", "html", "td", "th",
2118
+ "tr"), endTagIgnore)
2119
+ ])
2120
+ endTagHandler.default = endTagOther
2121
+
2122
+ class InRowPhase(Phase):
2123
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-row
2124
+ __slots__ = tuple()
2125
+
2126
+ # helper methods (XXX unify this with other table helper methods)
2127
+ def clearStackToTableRowContext(self):
2128
+ while self.tree.openElements[-1].name not in ("tr", "html"):
2129
+ self.parser.parseError("unexpected-implied-end-tag-in-table-row",
2130
+ {"name": self.tree.openElements[-1].name})
2131
+ self.tree.openElements.pop()
2132
+
2133
+ def ignoreEndTagTr(self):
2134
+ return not self.tree.elementInScope("tr", variant="table")
2135
+
2136
+ # the rest
2137
+ def processEOF(self):
2138
+ self.parser.phases["inTable"].processEOF()
2139
+
2140
+ def processSpaceCharacters(self, token):
2141
+ return self.parser.phases["inTable"].processSpaceCharacters(token)
2142
+
2143
+ def processCharacters(self, token):
2144
+ return self.parser.phases["inTable"].processCharacters(token)
2145
+
2146
+ def startTagTableCell(self, token):
2147
+ self.clearStackToTableRowContext()
2148
+ self.tree.insertElement(token)
2149
+ self.parser.phase = self.parser.phases["inCell"]
2150
+ self.tree.activeFormattingElements.append(Marker)
2151
+
2152
+ def startTagTableOther(self, token):
2153
+ ignoreEndTag = self.ignoreEndTagTr()
2154
+ self.endTagTr(impliedTagToken("tr"))
2155
+ # XXX how are we sure it's always ignored in the innerHTML case?
2156
+ if not ignoreEndTag:
2157
+ return token
2158
+
2159
+ def startTagOther(self, token):
2160
+ return self.parser.phases["inTable"].processStartTag(token)
2161
+
2162
+ def endTagTr(self, token):
2163
+ if not self.ignoreEndTagTr():
2164
+ self.clearStackToTableRowContext()
2165
+ self.tree.openElements.pop()
2166
+ self.parser.phase = self.parser.phases["inTableBody"]
2167
+ else:
2168
+ # innerHTML case
2169
+ assert self.parser.innerHTML
2170
+ self.parser.parseError()
2171
+
2172
+ def endTagTable(self, token):
2173
+ ignoreEndTag = self.ignoreEndTagTr()
2174
+ self.endTagTr(impliedTagToken("tr"))
2175
+ # Reprocess the current tag if the tr end tag was not ignored
2176
+ # XXX how are we sure it's always ignored in the innerHTML case?
2177
+ if not ignoreEndTag:
2178
+ return token
2179
+
2180
+ def endTagTableRowGroup(self, token):
2181
+ if self.tree.elementInScope(token["name"], variant="table"):
2182
+ self.endTagTr(impliedTagToken("tr"))
2183
+ return token
2184
+ else:
2185
+ self.parser.parseError()
2186
+
2187
+ def endTagIgnore(self, token):
2188
+ self.parser.parseError("unexpected-end-tag-in-table-row",
2189
+ {"name": token["name"]})
2190
+
2191
+ def endTagOther(self, token):
2192
+ return self.parser.phases["inTable"].processEndTag(token)
2193
+
2194
+ startTagHandler = _utils.MethodDispatcher([
2195
+ ("html", Phase.startTagHtml),
2196
+ (("td", "th"), startTagTableCell),
2197
+ (("caption", "col", "colgroup", "tbody", "tfoot", "thead",
2198
+ "tr"), startTagTableOther)
2199
+ ])
2200
+ startTagHandler.default = startTagOther
2201
+
2202
+ endTagHandler = _utils.MethodDispatcher([
2203
+ ("tr", endTagTr),
2204
+ ("table", endTagTable),
2205
+ (("tbody", "tfoot", "thead"), endTagTableRowGroup),
2206
+ (("body", "caption", "col", "colgroup", "html", "td", "th"),
2207
+ endTagIgnore)
2208
+ ])
2209
+ endTagHandler.default = endTagOther
2210
+
2211
+ class InCellPhase(Phase):
2212
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-cell
2213
+ __slots__ = tuple()
2214
+
2215
+ # helper
2216
+ def closeCell(self):
2217
+ if self.tree.elementInScope("td", variant="table"):
2218
+ self.endTagTableCell(impliedTagToken("td"))
2219
+ elif self.tree.elementInScope("th", variant="table"):
2220
+ self.endTagTableCell(impliedTagToken("th"))
2221
+
2222
+ # the rest
2223
+ def processEOF(self):
2224
+ self.parser.phases["inBody"].processEOF()
2225
+
2226
+ def processCharacters(self, token):
2227
+ return self.parser.phases["inBody"].processCharacters(token)
2228
+
2229
+ def startTagTableOther(self, token):
2230
+ if (self.tree.elementInScope("td", variant="table") or
2231
+ self.tree.elementInScope("th", variant="table")):
2232
+ self.closeCell()
2233
+ return token
2234
+ else:
2235
+ # innerHTML case
2236
+ assert self.parser.innerHTML
2237
+ self.parser.parseError()
2238
+
2239
+ def startTagOther(self, token):
2240
+ return self.parser.phases["inBody"].processStartTag(token)
2241
+
2242
+ def endTagTableCell(self, token):
2243
+ if self.tree.elementInScope(token["name"], variant="table"):
2244
+ self.tree.generateImpliedEndTags(token["name"])
2245
+ if self.tree.openElements[-1].name != token["name"]:
2246
+ self.parser.parseError("unexpected-cell-end-tag",
2247
+ {"name": token["name"]})
2248
+ while True:
2249
+ node = self.tree.openElements.pop()
2250
+ if node.name == token["name"]:
2251
+ break
2252
+ else:
2253
+ self.tree.openElements.pop()
2254
+ self.tree.clearActiveFormattingElements()
2255
+ self.parser.phase = self.parser.phases["inRow"]
2256
+ else:
2257
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
2258
+
2259
+ def endTagIgnore(self, token):
2260
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
2261
+
2262
+ def endTagImply(self, token):
2263
+ if self.tree.elementInScope(token["name"], variant="table"):
2264
+ self.closeCell()
2265
+ return token
2266
+ else:
2267
+ # sometimes innerHTML case
2268
+ self.parser.parseError()
2269
+
2270
+ def endTagOther(self, token):
2271
+ return self.parser.phases["inBody"].processEndTag(token)
2272
+
2273
+ startTagHandler = _utils.MethodDispatcher([
2274
+ ("html", Phase.startTagHtml),
2275
+ (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th",
2276
+ "thead", "tr"), startTagTableOther)
2277
+ ])
2278
+ startTagHandler.default = startTagOther
2279
+
2280
+ endTagHandler = _utils.MethodDispatcher([
2281
+ (("td", "th"), endTagTableCell),
2282
+ (("body", "caption", "col", "colgroup", "html"), endTagIgnore),
2283
+ (("table", "tbody", "tfoot", "thead", "tr"), endTagImply)
2284
+ ])
2285
+ endTagHandler.default = endTagOther
2286
+
2287
+ class InSelectPhase(Phase):
2288
+ __slots__ = tuple()
2289
+
2290
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-select
2291
+ def processEOF(self):
2292
+ if self.tree.openElements[-1].name != "html":
2293
+ self.parser.parseError("eof-in-select")
2294
+ else:
2295
+ assert self.parser.innerHTML
2296
+
2297
+ def processCharacters(self, token):
2298
+ if token["data"] == "\u0000":
2299
+ return
2300
+ self.tree.insertText(token["data"])
2301
+
2302
+ def startTagOption(self, token):
2303
+ # We need to imply </option> if <option> is the current node.
2304
+ if self.tree.openElements[-1].name == "option":
2305
+ self.tree.openElements.pop()
2306
+ self.tree.insertElement(token)
2307
+
2308
+ def startTagOptgroup(self, token):
2309
+ if self.tree.openElements[-1].name == "option":
2310
+ self.tree.openElements.pop()
2311
+ if self.tree.openElements[-1].name == "optgroup":
2312
+ self.tree.openElements.pop()
2313
+ self.tree.insertElement(token)
2314
+
2315
+ def startTagSelect(self, token):
2316
+ self.parser.parseError("unexpected-select-in-select")
2317
+ self.endTagSelect(impliedTagToken("select"))
2318
+
2319
+ def startTagInput(self, token):
2320
+ self.parser.parseError("unexpected-input-in-select")
2321
+ if self.tree.elementInScope("select", variant="select"):
2322
+ self.endTagSelect(impliedTagToken("select"))
2323
+ return token
2324
+ else:
2325
+ assert self.parser.innerHTML
2326
+
2327
+ def startTagScript(self, token):
2328
+ return self.parser.phases["inHead"].processStartTag(token)
2329
+
2330
+ def startTagOther(self, token):
2331
+ self.parser.parseError("unexpected-start-tag-in-select",
2332
+ {"name": token["name"]})
2333
+
2334
+ def endTagOption(self, token):
2335
+ if self.tree.openElements[-1].name == "option":
2336
+ self.tree.openElements.pop()
2337
+ else:
2338
+ self.parser.parseError("unexpected-end-tag-in-select",
2339
+ {"name": "option"})
2340
+
2341
+ def endTagOptgroup(self, token):
2342
+ # </optgroup> implicitly closes <option>
2343
+ if (self.tree.openElements[-1].name == "option" and
2344
+ self.tree.openElements[-2].name == "optgroup"):
2345
+ self.tree.openElements.pop()
2346
+ # It also closes </optgroup>
2347
+ if self.tree.openElements[-1].name == "optgroup":
2348
+ self.tree.openElements.pop()
2349
+ # But nothing else
2350
+ else:
2351
+ self.parser.parseError("unexpected-end-tag-in-select",
2352
+ {"name": "optgroup"})
2353
+
2354
+ def endTagSelect(self, token):
2355
+ if self.tree.elementInScope("select", variant="select"):
2356
+ node = self.tree.openElements.pop()
2357
+ while node.name != "select":
2358
+ node = self.tree.openElements.pop()
2359
+ self.parser.resetInsertionMode()
2360
+ else:
2361
+ # innerHTML case
2362
+ assert self.parser.innerHTML
2363
+ self.parser.parseError()
2364
+
2365
+ def endTagOther(self, token):
2366
+ self.parser.parseError("unexpected-end-tag-in-select",
2367
+ {"name": token["name"]})
2368
+
2369
+ startTagHandler = _utils.MethodDispatcher([
2370
+ ("html", Phase.startTagHtml),
2371
+ ("option", startTagOption),
2372
+ ("optgroup", startTagOptgroup),
2373
+ ("select", startTagSelect),
2374
+ (("input", "keygen", "textarea"), startTagInput),
2375
+ ("script", startTagScript)
2376
+ ])
2377
+ startTagHandler.default = startTagOther
2378
+
2379
+ endTagHandler = _utils.MethodDispatcher([
2380
+ ("option", endTagOption),
2381
+ ("optgroup", endTagOptgroup),
2382
+ ("select", endTagSelect)
2383
+ ])
2384
+ endTagHandler.default = endTagOther
2385
+
2386
+ class InSelectInTablePhase(Phase):
2387
+ __slots__ = tuple()
2388
+
2389
+ def processEOF(self):
2390
+ self.parser.phases["inSelect"].processEOF()
2391
+
2392
+ def processCharacters(self, token):
2393
+ return self.parser.phases["inSelect"].processCharacters(token)
2394
+
2395
+ def startTagTable(self, token):
2396
+ self.parser.parseError("unexpected-table-element-start-tag-in-select-in-table", {"name": token["name"]})
2397
+ self.endTagOther(impliedTagToken("select"))
2398
+ return token
2399
+
2400
+ def startTagOther(self, token):
2401
+ return self.parser.phases["inSelect"].processStartTag(token)
2402
+
2403
+ def endTagTable(self, token):
2404
+ self.parser.parseError("unexpected-table-element-end-tag-in-select-in-table", {"name": token["name"]})
2405
+ if self.tree.elementInScope(token["name"], variant="table"):
2406
+ self.endTagOther(impliedTagToken("select"))
2407
+ return token
2408
+
2409
+ def endTagOther(self, token):
2410
+ return self.parser.phases["inSelect"].processEndTag(token)
2411
+
2412
+ startTagHandler = _utils.MethodDispatcher([
2413
+ (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"),
2414
+ startTagTable)
2415
+ ])
2416
+ startTagHandler.default = startTagOther
2417
+
2418
+ endTagHandler = _utils.MethodDispatcher([
2419
+ (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"),
2420
+ endTagTable)
2421
+ ])
2422
+ endTagHandler.default = endTagOther
2423
+
2424
+ class InForeignContentPhase(Phase):
2425
+ __slots__ = tuple()
2426
+
2427
+ breakoutElements = frozenset(["b", "big", "blockquote", "body", "br",
2428
+ "center", "code", "dd", "div", "dl", "dt",
2429
+ "em", "embed", "h1", "h2", "h3",
2430
+ "h4", "h5", "h6", "head", "hr", "i", "img",
2431
+ "li", "listing", "menu", "meta", "nobr",
2432
+ "ol", "p", "pre", "ruby", "s", "small",
2433
+ "span", "strong", "strike", "sub", "sup",
2434
+ "table", "tt", "u", "ul", "var"])
2435
+
2436
+ def adjustSVGTagNames(self, token):
2437
+ replacements = {"altglyph": "altGlyph",
2438
+ "altglyphdef": "altGlyphDef",
2439
+ "altglyphitem": "altGlyphItem",
2440
+ "animatecolor": "animateColor",
2441
+ "animatemotion": "animateMotion",
2442
+ "animatetransform": "animateTransform",
2443
+ "clippath": "clipPath",
2444
+ "feblend": "feBlend",
2445
+ "fecolormatrix": "feColorMatrix",
2446
+ "fecomponenttransfer": "feComponentTransfer",
2447
+ "fecomposite": "feComposite",
2448
+ "feconvolvematrix": "feConvolveMatrix",
2449
+ "fediffuselighting": "feDiffuseLighting",
2450
+ "fedisplacementmap": "feDisplacementMap",
2451
+ "fedistantlight": "feDistantLight",
2452
+ "feflood": "feFlood",
2453
+ "fefunca": "feFuncA",
2454
+ "fefuncb": "feFuncB",
2455
+ "fefuncg": "feFuncG",
2456
+ "fefuncr": "feFuncR",
2457
+ "fegaussianblur": "feGaussianBlur",
2458
+ "feimage": "feImage",
2459
+ "femerge": "feMerge",
2460
+ "femergenode": "feMergeNode",
2461
+ "femorphology": "feMorphology",
2462
+ "feoffset": "feOffset",
2463
+ "fepointlight": "fePointLight",
2464
+ "fespecularlighting": "feSpecularLighting",
2465
+ "fespotlight": "feSpotLight",
2466
+ "fetile": "feTile",
2467
+ "feturbulence": "feTurbulence",
2468
+ "foreignobject": "foreignObject",
2469
+ "glyphref": "glyphRef",
2470
+ "lineargradient": "linearGradient",
2471
+ "radialgradient": "radialGradient",
2472
+ "textpath": "textPath"}
2473
+
2474
+ if token["name"] in replacements:
2475
+ token["name"] = replacements[token["name"]]
2476
+
2477
+ def processCharacters(self, token):
2478
+ if token["data"] == "\u0000":
2479
+ token["data"] = "\uFFFD"
2480
+ elif (self.parser.framesetOK and
2481
+ any(char not in spaceCharacters for char in token["data"])):
2482
+ self.parser.framesetOK = False
2483
+ Phase.processCharacters(self, token)
2484
+
2485
+ def processStartTag(self, token):
2486
+ currentNode = self.tree.openElements[-1]
2487
+ if (token["name"] in self.breakoutElements or
2488
+ (token["name"] == "font" and
2489
+ set(token["data"].keys()) & {"color", "face", "size"})):
2490
+ self.parser.parseError("unexpected-html-element-in-foreign-content",
2491
+ {"name": token["name"]})
2492
+ while (self.tree.openElements[-1].namespace !=
2493
+ self.tree.defaultNamespace and
2494
+ not self.parser.isHTMLIntegrationPoint(self.tree.openElements[-1]) and
2495
+ not self.parser.isMathMLTextIntegrationPoint(self.tree.openElements[-1])):
2496
+ self.tree.openElements.pop()
2497
+ return token
2498
+
2499
+ else:
2500
+ if currentNode.namespace == namespaces["mathml"]:
2501
+ self.parser.adjustMathMLAttributes(token)
2502
+ elif currentNode.namespace == namespaces["svg"]:
2503
+ self.adjustSVGTagNames(token)
2504
+ self.parser.adjustSVGAttributes(token)
2505
+ self.parser.adjustForeignAttributes(token)
2506
+ token["namespace"] = currentNode.namespace
2507
+ self.tree.insertElement(token)
2508
+ if token["selfClosing"]:
2509
+ self.tree.openElements.pop()
2510
+ token["selfClosingAcknowledged"] = True
2511
+
2512
+ def processEndTag(self, token):
2513
+ nodeIndex = len(self.tree.openElements) - 1
2514
+ node = self.tree.openElements[-1]
2515
+ if node.name.translate(asciiUpper2Lower) != token["name"]:
2516
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
2517
+
2518
+ while True:
2519
+ if node.name.translate(asciiUpper2Lower) == token["name"]:
2520
+ # XXX this isn't in the spec but it seems necessary
2521
+ if self.parser.phase == self.parser.phases["inTableText"]:
2522
+ self.parser.phase.flushCharacters()
2523
+ self.parser.phase = self.parser.phase.originalPhase
2524
+ while self.tree.openElements.pop() != node:
2525
+ assert self.tree.openElements
2526
+ new_token = None
2527
+ break
2528
+ nodeIndex -= 1
2529
+
2530
+ node = self.tree.openElements[nodeIndex]
2531
+ if node.namespace != self.tree.defaultNamespace:
2532
+ continue
2533
+ else:
2534
+ new_token = self.parser.phase.processEndTag(token)
2535
+ break
2536
+ return new_token
2537
+
2538
+ class AfterBodyPhase(Phase):
2539
+ __slots__ = tuple()
2540
+
2541
+ def processEOF(self):
2542
+ # Stop parsing
2543
+ pass
2544
+
2545
+ def processComment(self, token):
2546
+ # This is needed because data is to be appended to the <html> element
2547
+ # here and not to whatever is currently open.
2548
+ self.tree.insertComment(token, self.tree.openElements[0])
2549
+
2550
+ def processCharacters(self, token):
2551
+ self.parser.parseError("unexpected-char-after-body")
2552
+ self.parser.phase = self.parser.phases["inBody"]
2553
+ return token
2554
+
2555
+ def startTagHtml(self, token):
2556
+ return self.parser.phases["inBody"].processStartTag(token)
2557
+
2558
+ def startTagOther(self, token):
2559
+ self.parser.parseError("unexpected-start-tag-after-body",
2560
+ {"name": token["name"]})
2561
+ self.parser.phase = self.parser.phases["inBody"]
2562
+ return token
2563
+
2564
+ def endTagHtml(self, name):
2565
+ if self.parser.innerHTML:
2566
+ self.parser.parseError("unexpected-end-tag-after-body-innerhtml")
2567
+ else:
2568
+ self.parser.phase = self.parser.phases["afterAfterBody"]
2569
+
2570
+ def endTagOther(self, token):
2571
+ self.parser.parseError("unexpected-end-tag-after-body",
2572
+ {"name": token["name"]})
2573
+ self.parser.phase = self.parser.phases["inBody"]
2574
+ return token
2575
+
2576
+ startTagHandler = _utils.MethodDispatcher([
2577
+ ("html", startTagHtml)
2578
+ ])
2579
+ startTagHandler.default = startTagOther
2580
+
2581
+ endTagHandler = _utils.MethodDispatcher([("html", endTagHtml)])
2582
+ endTagHandler.default = endTagOther
2583
+
2584
+ class InFramesetPhase(Phase):
2585
+ # http://www.whatwg.org/specs/web-apps/current-work/#in-frameset
2586
+ __slots__ = tuple()
2587
+
2588
+ def processEOF(self):
2589
+ if self.tree.openElements[-1].name != "html":
2590
+ self.parser.parseError("eof-in-frameset")
2591
+ else:
2592
+ assert self.parser.innerHTML
2593
+
2594
+ def processCharacters(self, token):
2595
+ self.parser.parseError("unexpected-char-in-frameset")
2596
+
2597
+ def startTagFrameset(self, token):
2598
+ self.tree.insertElement(token)
2599
+
2600
+ def startTagFrame(self, token):
2601
+ self.tree.insertElement(token)
2602
+ self.tree.openElements.pop()
2603
+
2604
+ def startTagNoframes(self, token):
2605
+ return self.parser.phases["inBody"].processStartTag(token)
2606
+
2607
+ def startTagOther(self, token):
2608
+ self.parser.parseError("unexpected-start-tag-in-frameset",
2609
+ {"name": token["name"]})
2610
+
2611
+ def endTagFrameset(self, token):
2612
+ if self.tree.openElements[-1].name == "html":
2613
+ # innerHTML case
2614
+ self.parser.parseError("unexpected-frameset-in-frameset-innerhtml")
2615
+ else:
2616
+ self.tree.openElements.pop()
2617
+ if (not self.parser.innerHTML and
2618
+ self.tree.openElements[-1].name != "frameset"):
2619
+ # If we're not in innerHTML mode and the current node is not a
2620
+ # "frameset" element (anymore) then switch.
2621
+ self.parser.phase = self.parser.phases["afterFrameset"]
2622
+
2623
+ def endTagOther(self, token):
2624
+ self.parser.parseError("unexpected-end-tag-in-frameset",
2625
+ {"name": token["name"]})
2626
+
2627
+ startTagHandler = _utils.MethodDispatcher([
2628
+ ("html", Phase.startTagHtml),
2629
+ ("frameset", startTagFrameset),
2630
+ ("frame", startTagFrame),
2631
+ ("noframes", startTagNoframes)
2632
+ ])
2633
+ startTagHandler.default = startTagOther
2634
+
2635
+ endTagHandler = _utils.MethodDispatcher([
2636
+ ("frameset", endTagFrameset)
2637
+ ])
2638
+ endTagHandler.default = endTagOther
2639
+
2640
+ class AfterFramesetPhase(Phase):
2641
+ # http://www.whatwg.org/specs/web-apps/current-work/#after3
2642
+ __slots__ = tuple()
2643
+
2644
+ def processEOF(self):
2645
+ # Stop parsing
2646
+ pass
2647
+
2648
+ def processCharacters(self, token):
2649
+ self.parser.parseError("unexpected-char-after-frameset")
2650
+
2651
+ def startTagNoframes(self, token):
2652
+ return self.parser.phases["inHead"].processStartTag(token)
2653
+
2654
+ def startTagOther(self, token):
2655
+ self.parser.parseError("unexpected-start-tag-after-frameset",
2656
+ {"name": token["name"]})
2657
+
2658
+ def endTagHtml(self, token):
2659
+ self.parser.phase = self.parser.phases["afterAfterFrameset"]
2660
+
2661
+ def endTagOther(self, token):
2662
+ self.parser.parseError("unexpected-end-tag-after-frameset",
2663
+ {"name": token["name"]})
2664
+
2665
+ startTagHandler = _utils.MethodDispatcher([
2666
+ ("html", Phase.startTagHtml),
2667
+ ("noframes", startTagNoframes)
2668
+ ])
2669
+ startTagHandler.default = startTagOther
2670
+
2671
+ endTagHandler = _utils.MethodDispatcher([
2672
+ ("html", endTagHtml)
2673
+ ])
2674
+ endTagHandler.default = endTagOther
2675
+
2676
+ class AfterAfterBodyPhase(Phase):
2677
+ __slots__ = tuple()
2678
+
2679
+ def processEOF(self):
2680
+ pass
2681
+
2682
+ def processComment(self, token):
2683
+ self.tree.insertComment(token, self.tree.document)
2684
+
2685
+ def processSpaceCharacters(self, token):
2686
+ return self.parser.phases["inBody"].processSpaceCharacters(token)
2687
+
2688
+ def processCharacters(self, token):
2689
+ self.parser.parseError("expected-eof-but-got-char")
2690
+ self.parser.phase = self.parser.phases["inBody"]
2691
+ return token
2692
+
2693
+ def startTagHtml(self, token):
2694
+ return self.parser.phases["inBody"].processStartTag(token)
2695
+
2696
+ def startTagOther(self, token):
2697
+ self.parser.parseError("expected-eof-but-got-start-tag",
2698
+ {"name": token["name"]})
2699
+ self.parser.phase = self.parser.phases["inBody"]
2700
+ return token
2701
+
2702
+ def processEndTag(self, token):
2703
+ self.parser.parseError("expected-eof-but-got-end-tag",
2704
+ {"name": token["name"]})
2705
+ self.parser.phase = self.parser.phases["inBody"]
2706
+ return token
2707
+
2708
+ startTagHandler = _utils.MethodDispatcher([
2709
+ ("html", startTagHtml)
2710
+ ])
2711
+ startTagHandler.default = startTagOther
2712
+
2713
+ class AfterAfterFramesetPhase(Phase):
2714
+ __slots__ = tuple()
2715
+
2716
+ def processEOF(self):
2717
+ pass
2718
+
2719
+ def processComment(self, token):
2720
+ self.tree.insertComment(token, self.tree.document)
2721
+
2722
+ def processSpaceCharacters(self, token):
2723
+ return self.parser.phases["inBody"].processSpaceCharacters(token)
2724
+
2725
+ def processCharacters(self, token):
2726
+ self.parser.parseError("expected-eof-but-got-char")
2727
+
2728
+ def startTagHtml(self, token):
2729
+ return self.parser.phases["inBody"].processStartTag(token)
2730
+
2731
+ def startTagNoFrames(self, token):
2732
+ return self.parser.phases["inHead"].processStartTag(token)
2733
+
2734
+ def startTagOther(self, token):
2735
+ self.parser.parseError("expected-eof-but-got-start-tag",
2736
+ {"name": token["name"]})
2737
+
2738
+ def processEndTag(self, token):
2739
+ self.parser.parseError("expected-eof-but-got-end-tag",
2740
+ {"name": token["name"]})
2741
+
2742
+ startTagHandler = _utils.MethodDispatcher([
2743
+ ("html", startTagHtml),
2744
+ ("noframes", startTagNoFrames)
2745
+ ])
2746
+ startTagHandler.default = startTagOther
2747
+
2748
+ # pylint:enable=unused-argument
2749
+
2750
+ return {
2751
+ "initial": InitialPhase,
2752
+ "beforeHtml": BeforeHtmlPhase,
2753
+ "beforeHead": BeforeHeadPhase,
2754
+ "inHead": InHeadPhase,
2755
+ "inHeadNoscript": InHeadNoscriptPhase,
2756
+ "afterHead": AfterHeadPhase,
2757
+ "inBody": InBodyPhase,
2758
+ "text": TextPhase,
2759
+ "inTable": InTablePhase,
2760
+ "inTableText": InTableTextPhase,
2761
+ "inCaption": InCaptionPhase,
2762
+ "inColumnGroup": InColumnGroupPhase,
2763
+ "inTableBody": InTableBodyPhase,
2764
+ "inRow": InRowPhase,
2765
+ "inCell": InCellPhase,
2766
+ "inSelect": InSelectPhase,
2767
+ "inSelectInTable": InSelectInTablePhase,
2768
+ "inForeignContent": InForeignContentPhase,
2769
+ "afterBody": AfterBodyPhase,
2770
+ "inFrameset": InFramesetPhase,
2771
+ "afterFrameset": AfterFramesetPhase,
2772
+ "afterAfterBody": AfterAfterBodyPhase,
2773
+ "afterAfterFrameset": AfterAfterFramesetPhase,
2774
+ # XXX after after frameset
2775
+ }
2776
+
2777
+
2778
+ def adjust_attributes(token, replacements):
2779
+ needs_adjustment = viewkeys(token['data']) & viewkeys(replacements)
2780
+ if needs_adjustment:
2781
+ token['data'] = type(token['data'])((replacements.get(k, k), v)
2782
+ for k, v in token['data'].items())
2783
+
2784
+
2785
+ def impliedTagToken(name, type="EndTag", attributes=None,
2786
+ selfClosing=False):
2787
+ if attributes is None:
2788
+ attributes = {}
2789
+ return {"type": tokenTypes[type], "name": name, "data": attributes,
2790
+ "selfClosing": selfClosing}
2791
+
2792
+
2793
+ class ParseError(Exception):
2794
+ """Error in parsed document"""
2795
+ pass