dimples 1.0.2__tar.gz → 1.1.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.
- {dimples-1.0.2 → dimples-1.1.0}/PKG-INFO +1 -1
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/state.py +1 -1
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/terminal.py +1 -1
- {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/octopus.py +1 -6
- {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/shared.py +6 -5
- {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/start.py +1 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/dispatcher.py +2 -1
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/push.py +2 -1
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/session.py +6 -2
- {dimples-1.0.2 → dimples-1.1.0}/dimples/station/shared.py +6 -5
- {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/__init__.py +35 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/PKG-INFO +1 -1
- {dimples-1.0.2 → dimples-1.1.0}/setup.py +1 -1
- {dimples-1.0.2 → dimples-1.1.0}/README.md +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/archivist.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/checkpoint.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/commands.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/creator.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/group.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_expel.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_invite.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_join.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_query.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_quit.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_reset.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/grp_resign.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/cpu/handshake.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/facebook.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/messenger.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/session.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/network/transition.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/packer.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/client/processor.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/anonymous.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/ans.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/archivist.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/btc.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/compatible.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/entity.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/meta.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/compat/network.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/account.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/message.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/dbi/session.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/facebook.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/messenger.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/packer.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/processer.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/ans.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/block.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/handshake.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/login.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/mute.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/protocol/report.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/register.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/common/session.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/flexible.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/gate.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/gatekeeper.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/mars.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/mtp.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/mars.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/protocol/ws.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/queue.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/seeker.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/session.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/conn/ws.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/account.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/base.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/document.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group_history.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/group_keys.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/login.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/meta.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/private.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/station.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/dos/user.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/message.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/session.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_cipherkey.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_document.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group_history.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_group_keys.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_login.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_message.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_meta.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_private.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_station.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/database/t_user.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/edge/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/admin.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/builder.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/delegate.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/emitter.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/helper.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/manager.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/group/packer.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/register/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/register/base.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/register/ext.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/register/run.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/register/shared.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/archivist.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/ans.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/document.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/handshake.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/login.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/cpu/report.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/messenger.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/packer.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/processor.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/session_center.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/server/trace.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/station/__init__.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/station/handler.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/station/start.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/cache.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/config.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/dos.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples/utils/log.py +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/SOURCES.txt +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/dependency_links.txt +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/entry_points.txt +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/requires.txt +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/dimples.egg-info/top_level.txt +0 -0
- {dimples-1.0.2 → dimples-1.1.0}/setup.cfg +0 -0
|
@@ -125,7 +125,7 @@ class Terminal(DaemonRunner, DeviceMixin, Logging, StateDelegate):
|
|
|
125
125
|
async def exit_state(self, state: SessionState, ctx: StateMachine, now: float):
|
|
126
126
|
# called after state changed
|
|
127
127
|
current = ctx.current_state
|
|
128
|
-
self.info(msg='server state changed: %s -> %s' % (state, current))
|
|
128
|
+
self.info(msg='server state changed: %s -> %s, %s' % (state, current, self.session.station))
|
|
129
129
|
if isinstance(current, SessionState):
|
|
130
130
|
index = current.index
|
|
131
131
|
else:
|
|
@@ -380,15 +380,10 @@ def create_messenger(facebook: ClientFacebook, database: MessageDBI,
|
|
|
380
380
|
def create_terminal(messenger: OctopusMessenger) -> Terminal:
|
|
381
381
|
terminal = Terminal(messenger=messenger)
|
|
382
382
|
messenger.terminal = terminal
|
|
383
|
-
|
|
384
|
-
thr.start()
|
|
383
|
+
Runner.thread_run(terminal)
|
|
385
384
|
return terminal
|
|
386
385
|
|
|
387
386
|
|
|
388
|
-
def _start_terminal(terminal: Terminal):
|
|
389
|
-
Runner.sync_run(main=terminal.start())
|
|
390
|
-
|
|
391
|
-
|
|
392
387
|
async def update_station(station: Station, database: SessionDBI):
|
|
393
388
|
Log.info(msg='update station: %s' % station)
|
|
394
389
|
# SP ID
|
|
@@ -110,13 +110,14 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
|
|
|
110
110
|
adb.show_info()
|
|
111
111
|
mdb.show_info()
|
|
112
112
|
sdb.show_info()
|
|
113
|
-
# default provider
|
|
113
|
+
# update neighbor stations (default provider)
|
|
114
114
|
provider = ProviderInfo.GSP
|
|
115
|
-
# add neighbors
|
|
116
115
|
neighbors = config.neighbors
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
if len(neighbors) > 0:
|
|
117
|
+
await sdb.remove_stations(provider=provider)
|
|
118
|
+
for node in neighbors:
|
|
119
|
+
print('adding neighbor node: %s' % node)
|
|
120
|
+
await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
|
|
120
121
|
return adb, mdb, sdb
|
|
121
122
|
|
|
122
123
|
|
|
@@ -133,7 +133,8 @@ class Dispatcher(MessageDeliver, Logging):
|
|
|
133
133
|
assert db is not None, 'dispatcher not initialized'
|
|
134
134
|
runner = Roamer(database=db)
|
|
135
135
|
self.__roamer = runner
|
|
136
|
-
Runner.async_run(coroutine=runner.start())
|
|
136
|
+
# Runner.async_run(coroutine=runner.start())
|
|
137
|
+
Runner.thread_run(runner)
|
|
137
138
|
return runner
|
|
138
139
|
|
|
139
140
|
def add_roaming(self, user: ID, station: ID) -> bool:
|
|
@@ -124,7 +124,8 @@ class PushCenter(DaemonRunner, Logging):
|
|
|
124
124
|
self.__queue = MessageQueue()
|
|
125
125
|
self.__keeper = BadgeKeeper()
|
|
126
126
|
self.__service: Optional[PushService] = None
|
|
127
|
-
Runner.async_run(coroutine=self.start())
|
|
127
|
+
# Runner.async_run(coroutine=self.start())
|
|
128
|
+
Runner.thread_run(self)
|
|
128
129
|
|
|
129
130
|
@property
|
|
130
131
|
def service(self) -> Optional[PushService]:
|
|
@@ -95,7 +95,9 @@ class ServerSession(BaseSession):
|
|
|
95
95
|
if super().set_identifier(identifier=identifier):
|
|
96
96
|
session_change_id(session=self, new_id=identifier, old_id=old)
|
|
97
97
|
# load cached message asynchronously
|
|
98
|
-
|
|
98
|
+
crt = load_cached_messages(session=self)
|
|
99
|
+
# Runner.async_run(coroutine=crt)
|
|
100
|
+
Runner.thread_run(crt)
|
|
99
101
|
return True
|
|
100
102
|
|
|
101
103
|
# Override
|
|
@@ -103,7 +105,9 @@ class ServerSession(BaseSession):
|
|
|
103
105
|
if super().set_active(active=active, when=when):
|
|
104
106
|
session_change_active(session=self, active=active)
|
|
105
107
|
# load cached message asynchronously
|
|
106
|
-
|
|
108
|
+
crt = load_cached_messages(session=self)
|
|
109
|
+
# Runner.async_run(coroutine=crt)
|
|
110
|
+
Runner.thread_run(crt)
|
|
107
111
|
return True
|
|
108
112
|
|
|
109
113
|
# Override
|
|
@@ -117,13 +117,14 @@ async def create_database(config: Config) -> Tuple[AccountDBI, MessageDBI, Sessi
|
|
|
117
117
|
adb.show_info()
|
|
118
118
|
mdb.show_info()
|
|
119
119
|
sdb.show_info()
|
|
120
|
-
# default provider
|
|
120
|
+
# update neighbor stations (default provider)
|
|
121
121
|
provider = ProviderInfo.GSP
|
|
122
|
-
# add neighbors
|
|
123
122
|
neighbors = config.neighbors
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
if len(neighbors) > 0:
|
|
124
|
+
await sdb.remove_stations(provider=provider)
|
|
125
|
+
for node in neighbors:
|
|
126
|
+
print('adding neighbor node: %s' % node)
|
|
127
|
+
await sdb.add_station(identifier=None, host=node.host, port=node.port, provider=provider)
|
|
127
128
|
return adb, mdb, sdb
|
|
128
129
|
|
|
129
130
|
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
-- Albert Moky @ Jan. 23, 2019
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
|
+
import threading
|
|
36
37
|
from typing import Optional, List, Dict
|
|
37
38
|
|
|
38
39
|
from dimsdk import md5, sha1, sha256, keccak256, ripemd160
|
|
@@ -142,3 +143,37 @@ __all__ = [
|
|
|
142
143
|
'template_replace',
|
|
143
144
|
|
|
144
145
|
]
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
#
|
|
149
|
+
# Patch for Runner
|
|
150
|
+
#
|
|
151
|
+
async def _run_forever(runner: Runner):
|
|
152
|
+
await runner.start()
|
|
153
|
+
while True:
|
|
154
|
+
await Runner.sleep(seconds=2.0)
|
|
155
|
+
if not runner.running:
|
|
156
|
+
break
|
|
157
|
+
Log.warning(msg='runner stopped: %s' % runner)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _start_runner(runner: Runner):
|
|
161
|
+
Runner.sync_run(main=_run_forever(runner=runner))
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def _start_coroutine(coroutine):
|
|
165
|
+
Runner.sync_run(main=coroutine)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _bg_run(target):
|
|
169
|
+
if isinstance(target, Runner):
|
|
170
|
+
fn = _start_runner
|
|
171
|
+
else:
|
|
172
|
+
fn = _start_coroutine
|
|
173
|
+
thr = threading.Thread(target=fn, args=(target,), daemon=True)
|
|
174
|
+
thr.start()
|
|
175
|
+
return thr
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
""" Run coroutine in background thread """
|
|
179
|
+
Runner.thread_run = _bg_run
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|