fal 1.1.0__tar.gz → 1.1.1__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.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

Files changed (150) hide show
  1. {fal-1.1.0 → fal-1.1.1}/PKG-INFO +1 -1
  2. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/PKG-INFO +1 -1
  3. {fal-1.1.0 → fal-1.1.1}/src/fal/_fal_version.py +2 -2
  4. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/file.py +2 -0
  5. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/providers/fal.py +15 -3
  6. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/types.py +1 -1
  7. {fal-1.1.0 → fal-1.1.1}/tests/test_stability.py +13 -10
  8. {fal-1.1.0 → fal-1.1.1}/.gitignore +0 -0
  9. {fal-1.1.0 → fal-1.1.1}/README.md +0 -0
  10. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/SOURCES.txt +0 -0
  11. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/dependency_links.txt +0 -0
  12. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/entry_points.txt +0 -0
  13. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/requires.txt +0 -0
  14. {fal-1.1.0 → fal-1.1.1}/fal.egg-info/top_level.txt +0 -0
  15. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/README.md +0 -0
  16. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  17. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  18. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  19. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  20. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  21. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  22. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  23. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  24. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  25. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  26. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  27. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  28. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  29. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  30. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  31. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  32. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  33. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  34. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  35. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  36. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  37. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  38. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  39. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  40. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  41. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  42. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  43. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  44. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  45. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  46. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  47. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  48. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  49. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  50. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  51. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  52. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  53. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  54. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  55. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  56. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  57. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  58. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  59. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  60. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  61. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  62. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  63. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  64. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  65. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  66. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  67. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  68. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  69. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  70. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  71. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  72. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  73. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  74. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  75. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  76. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  77. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  78. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  79. {fal-1.1.0 → fal-1.1.1}/openapi-fal-rest/pyproject.toml +0 -0
  80. {fal-1.1.0 → fal-1.1.1}/openapi_rest.config.yaml +0 -0
  81. {fal-1.1.0 → fal-1.1.1}/pyproject.toml +0 -0
  82. {fal-1.1.0 → fal-1.1.1}/setup.cfg +0 -0
  83. {fal-1.1.0 → fal-1.1.1}/src/fal/__init__.py +0 -0
  84. {fal-1.1.0 → fal-1.1.1}/src/fal/__main__.py +0 -0
  85. {fal-1.1.0 → fal-1.1.1}/src/fal/_serialization.py +0 -0
  86. {fal-1.1.0 → fal-1.1.1}/src/fal/_version.py +0 -0
  87. {fal-1.1.0 → fal-1.1.1}/src/fal/api.py +0 -0
  88. {fal-1.1.0 → fal-1.1.1}/src/fal/app.py +0 -0
  89. {fal-1.1.0 → fal-1.1.1}/src/fal/apps.py +0 -0
  90. {fal-1.1.0 → fal-1.1.1}/src/fal/auth/__init__.py +0 -0
  91. {fal-1.1.0 → fal-1.1.1}/src/fal/auth/auth0.py +0 -0
  92. {fal-1.1.0 → fal-1.1.1}/src/fal/auth/local.py +0 -0
  93. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/__init__.py +0 -0
  94. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/apps.py +0 -0
  95. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/auth.py +0 -0
  96. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/debug.py +0 -0
  97. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/deploy.py +0 -0
  98. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/doctor.py +0 -0
  99. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/keys.py +0 -0
  100. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/main.py +0 -0
  101. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/parser.py +0 -0
  102. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/run.py +0 -0
  103. {fal-1.1.0 → fal-1.1.1}/src/fal/cli/secrets.py +0 -0
  104. {fal-1.1.0 → fal-1.1.1}/src/fal/console/__init__.py +0 -0
  105. {fal-1.1.0 → fal-1.1.1}/src/fal/console/icons.py +0 -0
  106. {fal-1.1.0 → fal-1.1.1}/src/fal/console/ux.py +0 -0
  107. {fal-1.1.0 → fal-1.1.1}/src/fal/container.py +0 -0
  108. {fal-1.1.0 → fal-1.1.1}/src/fal/exceptions/__init__.py +0 -0
  109. {fal-1.1.0 → fal-1.1.1}/src/fal/exceptions/_base.py +0 -0
  110. {fal-1.1.0 → fal-1.1.1}/src/fal/exceptions/auth.py +0 -0
  111. {fal-1.1.0 → fal-1.1.1}/src/fal/flags.py +0 -0
  112. {fal-1.1.0 → fal-1.1.1}/src/fal/logging/__init__.py +0 -0
  113. {fal-1.1.0 → fal-1.1.1}/src/fal/logging/isolate.py +0 -0
  114. {fal-1.1.0 → fal-1.1.1}/src/fal/logging/style.py +0 -0
  115. {fal-1.1.0 → fal-1.1.1}/src/fal/logging/trace.py +0 -0
  116. {fal-1.1.0 → fal-1.1.1}/src/fal/logging/user.py +0 -0
  117. {fal-1.1.0 → fal-1.1.1}/src/fal/py.typed +0 -0
  118. {fal-1.1.0 → fal-1.1.1}/src/fal/rest_client.py +0 -0
  119. {fal-1.1.0 → fal-1.1.1}/src/fal/sdk.py +0 -0
  120. {fal-1.1.0 → fal-1.1.1}/src/fal/sync.py +0 -0
  121. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/__init__.py +0 -0
  122. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/exceptions.py +0 -0
  123. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/__init__.py +0 -0
  124. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/providers/gcp.py +0 -0
  125. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/file/providers/r2.py +0 -0
  126. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/image/__init__.py +0 -0
  127. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/image/image.py +0 -0
  128. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/optimize.py +0 -0
  129. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/utils/__init__.py +0 -0
  130. {fal-1.1.0 → fal-1.1.1}/src/fal/toolkit/utils/download_utils.py +0 -0
  131. {fal-1.1.0 → fal-1.1.1}/src/fal/utils.py +0 -0
  132. {fal-1.1.0 → fal-1.1.1}/src/fal/workflows.py +0 -0
  133. {fal-1.1.0 → fal-1.1.1}/tests/__init__.py +0 -0
  134. {fal-1.1.0 → fal-1.1.1}/tests/cli/__init__.py +0 -0
  135. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_apps.py +0 -0
  136. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_auth.py +0 -0
  137. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_deploy.py +0 -0
  138. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_keys.py +0 -0
  139. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_run.py +0 -0
  140. {fal-1.1.0 → fal-1.1.1}/tests/cli/test_secrets.py +0 -0
  141. {fal-1.1.0 → fal-1.1.1}/tests/conftest.py +0 -0
  142. {fal-1.1.0 → fal-1.1.1}/tests/integration_test.py +0 -0
  143. {fal-1.1.0 → fal-1.1.1}/tests/mainify_package/__init__.py +0 -0
  144. {fal-1.1.0 → fal-1.1.1}/tests/mainify_package/impl.py +0 -0
  145. {fal-1.1.0 → fal-1.1.1}/tests/mainify_package/utils.py +0 -0
  146. {fal-1.1.0 → fal-1.1.1}/tests/mainify_target.py +0 -0
  147. {fal-1.1.0 → fal-1.1.1}/tests/test_apps.py +0 -0
  148. {fal-1.1.0 → fal-1.1.1}/tests/toolkit/file_test.py +0 -0
  149. {fal-1.1.0 → fal-1.1.1}/tests/toolkit/image_test.py +0 -0
  150. {fal-1.1.0 → fal-1.1.1}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fal
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fal
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.1.0'
16
- __version_tuple__ = version_tuple = (1, 1, 0)
15
+ __version__ = version = '1.1.1'
16
+ __version_tuple__ = version_tuple = (1, 1, 1)
@@ -22,6 +22,7 @@ from pydantic import BaseModel, Field
22
22
  from fal.toolkit.file.providers.fal import (
23
23
  FalCDNFileRepository,
24
24
  FalFileRepository,
25
+ FalFileRepositoryV2,
25
26
  InMemoryRepository,
26
27
  )
27
28
  from fal.toolkit.file.providers.gcp import GoogleStorageRepository
@@ -33,6 +34,7 @@ FileRepositoryFactory = Callable[[], FileRepository]
33
34
 
34
35
  BUILT_IN_REPOSITORIES: dict[RepositoryId, FileRepositoryFactory] = {
35
36
  "fal": lambda: FalFileRepository(),
37
+ "fal_v2": lambda: FalFileRepositoryV2(),
36
38
  "in_memory": lambda: InMemoryRepository(),
37
39
  "gcp_storage": lambda: GoogleStorageRepository(),
38
40
  "r2": lambda: R2Repository(),
@@ -26,8 +26,8 @@ GLOBAL_LIFECYCLE_PREFERENCE = ObjectLifecyclePreference(
26
26
 
27
27
 
28
28
  @dataclass
29
- class FalFileRepository(FileRepository):
30
- def save(self, file: FileData) -> str:
29
+ class FalFileRepositoryBase(FileRepository):
30
+ def _save(self, file: FileData, storage_type: str) -> str:
31
31
  key_creds = key_credentials()
32
32
  if not key_creds:
33
33
  raise FileUploadException("FAL_KEY must be set")
@@ -41,7 +41,7 @@ class FalFileRepository(FileRepository):
41
41
 
42
42
  grpc_host = os.environ.get("FAL_HOST", "api.alpha.fal.ai")
43
43
  rest_host = grpc_host.replace("api", "rest", 1)
44
- storage_url = f"https://{rest_host}/storage/upload/initiate"
44
+ storage_url = f"https://{rest_host}/storage/upload/initiate?storage_type={storage_type}"
45
45
 
46
46
  try:
47
47
  req = Request(
@@ -79,6 +79,18 @@ class FalFileRepository(FileRepository):
79
79
  return
80
80
 
81
81
 
82
+ @dataclass
83
+ class FalFileRepository(FalFileRepositoryBase):
84
+ def save(self, file: FileData) -> str:
85
+ return self._save(file, "gcs")
86
+
87
+
88
+ @dataclass
89
+ class FalFileRepositoryV2(FalFileRepositoryBase):
90
+ def save(self, file: FileData) -> str:
91
+ return self._save(file, "fal-cdn")
92
+
93
+
82
94
  @dataclass
83
95
  class InMemoryRepository(FileRepository):
84
96
  def save(
@@ -28,7 +28,7 @@ class FileData:
28
28
  self.file_name = file_name
29
29
 
30
30
 
31
- RepositoryId = Literal["fal", "in_memory", "gcp_storage", "r2", "cdn"]
31
+ RepositoryId = Literal["fal", "fal_v2", "in_memory", "gcp_storage", "r2", "cdn"]
32
32
 
33
33
 
34
34
  @dataclass
@@ -6,7 +6,7 @@ import fal
6
6
  import pytest
7
7
  from fal.api import FalServerlessError, Options
8
8
  from fal.container import ContainerImage
9
- from fal.toolkit.file.file import File
9
+ from fal.toolkit.file import File
10
10
  from pydantic import __version__ as pydantic_version
11
11
 
12
12
  PACKAGE_NAME = "fall"
@@ -556,23 +556,26 @@ def test_worker_env_vars(isolated_client):
556
556
  assert fal_key_secret, "FAL_KEY_SECRET is not set"
557
557
 
558
558
 
559
- def test_fal_storage(isolated_client):
560
- file = File.from_bytes(b"Hello fal storage from local", repository="fal")
561
- assert file.url.startswith(
562
- "https://storage.googleapis.com/isolate-dev-smiling-shark_toolkit_bucket/"
563
- )
559
+ @pytest.mark.parametrize(
560
+ "repo_type, url_prefix",
561
+ [
562
+ ("fal", "https://storage.googleapis.com/isolate-dev-smiling-shark_toolkit_bucket/"),
563
+ ("fal_v2", "https://v2.fal.media/files"),
564
+ ]
565
+ )
566
+ def test_fal_storage(isolated_client, repo_type, url_prefix):
567
+ file = File.from_bytes(b"Hello fal storage from local", repository=repo_type)
568
+ assert file.url.startswith(url_prefix)
564
569
  assert file.as_bytes().decode().endswith("local")
565
570
 
566
571
  @isolated_client(serve=True, requirements=[f"pydantic=={pydantic_version}"])
567
572
  def hello_file():
568
573
  # Run in the isolated environment
569
- return File.from_bytes(b"Hello fal storage from isolated", repository="fal")
574
+ return File.from_bytes(b"Hello fal storage from isolated", repository=repo_type)
570
575
 
571
576
  local_fn = hello_file.on(serve=False)
572
577
  file = local_fn()
573
- assert file.url.startswith(
574
- "https://storage.googleapis.com/isolate-dev-smiling-shark_toolkit_bucket/"
575
- )
578
+ assert file.url.startswith(url_prefix)
576
579
  assert file.as_bytes().decode().endswith("isolated")
577
580
 
578
581
 
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