plain 0.73.0__tar.gz → 0.75.0__tar.gz

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 (182) hide show
  1. {plain-0.73.0 → plain-0.75.0}/PKG-INFO +2 -2
  2. {plain-0.73.0 → plain-0.75.0}/plain/CHANGELOG.md +21 -0
  3. {plain-0.73.0 → plain-0.75.0}/plain/README.md +1 -1
  4. {plain-0.73.0 → plain-0.75.0}/plain/chores/README.md +1 -1
  5. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/request.py +15 -13
  6. {plain-0.73.0 → plain-0.75.0}/plain/internal/handlers/base.py +3 -0
  7. {plain-0.73.0 → plain-0.75.0}/pyproject.toml +1 -1
  8. {plain-0.73.0 → plain-0.75.0}/.gitignore +0 -0
  9. {plain-0.73.0 → plain-0.75.0}/LICENSE +0 -0
  10. {plain-0.73.0 → plain-0.75.0}/README.md +0 -0
  11. {plain-0.73.0 → plain-0.75.0}/plain/AGENTS.md +0 -0
  12. {plain-0.73.0 → plain-0.75.0}/plain/__main__.py +0 -0
  13. {plain-0.73.0 → plain-0.75.0}/plain/assets/README.md +0 -0
  14. {plain-0.73.0 → plain-0.75.0}/plain/assets/__init__.py +0 -0
  15. {plain-0.73.0 → plain-0.75.0}/plain/assets/compile.py +0 -0
  16. {plain-0.73.0 → plain-0.75.0}/plain/assets/finders.py +0 -0
  17. {plain-0.73.0 → plain-0.75.0}/plain/assets/fingerprints.py +0 -0
  18. {plain-0.73.0 → plain-0.75.0}/plain/assets/urls.py +0 -0
  19. {plain-0.73.0 → plain-0.75.0}/plain/assets/views.py +0 -0
  20. {plain-0.73.0 → plain-0.75.0}/plain/chores/__init__.py +0 -0
  21. {plain-0.73.0 → plain-0.75.0}/plain/chores/registry.py +0 -0
  22. {plain-0.73.0 → plain-0.75.0}/plain/cli/README.md +0 -0
  23. {plain-0.73.0 → plain-0.75.0}/plain/cli/__init__.py +0 -0
  24. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/__init__.py +0 -0
  25. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/docs.py +0 -0
  26. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/llmdocs.py +0 -0
  27. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/md.py +0 -0
  28. {plain-0.73.0 → plain-0.75.0}/plain/cli/agent/prompt.py +0 -0
  29. {plain-0.73.0 → plain-0.75.0}/plain/cli/build.py +0 -0
  30. {plain-0.73.0 → plain-0.75.0}/plain/cli/changelog.py +0 -0
  31. {plain-0.73.0 → plain-0.75.0}/plain/cli/chores.py +0 -0
  32. {plain-0.73.0 → plain-0.75.0}/plain/cli/core.py +0 -0
  33. {plain-0.73.0 → plain-0.75.0}/plain/cli/docs.py +0 -0
  34. {plain-0.73.0 → plain-0.75.0}/plain/cli/formatting.py +0 -0
  35. {plain-0.73.0 → plain-0.75.0}/plain/cli/install.py +0 -0
  36. {plain-0.73.0 → plain-0.75.0}/plain/cli/output.py +0 -0
  37. {plain-0.73.0 → plain-0.75.0}/plain/cli/preflight.py +0 -0
  38. {plain-0.73.0 → plain-0.75.0}/plain/cli/print.py +0 -0
  39. {plain-0.73.0 → plain-0.75.0}/plain/cli/registry.py +0 -0
  40. {plain-0.73.0 → plain-0.75.0}/plain/cli/scaffold.py +0 -0
  41. {plain-0.73.0 → plain-0.75.0}/plain/cli/settings.py +0 -0
  42. {plain-0.73.0 → plain-0.75.0}/plain/cli/shell.py +0 -0
  43. {plain-0.73.0 → plain-0.75.0}/plain/cli/startup.py +0 -0
  44. {plain-0.73.0 → plain-0.75.0}/plain/cli/upgrade.py +0 -0
  45. {plain-0.73.0 → plain-0.75.0}/plain/cli/urls.py +0 -0
  46. {plain-0.73.0 → plain-0.75.0}/plain/cli/utils.py +0 -0
  47. {plain-0.73.0 → plain-0.75.0}/plain/csrf/README.md +0 -0
  48. {plain-0.73.0 → plain-0.75.0}/plain/csrf/middleware.py +0 -0
  49. {plain-0.73.0 → plain-0.75.0}/plain/csrf/views.py +0 -0
  50. {plain-0.73.0 → plain-0.75.0}/plain/debug.py +0 -0
  51. {plain-0.73.0 → plain-0.75.0}/plain/exceptions.py +0 -0
  52. {plain-0.73.0 → plain-0.75.0}/plain/forms/README.md +0 -0
  53. {plain-0.73.0 → plain-0.75.0}/plain/forms/__init__.py +0 -0
  54. {plain-0.73.0 → plain-0.75.0}/plain/forms/boundfield.py +0 -0
  55. {plain-0.73.0 → plain-0.75.0}/plain/forms/exceptions.py +0 -0
  56. {plain-0.73.0 → plain-0.75.0}/plain/forms/fields.py +0 -0
  57. {plain-0.73.0 → plain-0.75.0}/plain/forms/forms.py +0 -0
  58. {plain-0.73.0 → plain-0.75.0}/plain/http/README.md +0 -0
  59. {plain-0.73.0 → plain-0.75.0}/plain/http/__init__.py +0 -0
  60. {plain-0.73.0 → plain-0.75.0}/plain/http/cookie.py +0 -0
  61. {plain-0.73.0 → plain-0.75.0}/plain/http/multipartparser.py +0 -0
  62. {plain-0.73.0 → plain-0.75.0}/plain/http/request.py +0 -0
  63. {plain-0.73.0 → plain-0.75.0}/plain/http/response.py +0 -0
  64. {plain-0.73.0 → plain-0.75.0}/plain/internal/__init__.py +0 -0
  65. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/__init__.py +0 -0
  66. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/base.py +0 -0
  67. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/locks.py +0 -0
  68. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/move.py +0 -0
  69. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/temp.py +0 -0
  70. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/uploadedfile.py +0 -0
  71. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/uploadhandler.py +0 -0
  72. {plain-0.73.0 → plain-0.75.0}/plain/internal/files/utils.py +0 -0
  73. {plain-0.73.0 → plain-0.75.0}/plain/internal/handlers/__init__.py +0 -0
  74. {plain-0.73.0 → plain-0.75.0}/plain/internal/handlers/exception.py +0 -0
  75. {plain-0.73.0 → plain-0.75.0}/plain/internal/handlers/wsgi.py +0 -0
  76. {plain-0.73.0 → plain-0.75.0}/plain/internal/middleware/__init__.py +0 -0
  77. {plain-0.73.0 → plain-0.75.0}/plain/internal/middleware/headers.py +0 -0
  78. {plain-0.73.0 → plain-0.75.0}/plain/internal/middleware/hosts.py +0 -0
  79. {plain-0.73.0 → plain-0.75.0}/plain/internal/middleware/https.py +0 -0
  80. {plain-0.73.0 → plain-0.75.0}/plain/internal/middleware/slash.py +0 -0
  81. {plain-0.73.0 → plain-0.75.0}/plain/json.py +0 -0
  82. {plain-0.73.0 → plain-0.75.0}/plain/logs/README.md +0 -0
  83. {plain-0.73.0 → plain-0.75.0}/plain/logs/__init__.py +0 -0
  84. {plain-0.73.0 → plain-0.75.0}/plain/logs/configure.py +0 -0
  85. {plain-0.73.0 → plain-0.75.0}/plain/logs/debug.py +0 -0
  86. {plain-0.73.0 → plain-0.75.0}/plain/logs/formatters.py +0 -0
  87. {plain-0.73.0 → plain-0.75.0}/plain/logs/loggers.py +0 -0
  88. {plain-0.73.0 → plain-0.75.0}/plain/logs/utils.py +0 -0
  89. {plain-0.73.0 → plain-0.75.0}/plain/packages/README.md +0 -0
  90. {plain-0.73.0 → plain-0.75.0}/plain/packages/__init__.py +0 -0
  91. {plain-0.73.0 → plain-0.75.0}/plain/packages/config.py +0 -0
  92. {plain-0.73.0 → plain-0.75.0}/plain/packages/registry.py +0 -0
  93. {plain-0.73.0 → plain-0.75.0}/plain/paginator.py +0 -0
  94. {plain-0.73.0 → plain-0.75.0}/plain/preflight/README.md +0 -0
  95. {plain-0.73.0 → plain-0.75.0}/plain/preflight/__init__.py +0 -0
  96. {plain-0.73.0 → plain-0.75.0}/plain/preflight/checks.py +0 -0
  97. {plain-0.73.0 → plain-0.75.0}/plain/preflight/files.py +0 -0
  98. {plain-0.73.0 → plain-0.75.0}/plain/preflight/registry.py +0 -0
  99. {plain-0.73.0 → plain-0.75.0}/plain/preflight/results.py +0 -0
  100. {plain-0.73.0 → plain-0.75.0}/plain/preflight/security.py +0 -0
  101. {plain-0.73.0 → plain-0.75.0}/plain/preflight/urls.py +0 -0
  102. {plain-0.73.0 → plain-0.75.0}/plain/runtime/README.md +0 -0
  103. {plain-0.73.0 → plain-0.75.0}/plain/runtime/__init__.py +0 -0
  104. {plain-0.73.0 → plain-0.75.0}/plain/runtime/global_settings.py +0 -0
  105. {plain-0.73.0 → plain-0.75.0}/plain/runtime/user_settings.py +0 -0
  106. {plain-0.73.0 → plain-0.75.0}/plain/runtime/utils.py +0 -0
  107. {plain-0.73.0 → plain-0.75.0}/plain/signals/README.md +0 -0
  108. {plain-0.73.0 → plain-0.75.0}/plain/signals/__init__.py +0 -0
  109. {plain-0.73.0 → plain-0.75.0}/plain/signals/dispatch/__init__.py +0 -0
  110. {plain-0.73.0 → plain-0.75.0}/plain/signals/dispatch/dispatcher.py +0 -0
  111. {plain-0.73.0 → plain-0.75.0}/plain/signals/dispatch/license.txt +0 -0
  112. {plain-0.73.0 → plain-0.75.0}/plain/signing.py +0 -0
  113. {plain-0.73.0 → plain-0.75.0}/plain/templates/AGENTS.md +0 -0
  114. {plain-0.73.0 → plain-0.75.0}/plain/templates/README.md +0 -0
  115. {plain-0.73.0 → plain-0.75.0}/plain/templates/__init__.py +0 -0
  116. {plain-0.73.0 → plain-0.75.0}/plain/templates/core.py +0 -0
  117. {plain-0.73.0 → plain-0.75.0}/plain/templates/jinja/__init__.py +0 -0
  118. {plain-0.73.0 → plain-0.75.0}/plain/templates/jinja/environments.py +0 -0
  119. {plain-0.73.0 → plain-0.75.0}/plain/templates/jinja/extensions.py +0 -0
  120. {plain-0.73.0 → plain-0.75.0}/plain/templates/jinja/filters.py +0 -0
  121. {plain-0.73.0 → plain-0.75.0}/plain/templates/jinja/globals.py +0 -0
  122. {plain-0.73.0 → plain-0.75.0}/plain/test/README.md +0 -0
  123. {plain-0.73.0 → plain-0.75.0}/plain/test/__init__.py +0 -0
  124. {plain-0.73.0 → plain-0.75.0}/plain/test/client.py +0 -0
  125. {plain-0.73.0 → plain-0.75.0}/plain/test/encoding.py +0 -0
  126. {plain-0.73.0 → plain-0.75.0}/plain/test/exceptions.py +0 -0
  127. {plain-0.73.0 → plain-0.75.0}/plain/urls/README.md +0 -0
  128. {plain-0.73.0 → plain-0.75.0}/plain/urls/__init__.py +0 -0
  129. {plain-0.73.0 → plain-0.75.0}/plain/urls/converters.py +0 -0
  130. {plain-0.73.0 → plain-0.75.0}/plain/urls/exceptions.py +0 -0
  131. {plain-0.73.0 → plain-0.75.0}/plain/urls/patterns.py +0 -0
  132. {plain-0.73.0 → plain-0.75.0}/plain/urls/resolvers.py +0 -0
  133. {plain-0.73.0 → plain-0.75.0}/plain/urls/routers.py +0 -0
  134. {plain-0.73.0 → plain-0.75.0}/plain/urls/utils.py +0 -0
  135. {plain-0.73.0 → plain-0.75.0}/plain/utils/README.md +0 -0
  136. {plain-0.73.0 → plain-0.75.0}/plain/utils/__init__.py +0 -0
  137. {plain-0.73.0 → plain-0.75.0}/plain/utils/cache.py +0 -0
  138. {plain-0.73.0 → plain-0.75.0}/plain/utils/crypto.py +0 -0
  139. {plain-0.73.0 → plain-0.75.0}/plain/utils/datastructures.py +0 -0
  140. {plain-0.73.0 → plain-0.75.0}/plain/utils/dateparse.py +0 -0
  141. {plain-0.73.0 → plain-0.75.0}/plain/utils/deconstruct.py +0 -0
  142. {plain-0.73.0 → plain-0.75.0}/plain/utils/decorators.py +0 -0
  143. {plain-0.73.0 → plain-0.75.0}/plain/utils/duration.py +0 -0
  144. {plain-0.73.0 → plain-0.75.0}/plain/utils/encoding.py +0 -0
  145. {plain-0.73.0 → plain-0.75.0}/plain/utils/functional.py +0 -0
  146. {plain-0.73.0 → plain-0.75.0}/plain/utils/hashable.py +0 -0
  147. {plain-0.73.0 → plain-0.75.0}/plain/utils/html.py +0 -0
  148. {plain-0.73.0 → plain-0.75.0}/plain/utils/http.py +0 -0
  149. {plain-0.73.0 → plain-0.75.0}/plain/utils/inspect.py +0 -0
  150. {plain-0.73.0 → plain-0.75.0}/plain/utils/ipv6.py +0 -0
  151. {plain-0.73.0 → plain-0.75.0}/plain/utils/itercompat.py +0 -0
  152. {plain-0.73.0 → plain-0.75.0}/plain/utils/module_loading.py +0 -0
  153. {plain-0.73.0 → plain-0.75.0}/plain/utils/regex_helper.py +0 -0
  154. {plain-0.73.0 → plain-0.75.0}/plain/utils/safestring.py +0 -0
  155. {plain-0.73.0 → plain-0.75.0}/plain/utils/text.py +0 -0
  156. {plain-0.73.0 → plain-0.75.0}/plain/utils/timesince.py +0 -0
  157. {plain-0.73.0 → plain-0.75.0}/plain/utils/timezone.py +0 -0
  158. {plain-0.73.0 → plain-0.75.0}/plain/utils/tree.py +0 -0
  159. {plain-0.73.0 → plain-0.75.0}/plain/validators.py +0 -0
  160. {plain-0.73.0 → plain-0.75.0}/plain/views/README.md +0 -0
  161. {plain-0.73.0 → plain-0.75.0}/plain/views/__init__.py +0 -0
  162. {plain-0.73.0 → plain-0.75.0}/plain/views/base.py +0 -0
  163. {plain-0.73.0 → plain-0.75.0}/plain/views/errors.py +0 -0
  164. {plain-0.73.0 → plain-0.75.0}/plain/views/exceptions.py +0 -0
  165. {plain-0.73.0 → plain-0.75.0}/plain/views/forms.py +0 -0
  166. {plain-0.73.0 → plain-0.75.0}/plain/views/objects.py +0 -0
  167. {plain-0.73.0 → plain-0.75.0}/plain/views/redirect.py +0 -0
  168. {plain-0.73.0 → plain-0.75.0}/plain/views/templates.py +0 -0
  169. {plain-0.73.0 → plain-0.75.0}/plain/wsgi.py +0 -0
  170. {plain-0.73.0 → plain-0.75.0}/tests/.gitignore +0 -0
  171. {plain-0.73.0 → plain-0.75.0}/tests/app/.gitignore +0 -0
  172. {plain-0.73.0 → plain-0.75.0}/tests/app/settings.py +0 -0
  173. {plain-0.73.0 → plain-0.75.0}/tests/app/test/__init__.py +0 -0
  174. {plain-0.73.0 → plain-0.75.0}/tests/app/test/default_settings.py +0 -0
  175. {plain-0.73.0 → plain-0.75.0}/tests/app/urls.py +0 -0
  176. {plain-0.73.0 → plain-0.75.0}/tests/conftest.py +0 -0
  177. {plain-0.73.0 → plain-0.75.0}/tests/test_cli.py +0 -0
  178. {plain-0.73.0 → plain-0.75.0}/tests/test_csrf.py +0 -0
  179. {plain-0.73.0 → plain-0.75.0}/tests/test_http_hosts.py +0 -0
  180. {plain-0.73.0 → plain-0.75.0}/tests/test_logs.py +0 -0
  181. {plain-0.73.0 → plain-0.75.0}/tests/test_runtime.py +0 -0
  182. {plain-0.73.0 → plain-0.75.0}/tests/test_wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain
