pybritive 2.2.1__tar.gz → 2.2.3__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.
- {pybritive-2.2.1/src/pybritive.egg-info → pybritive-2.2.3}/PKG-INFO +1 -1
- pybritive-2.2.3/src/pybritive/__init__.py +1 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/britive_cli.py +34 -38
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/cli_interface.py +15 -15
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/kube_config_builder.py +8 -4
- {pybritive-2.2.1 → pybritive-2.2.3/src/pybritive.egg-info}/PKG-INFO +1 -1
- pybritive-2.2.1/src/pybritive/__init__.py +0 -1
- {pybritive-2.2.1 → pybritive-2.2.3}/LICENSE +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/README.md +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/pyproject.toml +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/setup.cfg +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/__init__.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/backend.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/browser.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/mode.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/output_format.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/profile_type.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/ssh_key_source.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/choices/ssh_push_public_key.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/__init__.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/api.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/aws.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/cache.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/checkin.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/checkout.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/clear.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/configure.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/login.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/logout.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/ls.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/request.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/secret.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/ssh.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/commands/user.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/__init__.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/api.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/api_command.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/bash_gte_42.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/powershell_completion.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/completers/profile.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/__init__.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/api_method_argument_decorator.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/aws_credential_process.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/build_britive.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/cache.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/cloud_credential_printer.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/config.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/credentials.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/encryption.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/k8s_exec.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/k8s_exec_credential_builder.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/profile_argument_decorator.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/helpers/split.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/__init__.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/alias.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/aws_console_duration.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/aws_credentials_file.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/aws_profile.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/blocktime.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/britive_options.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/browser.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/checked_out.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/configure_alias.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/configure_backend.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/configure_prompt.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/configure_tenant.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/console.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/extend.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/federation_provider.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/file.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/force_renew.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/gcloud_key_file.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/justification.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/maxpolltime.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/mode.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/otp.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/output_format.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/passphrase.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/profile_type.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/query.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/silent.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ssh_hostname.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ssh_key_source.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ssh_port.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ssh_push_public_key.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ssh_username.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/tenant.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ticket_id.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/ticket_type.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/token.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/verbose.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive/options/version.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive.egg-info/SOURCES.txt +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive.egg-info/dependency_links.txt +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive.egg-info/entry_points.txt +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive.egg-info/requires.txt +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/src/pybritive.egg-info/top_level.txt +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0100_version.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0200_configure.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0300_login.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0400_ls.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0500_api.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0600_secret.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0700_cache.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0800_checkout.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_0900_checkin.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_1000_clear.py +0 -0
- {pybritive-2.2.1 → pybritive-2.2.3}/tests/test_1100_logout.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.2.3'
|
|
@@ -465,26 +465,20 @@ class BritiveCli:
|
|
|
465
465
|
data.append(row)
|
|
466
466
|
self.print(data, ignore_silent=True)
|
|
467
467
|
|
|
468
|
-
# temporary fix till the new API is updated to return `
|
|
469
|
-
def
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
for env in profile.get('environments', [])
|
|
483
|
-
if env['environmentId'] == env_id
|
|
484
|
-
),
|
|
485
|
-
{},
|
|
486
|
-
)
|
|
487
|
-
return {}
|
|
468
|
+
# temporary fix till the new API is updated to return `sessionAttributes`
|
|
469
|
+
def _get_missing_session_attributes(self, app_id: str, profile_id: str) -> dict:
|
|
470
|
+
if not self.listed_profiles:
|
|
471
|
+
self.listed_profiles = self.b.my_access.list_profiles()
|
|
472
|
+
return next(
|
|
473
|
+
(
|
|
474
|
+
profile['sessionAttributes']
|
|
475
|
+
for app in self.listed_profiles
|
|
476
|
+
if app['appContainerId'] == app_id
|
|
477
|
+
for profile in app.get('profiles', [])
|
|
478
|
+
if profile['profileId'] == profile_id
|
|
479
|
+
),
|
|
480
|
+
[],
|
|
481
|
+
)
|
|
488
482
|
|
|
489
483
|
def _set_available_profiles(self, from_cache_command=False, profile_type: Optional[str] = None):
|
|
490
484
|
if not self.available_profiles:
|
|
@@ -509,23 +503,23 @@ class BritiveCli:
|
|
|
509
503
|
env = envs[env_id]
|
|
510
504
|
profile = profiles[profile_id]
|
|
511
505
|
row = {
|
|
512
|
-
'
|
|
506
|
+
'2_part_profile_format_allowed': app['requiresHierarchicalModel'],
|
|
507
|
+
'app_description': app['appDescription'],
|
|
513
508
|
'app_id': app_id,
|
|
509
|
+
'app_name': app['catalogAppDisplayName'],
|
|
514
510
|
'app_type': app['catalogAppName'],
|
|
515
|
-
'
|
|
516
|
-
'env_name': env['environmentName'],
|
|
511
|
+
'env_description': env['environmentDescription'],
|
|
517
512
|
'env_id': env_id,
|
|
513
|
+
'env_name': env['environmentName'],
|
|
514
|
+
'env_properties': env['profileEnvironmentProperties'],
|
|
518
515
|
'env_short_name': env['alternateEnvironmentName'],
|
|
519
|
-
'env_description': env['environmentDescription'],
|
|
520
|
-
'profile_name': profile['papName'],
|
|
521
|
-
'profile_id': profile_id,
|
|
522
516
|
'profile_allows_console': app.get('consoleAccess', False),
|
|
523
517
|
'profile_allows_programmatic': app.get('programmaticAccess', False),
|
|
524
518
|
'profile_description': profile['papDescription'],
|
|
525
|
-
'
|
|
526
|
-
'
|
|
527
|
-
|
|
528
|
-
|
|
519
|
+
'profile_id': profile_id,
|
|
520
|
+
'profile_name': profile['papName'],
|
|
521
|
+
'session_attributes': profile.get(
|
|
522
|
+
'sessionAttributes', self._get_missing_session_attributes(app_id, profile_id)
|
|
529
523
|
),
|
|
530
524
|
}
|
|
531
525
|
if row not in access_output:
|
|
@@ -539,21 +533,21 @@ class BritiveCli:
|
|
|
539
533
|
profiles = profiles['data']
|
|
540
534
|
for item in profiles:
|
|
541
535
|
row = {
|
|
542
|
-
'
|
|
536
|
+
'2_part_profile_format_allowed': False,
|
|
537
|
+
'app_description': None,
|
|
543
538
|
'app_id': None,
|
|
539
|
+
'app_name': None,
|
|
544
540
|
'app_type': 'Resources',
|
|
545
|
-
'
|
|
546
|
-
'env_name': item['resourceName'],
|
|
541
|
+
'env_description': None,
|
|
547
542
|
'env_id': item['resourceId'],
|
|
543
|
+
'env_name': item['resourceName'],
|
|
544
|
+
'env_properties': item.get('resourceLabels', {}),
|
|
548
545
|
'env_short_name': item['resourceName'],
|
|
549
|
-
'env_description': None,
|
|
550
|
-
'profile_name': item['profileName'],
|
|
551
|
-
'profile_id': item['profileId'],
|
|
552
546
|
'profile_allows_console': False,
|
|
553
547
|
'profile_allows_programmatic': True,
|
|
554
548
|
'profile_description': None,
|
|
555
|
-
'
|
|
556
|
-
'
|
|
549
|
+
'profile_id': item['profileId'],
|
|
550
|
+
'profile_name': item['profileName'],
|
|
557
551
|
}
|
|
558
552
|
data.append(row)
|
|
559
553
|
self.available_profiles = data
|
|
@@ -584,6 +578,7 @@ class BritiveCli:
|
|
|
584
578
|
'profile': p['profile_name'],
|
|
585
579
|
'url': url,
|
|
586
580
|
'cert': cert,
|
|
581
|
+
'session_attributes': p['session_attributes'],
|
|
587
582
|
}
|
|
588
583
|
)
|
|
589
584
|
|
|
@@ -978,6 +973,7 @@ class BritiveCli:
|
|
|
978
973
|
if self._profile_is_for_resource(profile=profile, profile_type=profile_type):
|
|
979
974
|
app_type = 'Resources'
|
|
980
975
|
k8s_processor = None
|
|
976
|
+
console_fallback = False
|
|
981
977
|
credentials = self._resource_checkout(
|
|
982
978
|
blocktime=blocktime,
|
|
983
979
|
justification=justification,
|
|
@@ -3,21 +3,21 @@ import sys
|
|
|
3
3
|
|
|
4
4
|
import click
|
|
5
5
|
|
|
6
|
-
from .commands.api import api as command_api
|
|
7
|
-
from .commands.aws import aws as group_aws
|
|
8
|
-
from .commands.cache import cache as group_cache
|
|
9
|
-
from .commands.checkin import checkin as command_checkin
|
|
10
|
-
from .commands.checkout import checkout as command_checkout
|
|
11
|
-
from .commands.clear import clear as group_clear
|
|
12
|
-
from .commands.configure import configure as group_configure
|
|
13
|
-
from .commands.login import login as command_login
|
|
14
|
-
from .commands.logout import logout as command_logout
|
|
15
|
-
from .commands.ls import ls as group_ls
|
|
16
|
-
from .commands.request import request as group_request
|
|
17
|
-
from .commands.secret import secret as group_secret
|
|
18
|
-
from .commands.ssh import ssh as group_ssh
|
|
19
|
-
from .commands.user import user as command_user
|
|
20
|
-
from .options.britive_options import britive_options
|
|
6
|
+
from pybritive.commands.api import api as command_api
|
|
7
|
+
from pybritive.commands.aws import aws as group_aws
|
|
8
|
+
from pybritive.commands.cache import cache as group_cache
|
|
9
|
+
from pybritive.commands.checkin import checkin as command_checkin
|
|
10
|
+
from pybritive.commands.checkout import checkout as command_checkout
|
|
11
|
+
from pybritive.commands.clear import clear as group_clear
|
|
12
|
+
from pybritive.commands.configure import configure as group_configure
|
|
13
|
+
from pybritive.commands.login import login as command_login
|
|
14
|
+
from pybritive.commands.logout import logout as command_logout
|
|
15
|
+
from pybritive.commands.ls import ls as group_ls
|
|
16
|
+
from pybritive.commands.request import request as group_request
|
|
17
|
+
from pybritive.commands.secret import secret as group_secret
|
|
18
|
+
from pybritive.commands.ssh import ssh as group_ssh
|
|
19
|
+
from pybritive.commands.user import user as command_user
|
|
20
|
+
from pybritive.options.britive_options import britive_options
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def safe_cli():
|
|
@@ -69,7 +69,7 @@ def parse_profiles(profiles, aliases):
|
|
|
69
69
|
cluster_names = {}
|
|
70
70
|
assigned_aliases = []
|
|
71
71
|
for profile in profiles:
|
|
72
|
-
env_profile = f
|
|
72
|
+
env_profile = f'{sanitize(profile["env"])}-{sanitize(profile["profile"].lower())}'
|
|
73
73
|
if env_profile not in cluster_names:
|
|
74
74
|
app = BritiveCli.escape_profile_element(profile['app'])
|
|
75
75
|
env = BritiveCli.escape_profile_element(profile['env'])
|
|
@@ -84,8 +84,9 @@ def parse_profiles(profiles, aliases):
|
|
|
84
84
|
'url': profile['url'],
|
|
85
85
|
'cert': profile['cert'],
|
|
86
86
|
'escaped_profile': escaped_profile_str,
|
|
87
|
-
'profile': f
|
|
87
|
+
'profile': f'{profile["app"]}/{profile["env"]}/{profile["profile"]}'.lower(),
|
|
88
88
|
'alias': alias,
|
|
89
|
+
'session_attributes': profile['session_attributes'],
|
|
89
90
|
}
|
|
90
91
|
cluster_names[env_profile]['apps'].append(sanitize(profile['app']))
|
|
91
92
|
return [cluster_names, assigned_aliases]
|
|
@@ -129,7 +130,6 @@ def build_tenant_config(tenant, cluster_names, username, cli: BritiveCli):
|
|
|
129
130
|
)
|
|
130
131
|
contexts = []
|
|
131
132
|
clusters = []
|
|
132
|
-
|
|
133
133
|
for env_profile, details in cluster_names.items():
|
|
134
134
|
if len(details['apps']) == 1:
|
|
135
135
|
names = [env_profile]
|
|
@@ -162,7 +162,11 @@ def build_tenant_config(tenant, cluster_names, username, cli: BritiveCli):
|
|
|
162
162
|
contexts.append(
|
|
163
163
|
{
|
|
164
164
|
'name': details.get('alias') or f'{tenant}-{name}',
|
|
165
|
-
'context': {
|
|
165
|
+
'context': {
|
|
166
|
+
'cluster': f'{tenant}-{name}',
|
|
167
|
+
'user': username,
|
|
168
|
+
**{attr['mappingName']: attr['attributeValue'] for attr in details['session_attributes']},
|
|
169
|
+
},
|
|
166
170
|
}
|
|
167
171
|
)
|
|
168
172
|
return [clusters, contexts, users]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.2.1'
|
|
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
|