codex-telegram 0.4.16__tar.gz → 0.5.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.
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/PKG-INFO +6 -2
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram/__init__.py +1 -1
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/PKG-INFO +6 -2
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/SOURCES.txt +5 -4
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_web_server_local_command.py +51 -1
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/routes.py +23 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/server.py +1 -1
- codex_telegram-0.5.0/web/static/dist/assets/codex-telegram-icon-black.svg +37 -0
- codex_telegram-0.5.0/web/static/dist/assets/codex-telegram-icon-ivory.svg +37 -0
- codex_telegram-0.5.0/web/static/dist/assets/codex-telegram-login-image.png +0 -0
- codex_telegram-0.5.0/web/static/dist/assets/index-CAl6dA4Q.js +53 -0
- codex_telegram-0.5.0/web/static/dist/assets/index-C_g51sA5.css +1 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/static/dist/index.html +3 -3
- codex-telegram-0.4.16/web/static/dist/assets/index-C8IolvBK.css +0 -1
- codex-telegram-0.4.16/web/static/dist/assets/index-ERTv2jbE.js +0 -53
- codex-telegram-0.4.16/web/static/dist/icons-tab-add.svg +0 -3
- codex-telegram-0.4.16/web/static/dist/icons-tab-close.svg +0 -3
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/LICENSE +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/MANIFEST.in +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/README.md +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/TELEGRAM.md +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/WEB.md +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/app_runtime/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/app_runtime/bootstrap.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/app_runtime/telegram_app.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/app_runtime/web_server.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/callbacks.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/features_ui.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/handlers.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/keyboard.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/projects_ui.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/skills_ui.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/bot/thread_ui.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/approval_flow.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/approval_guardian.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/client.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/client_pool.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/collaboration_mode.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/common.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/context.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/contracts.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/core.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/projects.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/review.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/system.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/command_router/threads.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/commands.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/event_forwarding.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/events.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex/protocol.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram/cli.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/dependency_links.txt +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/entry_points.txt +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/requires.txt +1 -1
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/codex_telegram.egg-info/top_level.txt +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/conf.toml.example +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/main.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/models/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/models/state.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/models/thread.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/models/user.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/pyproject.toml +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/setup.cfg +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_approval_guardian.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_approval_policy.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_bootstrap_update_check.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_callbacks_results.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_cli_entrypoint.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_codex_client.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_codex_client_pool.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_command_router.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_guardian_config.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_handlers_results.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_keyboard.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_main_approval_flow.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_normalize.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_pypi_check.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_single_instance.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_telegram_bot_config.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_thread_history.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/tests/test_web_runtime.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/approval_policy.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/config.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/local_command.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/logger.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/normalize.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/pypi_check.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/single_instance.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/utils/web_config.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/__init__.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/dependencies.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/runtime.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/thread_history.py +0 -0
- {codex-telegram-0.4.16 → codex_telegram-0.5.0}/web/workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-telegram
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
|
|
5
5
|
Author: heungtae
|
|
6
6
|
License: Apache License
|
|
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
218
218
|
Requires-Python: >=3.11
|
|
219
219
|
Description-Content-Type: text/markdown
|
|
220
220
|
License-File: LICENSE
|
|
221
|
+
Requires-Dist: python-telegram-bot>=20.0
|
|
222
|
+
Requires-Dist: fastapi>=0.111.0
|
|
223
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
224
|
+
Dynamic: license-file
|
|
221
225
|
|
|
222
226
|
# Codex Telegram + Web
|
|
223
227
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-telegram
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
|
|
5
5
|
Author: heungtae
|
|
6
6
|
License: Apache License
|
|
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
218
218
|
Requires-Python: >=3.11
|
|
219
219
|
Description-Content-Type: text/markdown
|
|
220
220
|
License-File: LICENSE
|
|
221
|
+
Requires-Dist: python-telegram-bot>=20.0
|
|
222
|
+
Requires-Dist: fastapi>=0.111.0
|
|
223
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
224
|
+
Dynamic: license-file
|
|
221
225
|
|
|
222
226
|
# Codex Telegram + Web
|
|
223
227
|
|
|
@@ -84,8 +84,9 @@ web/runtime.py
|
|
|
84
84
|
web/server.py
|
|
85
85
|
web/thread_history.py
|
|
86
86
|
web/workspace.py
|
|
87
|
-
web/static/dist/icons-tab-add.svg
|
|
88
|
-
web/static/dist/icons-tab-close.svg
|
|
89
87
|
web/static/dist/index.html
|
|
90
|
-
web/static/dist/assets/
|
|
91
|
-
web/static/dist/assets/
|
|
88
|
+
web/static/dist/assets/codex-telegram-icon-black.svg
|
|
89
|
+
web/static/dist/assets/codex-telegram-icon-ivory.svg
|
|
90
|
+
web/static/dist/assets/codex-telegram-login-image.png
|
|
91
|
+
web/static/dist/assets/index-CAl6dA4Q.js
|
|
92
|
+
web/static/dist/assets/index-C_g51sA5.css
|
|
@@ -105,7 +105,7 @@ class WebServerLocalCommandTests(unittest.TestCase):
|
|
|
105
105
|
body = response.body.decode("utf-8")
|
|
106
106
|
|
|
107
107
|
self.assertIn("<!doctype html>", body)
|
|
108
|
-
self.assertIn("<title>Codex
|
|
108
|
+
self.assertIn("<title>Codex Bridge</title>", body)
|
|
109
109
|
self.assertIn("/assets/", body)
|
|
110
110
|
|
|
111
111
|
def test_chat_messages_propagates_turn_start_failures(self):
|
|
@@ -365,6 +365,56 @@ class WebServerLocalCommandTests(unittest.TestCase):
|
|
|
365
365
|
self.assertEqual(409, ctx.exception.status_code)
|
|
366
366
|
self.assertEqual("Cannot switch project while a turn is running.", ctx.exception.detail)
|
|
367
367
|
|
|
368
|
+
def test_projects_open_explorer_resolves_path_from_project_profile(self):
|
|
369
|
+
app = create_web_app()
|
|
370
|
+
endpoint = next(
|
|
371
|
+
route.endpoint
|
|
372
|
+
for route in app.routes
|
|
373
|
+
if getattr(route, "path", None) == "/api/projects/open-explorer"
|
|
374
|
+
)
|
|
375
|
+
request = SimpleNamespace(cookies={COOKIE_NAME: self.session.token})
|
|
376
|
+
state.command_router.projects = SimpleNamespace(
|
|
377
|
+
load_project_profiles=lambda: (
|
|
378
|
+
[
|
|
379
|
+
{
|
|
380
|
+
"key": "work",
|
|
381
|
+
"name": "Work",
|
|
382
|
+
"path": "C:/Work/TCK/source/kosmos-application",
|
|
383
|
+
}
|
|
384
|
+
],
|
|
385
|
+
"default",
|
|
386
|
+
),
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
with (
|
|
390
|
+
patch("web.routes.platform.system", return_value="Windows"),
|
|
391
|
+
patch("web.routes.subprocess.Popen") as mock_popen,
|
|
392
|
+
):
|
|
393
|
+
body = asyncio.run(endpoint({"project_key": "work"}, request))
|
|
394
|
+
|
|
395
|
+
self.assertEqual({"ok": True}, body)
|
|
396
|
+
mock_popen.assert_called_once_with(
|
|
397
|
+
'explorer.exe /n,/e,"C:\\Work\\TCK\\source\\kosmos-application"'
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
def test_projects_open_explorer_rejects_unknown_project_key(self):
|
|
401
|
+
app = create_web_app()
|
|
402
|
+
endpoint = next(
|
|
403
|
+
route.endpoint
|
|
404
|
+
for route in app.routes
|
|
405
|
+
if getattr(route, "path", None) == "/api/projects/open-explorer"
|
|
406
|
+
)
|
|
407
|
+
request = SimpleNamespace(cookies={COOKIE_NAME: self.session.token})
|
|
408
|
+
state.command_router.projects = SimpleNamespace(
|
|
409
|
+
load_project_profiles=lambda: ([], "default"),
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
with self.assertRaises(HTTPException) as ctx:
|
|
413
|
+
asyncio.run(endpoint({"project_key": "missing"}, request))
|
|
414
|
+
|
|
415
|
+
self.assertEqual(404, ctx.exception.status_code)
|
|
416
|
+
self.assertEqual("project_key was not found", ctx.exception.detail)
|
|
417
|
+
|
|
368
418
|
def test_projects_open_thread_creates_thread_without_switching_selected_project(self):
|
|
369
419
|
app = create_web_app()
|
|
370
420
|
endpoint = next(
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import json
|
|
3
3
|
import logging
|
|
4
|
+
import os
|
|
5
|
+
import platform
|
|
4
6
|
import shlex
|
|
7
|
+
import subprocess
|
|
5
8
|
from importlib import import_module
|
|
6
9
|
from typing import Any
|
|
7
10
|
|
|
@@ -597,6 +600,26 @@ def register_project_routes(app: FastAPI) -> None:
|
|
|
597
600
|
raise HTTPException(status_code=409, detail="Cannot switch project while a turn is running.")
|
|
598
601
|
return await route_command("/project", [target], session.user_id)
|
|
599
602
|
|
|
603
|
+
@app.post("/api/projects/open-explorer")
|
|
604
|
+
async def open_project_in_explorer(payload: dict[str, Any], request: Request) -> dict[str, Any]:
|
|
605
|
+
await session_from_request(request)
|
|
606
|
+
project_key = _required_str(payload, "project_key")
|
|
607
|
+
project = _project_profile_by_key(project_key)
|
|
608
|
+
if project is None:
|
|
609
|
+
raise HTTPException(status_code=404, detail="project_key was not found")
|
|
610
|
+
path = project["path"]
|
|
611
|
+
try:
|
|
612
|
+
if platform.system() == "Windows":
|
|
613
|
+
windows_path = os.path.normpath(path)
|
|
614
|
+
subprocess.Popen(f'explorer.exe /n,/e,"{windows_path}"')
|
|
615
|
+
elif platform.system() == "Darwin":
|
|
616
|
+
subprocess.Popen(["open", path])
|
|
617
|
+
else:
|
|
618
|
+
subprocess.Popen(["xdg-open", path])
|
|
619
|
+
except Exception as exc:
|
|
620
|
+
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
|
621
|
+
return {"ok": True}
|
|
622
|
+
|
|
600
623
|
@app.post("/api/projects/open-thread")
|
|
601
624
|
async def open_project_thread(payload: dict[str, Any], request: Request) -> dict[str, Any]:
|
|
602
625
|
session = await session_from_request(request)
|
|
@@ -18,7 +18,7 @@ def create_web_app() -> FastAPI:
|
|
|
18
18
|
route_module.run_bang_command = run_bang_command
|
|
19
19
|
route_module.get_guardian_settings = get_guardian_settings
|
|
20
20
|
route_module.save_guardian_settings = save_guardian_settings
|
|
21
|
-
app = FastAPI(title="Codex
|
|
21
|
+
app = FastAPI(title="Codex Bridge", version=__version__)
|
|
22
22
|
app.mount("/assets", StaticFiles(directory=str(resolved_assets_dir())), name="assets")
|
|
23
23
|
route_module.register_web_routes(app)
|
|
24
24
|
return app
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
3
|
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
4
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="1080.000000pt" height="1080.000000pt" viewBox="0 0 1080.000000 1080.000000"
|
|
6
|
+
preserveAspectRatio="xMidYMid meet">
|
|
7
|
+
|
|
8
|
+
<g transform="translate(0.000000,1080.000000) scale(0.100000,-0.100000)"
|
|
9
|
+
fill="#201D1D" stroke="none">
|
|
10
|
+
<path d="M7752 8284 c-82 -41 -132 -121 -132 -211 0 -81 18 -124 74 -179 70
|
|
11
|
+
-71 139 -89 241 -63 56 14 131 79 156 134 39 85 13 222 -52 282 -73 66 -196
|
|
12
|
+
82 -287 37z"/>
|
|
13
|
+
<path d="M2544 7381 c-40 -10 -121 -55 -160 -89 -25 -21 -723 -934 -1324
|
|
14
|
+
-1732 -119 -158 -144 -215 -144 -330 0 -63 6 -99 22 -140 16 -40 215 -308 708
|
|
15
|
+
-955 377 -495 704 -920 727 -943 23 -24 69 -58 102 -75 57 -30 66 -32 170 -32
|
|
16
|
+
99 0 116 3 167 27 77 36 152 112 191 196 29 60 32 76 31 157 -1 134 -15 162
|
|
17
|
+
-231 445 -575 755 -1003 1320 -1003 1325 0 3 260 346 577 763 317 416 589 777
|
|
18
|
+
605 802 66 107 73 251 19 364 -43 90 -91 140 -177 183 -67 33 -85 37 -162 40
|
|
19
|
+
-48 1 -101 -1 -118 -6z"/>
|
|
20
|
+
<path d="M8029 7372 c-108 -36 -184 -106 -237 -219 -23 -50 -27 -71 -27 -153
|
|
21
|
+
0 -82 4 -103 27 -152 15 -33 269 -376 617 -832 325 -427 591 -778 591 -781 0
|
|
22
|
+
-3 -268 -357 -595 -788 -420 -552 -602 -798 -617 -837 -17 -42 -22 -76 -23
|
|
23
|
+
-146 0 -84 2 -95 38 -166 43 -88 102 -146 187 -187 49 -23 67 -26 165 -26 101
|
|
24
|
+
0 115 2 166 29 31 15 79 51 107 80 69 72 1389 1809 1418 1867 32 62 47 149 39
|
|
25
|
+
213 -12 86 -47 156 -145 286 -589 782 -1272 1675 -1309 1713 -25 26 -75 62
|
|
26
|
+
-110 79 -82 41 -203 49 -292 20z"/>
|
|
27
|
+
<path d="M7025 7251 c-27 -9 -462 -198 -965 -418 -503 -220 -1363 -595 -1910
|
|
28
|
+
-834 -646 -282 -1007 -444 -1028 -463 -98 -86 -105 -250 -14 -344 27 -28 143
|
|
29
|
+
-93 439 -246 l403 -207 377 262 c208 144 518 360 688 479 803 560 1232 858
|
|
30
|
+
1251 868 23 12 48 1 42 -20 -3 -13 -453 -446 -1586 -1528 -272 -259 -378 -367
|
|
31
|
+
-395 -400 -22 -44 -22 -52 -25 -495 -2 -247 0 -474 3 -502 9 -72 55 -140 120
|
|
32
|
+
-175 40 -22 63 -28 118 -28 80 0 122 15 168 62 19 19 141 211 272 426 l239
|
|
33
|
+
391 81 -41 c45 -22 277 -142 515 -265 360 -186 443 -226 487 -230 90 -9 187
|
|
34
|
+
37 230 111 17 30 135 501 425 1696 432 1782 415 1701 371 1788 -57 111 -183
|
|
35
|
+
158 -306 113z"/>
|
|
36
|
+
</g>
|
|
37
|
+
</svg>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
3
|
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
4
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="1080.000000pt" height="1080.000000pt" viewBox="0 0 1080.000000 1080.000000"
|
|
6
|
+
preserveAspectRatio="xMidYMid meet">
|
|
7
|
+
|
|
8
|
+
<g transform="translate(0.000000,1080.000000) scale(0.100000,-0.100000)"
|
|
9
|
+
fill="#FBFAF5" stroke="none">
|
|
10
|
+
<path d="M7752 8284 c-82 -41 -132 -121 -132 -211 0 -81 18 -124 74 -179 70
|
|
11
|
+
-71 139 -89 241 -63 56 14 131 79 156 134 39 85 13 222 -52 282 -73 66 -196
|
|
12
|
+
82 -287 37z"/>
|
|
13
|
+
<path d="M2544 7381 c-40 -10 -121 -55 -160 -89 -25 -21 -723 -934 -1324
|
|
14
|
+
-1732 -119 -158 -144 -215 -144 -330 0 -63 6 -99 22 -140 16 -40 215 -308 708
|
|
15
|
+
-955 377 -495 704 -920 727 -943 23 -24 69 -58 102 -75 57 -30 66 -32 170 -32
|
|
16
|
+
99 0 116 3 167 27 77 36 152 112 191 196 29 60 32 76 31 157 -1 134 -15 162
|
|
17
|
+
-231 445 -575 755 -1003 1320 -1003 1325 0 3 260 346 577 763 317 416 589 777
|
|
18
|
+
605 802 66 107 73 251 19 364 -43 90 -91 140 -177 183 -67 33 -85 37 -162 40
|
|
19
|
+
-48 1 -101 -1 -118 -6z"/>
|
|
20
|
+
<path d="M8029 7372 c-108 -36 -184 -106 -237 -219 -23 -50 -27 -71 -27 -153
|
|
21
|
+
0 -82 4 -103 27 -152 15 -33 269 -376 617 -832 325 -427 591 -778 591 -781 0
|
|
22
|
+
-3 -268 -357 -595 -788 -420 -552 -602 -798 -617 -837 -17 -42 -22 -76 -23
|
|
23
|
+
-146 0 -84 2 -95 38 -166 43 -88 102 -146 187 -187 49 -23 67 -26 165 -26 101
|
|
24
|
+
0 115 2 166 29 31 15 79 51 107 80 69 72 1389 1809 1418 1867 32 62 47 149 39
|
|
25
|
+
213 -12 86 -47 156 -145 286 -589 782 -1272 1675 -1309 1713 -25 26 -75 62
|
|
26
|
+
-110 79 -82 41 -203 49 -292 20z"/>
|
|
27
|
+
<path d="M7025 7251 c-27 -9 -462 -198 -965 -418 -503 -220 -1363 -595 -1910
|
|
28
|
+
-834 -646 -282 -1007 -444 -1028 -463 -98 -86 -105 -250 -14 -344 27 -28 143
|
|
29
|
+
-93 439 -246 l403 -207 377 262 c208 144 518 360 688 479 803 560 1232 858
|
|
30
|
+
1251 868 23 12 48 1 42 -20 -3 -13 -453 -446 -1586 -1528 -272 -259 -378 -367
|
|
31
|
+
-395 -400 -22 -44 -22 -52 -25 -495 -2 -247 0 -474 3 -502 9 -72 55 -140 120
|
|
32
|
+
-175 40 -22 63 -28 118 -28 80 0 122 15 168 62 19 19 141 211 272 426 l239
|
|
33
|
+
391 81 -41 c45 -22 277 -142 515 -265 360 -186 443 -226 487 -230 90 -9 187
|
|
34
|
+
37 230 111 17 30 135 501 425 1696 432 1782 415 1701 371 1788 -57 111 -183
|
|
35
|
+
158 -306 113z"/>
|
|
36
|
+
</g>
|
|
37
|
+
</svg>
|