3
- Version: 0.73.0
3
+ Version: 0.75.0
4
4
  Summary: A web framework for building products with Python.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-File: LICENSE
@@ -44,7 +44,7 @@ The `plain` package includes everything you need to start handling web requests
44
44
  - [plain.cache](/plain-cache/plain/cache/README.md) - A database-driven general purpose cache.
45
45
  - [plain.email](/plain-email/plain/email/README.md) - Send emails with SMTP or custom backends.
46
46
  - [plain.sessions](/plain-sessions/plain/sessions/README.md) - User sessions and cookies.
47
- - [plain.worker](/plain-worker/plain/worker/README.md) - Background jobs stored in the database.
47
+ - [plain.jobs](/plain-jobs/plain/jobs/README.md) - Background jobs stored in the database.
48
48
  - [plain.api](/plain-api/plain/api/README.md) - Build APIs with Plain views.
49
49
 
50
50
  ## Auth Packages
@@ -1,5 +1,26 @@
1
1
  # plain changelog
2
2
 
3
+ ## [0.75.0](https://github.com/dropseed/plain/releases/plain@0.75.0) (2025-10-10)
4
+
5
+ ### What's changed
6
+
7
+ - Documentation references updated from `plain-worker` to `plain-jobs` following the package rename ([24219856e0](https://github.com/dropseed/plain/commit/24219856e0))
8
+
9
+ ### Upgrade instructions
10
+
11
+ - No changes required
12
+
13
+ ## [0.74.0](https://github.com/dropseed/plain/releases/plain@0.74.0) (2025-10-08)
14
+
15
+ ### What's changed
16
+
17
+ - The `plain agent request` command now displays request ID in the response output ([4a20cfa3fc](https://github.com/dropseed/plain/commit/4a20cfa3fc))
18
+ - Request headers are now included in OpenTelemetry tracing baggage for improved observability ([08a3376d06](https://github.com/dropseed/plain/commit/08a3376d06))
19
+
20
+ ### Upgrade instructions
21
+
22
+ - No changes required
23
+
3
24
  ## [0.73.0](https://github.com/dropseed/plain/releases/plain@0.73.0) (2025-10-07)
4
25
 
5
26
  ### What's changed
@@ -31,7 +31,7 @@ The `plain` package includes everything you need to start handling web requests
31
31
  - [plain.cache](/plain-cache/plain/cache/README.md) - A database-driven general purpose cache.
32
32
  - [plain.email](/plain-email/plain/email/README.md) - Send emails with SMTP or custom backends.
33
33
  - [plain.sessions](/plain-sessions/plain/sessions/README.md) - User sessions and cookies.
34
- - [plain.worker](/plain-worker/plain/worker/README.md) - Background jobs stored in the database.
34
+ - [plain.jobs](/plain-jobs/plain/jobs/README.md) - Background jobs stored in the database.
35
35
  - [plain.api](/plain-api/plain/api/README.md) - Build APIs with Plain views.
36
36
 
37
37
  ## Auth Packages
@@ -38,7 +38,7 @@ The `plain chores run` command will execute all registered chores. When and how
38
38
  There are several ways you can run chores depending on your needs:
39
39
 
40
40
  - on deploy
41
- - as a [`plain.worker` scheduled job](/plain-worker/plain/worker/README.md#scheduled-jobs)
41
+ - as a [`plain.jobs` scheduled job](/plain-jobs/plain/jobs/README.md#scheduled-jobs)
42
42
  - as a cron job (using any cron-like system where your app is hosted)
43
43
  - manually as needed
44
44
 
@@ -72,9 +72,6 @@ def request(
72
72
  try:
73
73
  user = User.query.get(id=user_id)
74
74
  client.force_login(user)
75
- click.secho(
76
- f"Authenticated as user {user_id}", fg="green", dim=True
77
- )
78
75
  except User.DoesNotExist:
79
76
  click.secho(f"User {user_id} not found", fg="red", err=True)
80
77
  return
@@ -134,23 +131,28 @@ def request(
134
131
  return
135
132
 
136
133
  # Display response information
137
- click.secho(
138
- f"HTTP {response.status_code}",
139
- fg="green" if response.status_code < 400 else "red",
140
- bold=True,
141
- )
134
+ click.secho("Response:", fg="yellow", bold=True)
142
135
 
143
- # Show additional response info first
144
- if hasattr(response, "user"):
145
- click.secho(f"Authenticated user: {response.user}", fg="blue", dim=True)
136
+ # Status code
137
+ click.echo(f" Status: {response.status_code}")
146
138
 
147
- if hasattr(response, "resolver_match") and response.resolver_match:
139
+ # Request ID
140
+ click.echo(f" Request ID: {response.wsgi_request.unique_id}")
141
+
142
+ # User
143
+ if response.user:
144
+ click.echo(f" Authenticated user: {response.user}")
145
+
146
+ # URL pattern
147
+ if response.resolver_match:
148
148
  match = response.resolver_match
149
149
  namespaced_url_name = getattr(match, "namespaced_url_name", None)
150
150
  url_name_attr = getattr(match, "url_name", None)
151
151
  url_name = namespaced_url_name or url_name_attr
152
152
  if url_name:
153
- click.secho(f"URL pattern matched: {url_name}", fg="blue", dim=True)
153
+ click.echo(f" URL pattern: {url_name}")
154
+
155
+ click.echo()
154
156
 
155
157
  # Show headers
156
158
  if response.headers:
@@ -94,6 +94,9 @@ class BaseHandler:
94
94
  span_attributes[url_attributes.URL_QUERY] = query_string
95
95
 
96
96
  span_context = baggage.set_baggage("http.request.cookies", request.cookies)
97
+ span_context = baggage.set_baggage(
98
+ "http.request.headers", request.headers, span_context
99
+ )
97
100
 
98
101
  with tracer.start_as_current_span(
99
102
  f"{request.method} {request.path_info}",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain"
3
- version = "0.73.0"
3
+ version = "0.75.0"
4
4
  description = "A web framework for building products with Python."
5
5
  authors = [{name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev"}]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes