From b1c64d2cc8e0200b08a29662fd974ca336afd862 Mon Sep 17 00:00:00 2001 From: Yax <1949284+kianby@users.noreply.github.com> Date: Fri, 25 Nov 2022 19:57:37 +0100 Subject: [PATCH] More pythonic singleton with module. Apply pylint recommandations --- Makefile | 10 +- config.ini | 4 +- stacosys.sublime-workspace | 3469 +++++++++++++++-- stacosys/core/rss.py | 66 - stacosys/interface/form.py | 11 +- stacosys/interface/web/admin.py | 19 +- stacosys/run.py | 51 +- stacosys/service/__init__.py | 10 + .../config.py => service/configuration.py} | 32 +- stacosys/{core/mailer.py => service/mail.py} | 18 +- stacosys/service/rssfeed.py | 63 + tests/test_api.py | 1 - tests/test_config.py | 30 +- tests/test_form.py | 3 +- 14 files changed, 3330 insertions(+), 457 deletions(-) delete mode 100644 stacosys/core/rss.py create mode 100644 stacosys/service/__init__.py rename stacosys/{conf/config.py => service/configuration.py} (76%) rename stacosys/{core/mailer.py => service/mail.py} (71%) create mode 100644 stacosys/service/rssfeed.py diff --git a/Makefile b/Makefile index 4ee41ee..16fd38e 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,15 @@ all: black test typehint lint black: - isort --multi-line 3 --profile black stacosys/ - black stacosys/ + poetry run isort --multi-line 3 --profile black stacosys/ + poetry run black stacosys/ test: - pytest + poetry run pytest typehint: - mypy --ignore-missing-imports stacosys/ + poetry run mypy --ignore-missing-imports stacosys/ lint: - pylint stacosys/ + poetry run pylint stacosys/ diff --git a/config.ini b/config.ini index 17e4cd3..5cd951a 100755 --- a/config.ini +++ b/config.ini @@ -6,7 +6,8 @@ db_sqlite_file = db.sqlite [site] name = "My blog" -url = http://blog.mydomain.com +proto = https +url = https://blog.mydomain.com admin_email = admin@mydomain.com redirect = /redirect @@ -15,7 +16,6 @@ host = 127.0.0.1 port = 8100 [rss] -proto = https file = comments.xml [smtp] diff --git a/stacosys.sublime-workspace b/stacosys.sublime-workspace index 21684d5..82cfd31 100644 --- a/stacosys.sublime-workspace +++ b/stacosys.sublime-workspace @@ -3,6 +3,30 @@ { "selected_items": [ + [ + "c", + "configuration" + ], + [ + "assertI", + "assertIsNot" + ], + [ + "Confi", + "ConfigParameter" + ], + [ + "S", + "SITE_URL" + ], + [ + "Config", + "ConfigParameter" + ], + [ + "s", + "SITE_REDIRECT" + ], [ "get", "get_int" @@ -12,346 +36,3091 @@ "buffers": [ { - "file": "run.sh", - "settings": - { - "buffer_size": 40, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "stacosys/run.py", + "file": "stacosys/interface/web/admin.py", "settings": { - "buffer_size": 3298, + "buffer_size": 2472, "encoding": "UTF-8", "line_ending": "Unix" }, "undo_stack": [ [ - 34, + 4, 1, "insert", { - "characters": "no" + "characters": "\n" }, - "AgAAAOcFAAAAAAAA6AUAAAAAAAAAAAAA6AUAAAAAAADpBQAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADnBQAAAAAAAOcFAAAAAAAAAAAAAAAA8L8" + "AgAAAL8BAAAAAAAAwAEAAAAAAAAAAAAAwAEAAAAAAADEAQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAvwEAAAAAAAC/AQAAAAAAAAAAAAAAAPC/" ], [ - 35, + 8, 1, "insert", { - "characters": " " + "characters": "\n" }, - "AQAAAOkFAAAAAAAA6gUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADpBQAAAAAAAOkFAAAAAAAAAAAAAAAA8L8" + "AgAAANIAAAAAAAAA0wAAAAAAAAAAAAAAwQEAAAAAAADBAQAAAAAAAAQAAAAgICAg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0gAAAAAAAADSAAAAAAAAAAAAAAAAIINA" ], [ - 36, + 9, + 1, + "paste", + null, + "AQAAANMAAAAAAAAACwEAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0wAAAAAAAADTAAAAAAAAAAAAAAAAAPC/" + ], + [ + 12, + 1, + "reindent", + null, + "AQAAAPkBAAAAAAAA/QEAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA+QEAAAAAAAD5AQAAAAAAAAAAAAAAAPC/" + ], + [ + 13, 1, + "insert", + { + "characters": "cofn" + }, + "BAAAAP0BAAAAAAAA/gEAAAAAAAAAAAAA/gEAAAAAAAD/AQAAAAAAAAAAAAD/AQAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAQIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA/QEAAAAAAAD9AQAAAAAAAAAAAAAAAPC/" + ], + [ + 14, + 2, "left_delete", null, - "AQAAAOkFAAAAAAAA6QUAAAAAAAABAAAAIA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqBQAAAAAAAOoFAAAAAAAAAAAAAAAA8L8" + "AgAAAAACAAAAAAAAAAIAAAAAAAABAAAAbv8BAAAAAAAA/wEAAAAAAAABAAAAZg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAQIAAAAAAAABAgAAAAAAAAAAAAAAAPC/" ], [ - 37, + 15, 1, "insert", { - "characters": "r" + "characters": "nfug" }, - "AQAAAOkFAAAAAAAA6gUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADpBQAAAAAAAOkFAAAAAAAAAAAAAAAA8L8" + "BAAAAP8BAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAABAgAAAAAAAAAAAAABAgAAAAAAAAICAAAAAAAAAAAAAAICAAAAAAAAAwIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA/wEAAAAAAAD/AQAAAAAAAAAAAAAAAPC/" ], [ - 38, + 16, + 2, + "left_delete", + null, + "AgAAAAICAAAAAAAAAgIAAAAAAAABAAAAZwECAAAAAAAAAQIAAAAAAAABAAAAdQ", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAwIAAAAAAAADAgAAAAAAAAAAAAAAAPC/" + ], + [ + 17, + 1, + "insert", + { + "characters": "ig" + }, + "AgAAAAECAAAAAAAAAgIAAAAAAAAAAAAAAgIAAAAAAAADAgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAQIAAAAAAAABAgAAAAAAAAAAAAAAAPC/" + ], + [ + 18, + 1, + "insert", + { + "characters": " =" + }, + "AgAAAAMCAAAAAAAABAIAAAAAAAAAAAAABAIAAAAAAAAFAgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAwIAAAAAAAADAgAAAAAAAAAAAAAAAPC/" + ], + [ + 19, + 1, + "insert", + { + "characters": " Config" + }, + "BwAAAAUCAAAAAAAABgIAAAAAAAAAAAAABgIAAAAAAAAHAgAAAAAAAAAAAAAHAgAAAAAAAAgCAAAAAAAAAAAAAAgCAAAAAAAACQIAAAAAAAAAAAAACQIAAAAAAAAKAgAAAAAAAAAAAAAKAgAAAAAAAAsCAAAAAAAAAAAAAAsCAAAAAAAADAIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABQIAAAAAAAAFAgAAAAAAAAAAAAAAAPC/" + ], + [ + 20, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAAAwCAAAAAAAADgIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAADAIAAAAAAAAMAgAAAAAAAAAAAAAAAPC/" + ], + [ + 30, 1, "insert", { "characters": " " }, - "AQAAAOoFAAAAAAAA6wUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqBQAAAAAAAOoFAAAAAAAAAAAAAAAA8L8" + "AQAAAGcCAAAAAAAAaAIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZwIAAAAAAABnAgAAAAAAAAAAAAAAAPC/" + ], + [ + 32, + 1, + "insert", + { + "characters": "config." + }, + "BwAAAGcCAAAAAAAAaAIAAAAAAAAAAAAAaAIAAAAAAABpAgAAAAAAAAAAAABpAgAAAAAAAGoCAAAAAAAAAAAAAGoCAAAAAAAAawIAAAAAAAAAAAAAawIAAAAAAABsAgAAAAAAAAAAAABsAgAAAAAAAG0CAAAAAAAAAAAAAG0CAAAAAAAAbgIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZwIAAAAAAABnAgAAAAAAAAAAAAAAAPC/" + ], + [ + 33, + 1, + "insert", + { + "characters": "get" + }, + "AwAAAG4CAAAAAAAAbwIAAAAAAAAAAAAAbwIAAAAAAABwAgAAAAAAAAAAAABwAgAAAAAAAHECAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAbgIAAAAAAABuAgAAAAAAAAAAAAAAAPC/" + ], + [ + 34, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAAHECAAAAAAAAcwIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAcQIAAAAAAABxAgAAAAAAAAAAAAAAAPC/" + ], + [ + 35, + 1, + "insert", + { + "characters": "Confi" + }, + "BQAAAHICAAAAAAAAcwIAAAAAAAAAAAAAcwIAAAAAAAB0AgAAAAAAAAAAAAB0AgAAAAAAAHUCAAAAAAAAAAAAAHUCAAAAAAAAdgIAAAAAAAAAAAAAdgIAAAAAAAB3AgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAcgIAAAAAAAByAgAAAAAAAAAAAAAAAPC/" + ], + [ + 37, + 1, + "insert_completion", + { + "completion": "ConfigParameter", + "format": "text", + "keep_prefix": false, + "must_insert": false, + "trigger": "ConfigParameter" + }, + "AgAAAHICAAAAAAAAcgIAAAAAAAAFAAAAQ29uZmlyAgAAAAAAAIECAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAdwIAAAAAAAB3AgAAAAAAAAAAAAAAAPC/" + ], + [ + 38, + 1, + "insert", + { + "characters": ".W" + }, + "AgAAAIECAAAAAAAAggIAAAAAAAAAAAAAggIAAAAAAACDAgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAgQIAAAAAAACBAgAAAAAAAAAAAAAAAPC/" ], [ 39, 1, + "insert_completion", + { + "completion": "WEB_USERNAME", + "format": "text", + "keep_prefix": false, + "must_insert": false, + "trigger": "WEB_USERNAME" + }, + "AgAAAIICAAAAAAAAggIAAAAAAAABAAAAV4ICAAAAAAAAjgIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAgwIAAAAAAACDAgAAAAAAAAAAAAAAAPC/" + ], + [ + 43, + 1, + "right_delete", + null, + "AQAAAI8CAAAAAAAAjwIAAAAAAAAfAAAAIGFwcC5jb25maWcuZ2V0KCJXRUJfVVNFUk5BTUUiKQ", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAjwIAAAAAAACuAgAAAAAAAAAAAAAAAPC/" + ], + [ + 50, + 1, "paste", null, - "AQAAAOsFAAAAAAAA9gUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrBQAAAAAAAOsFAAAAAAAAAAAAAAAA8L8" + "AQAAAKgCAAAAAAAA0AIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAqAIAAAAAAACoAgAAAAAAAAAAAAAAAPC/" ], [ - 40, + 51, 1, "insert", { - "characters": " or" + "characters": " " }, - "AwAAAPYFAAAAAAAA9wUAAAAAAAAAAAAA9wUAAAAAAAD4BQAAAAAAAAAAAAD4BQAAAAAAAPkFAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD2BQAAAAAAAPYFAAAAAAAAAAAAAAAA8L8" + "AQAAANACAAAAAAAA0QIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0AIAAAAAAADQAgAAAAAAAAAAAAAAAPC/" ], [ - 41, + 55, + 1, + "insert", + { + "characters": "PA" + }, + "AwAAAMcCAAAAAAAAyAIAAAAAAAAAAAAAyAIAAAAAAADIAgAAAAAAAAgAAABVU0VSTkFNRcgCAAAAAAAAyQIAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAzwIAAAAAAADHAgAAAAAAAAAAAAAAAPC/" + ], + [ + 56, + 1, + "insert_completion", + { + "completion": "WEB_PASSWORD", + "format": "text", + "keep_prefix": false, + "must_insert": false, + "trigger": "WEB_PASSWORD" + }, + "AgAAAMMCAAAAAAAAwwIAAAAAAAAGAAAAV0VCX1BBwwIAAAAAAADPAgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAyQIAAAAAAADJAgAAAAAAAAAAAAAAAPC/" + ], + [ + 59, + 2, + "right_delete", + null, + "AgAAANECAAAAAAAA0QIAAAAAAAAeAAAAYXBwLmNvbmZpZy5nZXQoIldFQl9QQVNTV09SRCIp0QIAAAAAAADRAgAAAAAAAAEAAAAg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0QIAAAAAAADvAgAAAAAAAAAAAAAAAPC/" + ], + [ + 69, + 1, + "insert", + { + "characters": "\n" + }, + "AgAAAKcFAAAAAAAAqAUAAAAAAAAAAAAAqAUAAAAAAACsBQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAApwUAAAAAAACnBQAAAAAAAAAAAAAAAPC/" + ], + [ + 77, + 1, + "paste", + null, + "AQAAAKwFAAAAAAAAvQUAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAArAUAAAAAAACsBQAAAAAAAAAAAAAAAPC/" + ], + [ + 85, + 1, + "paste", + null, + "AgAAAPMFAAAAAAAAGwYAAAAAAAAAAAAAGwYAAAAAAAAbBgAAAAAAAB4AAABhcHAuY29uZmlnLmdldCgiV0VCX1VTRVJOQU1FIik", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA8wUAAAAAAAARBgAAAAAAAAAAAAAAAPC/" + ], + [ + 98, + 1, + "paste", + null, + "AQAAAOwGAAAAAAAABwcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA7AYAAAAAAADsBgAAAAAAAAAAAAAAAPC/" + ], + [ + 99, 1, "insert", { "characters": " " }, - "AQAAAPkFAAAAAAAA+gUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD5BQAAAAAAAPkFAAAAAAAAAAAAAAAA8L8" + "AQAAAAcHAAAAAAAACAcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABwcAAAAAAAAHBwAAAAAAAAAAAAAAAPC/" ], [ - 46, + 101, 1, "left_delete", null, - "AQAAAOkFAAAAAAAA6QUAAAAAAAABAAAAcg", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqBQAAAAAAAOoFAAAAAAAAAAAAAAAA8L8" + "AQAAAAYHAAAAAAAABgcAAAAAAAABAAAALg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABwcAAAAAAAAHBwAAAAAAAAAAAAAAAPC/" ], [ - 47, + 102, 1, "insert", { - "characters": "t" + "characters": ".LA" }, - "AQAAAOkFAAAAAAAA6gUAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADpBQAAAAAAAOkFAAAAAAAAAAAAAAAA8L8" + "AwAAAAYHAAAAAAAABwcAAAAAAAAAAAAABwcAAAAAAAAIBwAAAAAAAAAAAAAIBwAAAAAAAAkHAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABgcAAAAAAAAGBwAAAAAAAAAAAAAAAPC/" ], [ - 59, + 103, 1, "insert_completion", { - "completion": "lsp_select_completion_item {\"session_name\":\"LSP-pyright\",\"item\":{\"label\":\"get_int\",\"data\":{\"workspacePath\":\"/home/yannic/work/stacosys\",\"position\":{\"character\":21,\"line\":91},\"symbolLabel\":\"get_int\",\"filePath\":\"/home/yannic/work/stacosys/stacosys/run.py\"},\"kind\":2,\"sortText\":\"09.9999.get_int\"}}", + "completion": "lsp_select_completion_item {\"item\":{\"label\":\"LANG\",\"data\":{\"workspacePath\":\"/home/yannic/work/stacosys\",\"symbolLabel\":\"LANG\",\"position\":{\"character\":48,\"line\":63},\"filePath\":\"/home/yannic/work/stacosys/stacosys/interface/web/admin.py\"},\"sortText\":\"08.9999.LANG\",\"kind\":20},\"session_name\":\"LSP-pyright\"}", "format": "command", "keep_prefix": false, "must_insert": false, - "trigger": "get_int" + "trigger": "LANG" }, - "AgAAAMgLAAAAAAAAyAsAAAAAAAADAAAAZ2V0yAsAAAAAAADPCwAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLCwAAAAAAAMsLAAAAAAAAAAAAAAAA8L8" - ] - ] - }, - { - "file": "Makefile", - "settings": - { - "buffer_size": 533, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "stacosys/core/mailer.py", - "settings": - { - "buffer_size": 1087, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ + "AgAAAAcHAAAAAAAABwcAAAAAAAACAAAATEEHBwAAAAAAAAsHAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAACQcAAAAAAAAJBwAAAAAAAAAAAAAAAPC/" + ], [ - 11, + 104, 1, "insert", { - "characters": "\n" + "characters": ")" }, - "AgAAAEIEAAAAAAAAQwQAAAAAAAAAAAAAQwQAAAAAAABPBAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABCBAAAAAAAAEIEAAAAAAAAAAAAAAAA8L8" + "AQAAAAsHAAAAAAAADAcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAACwcAAAAAAAALBwAAAAAAAAAAAAAAAPC/" ], [ - 12, + 107, 1, - "left_delete", + "right_delete", + null, + "AQAAAAwHAAAAAAAADAcAAAAAAAAdAAAAIGFwcC5jb25maWcuZ2V0KCJMQU5HIiwgImZyIik", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAADAcAAAAAAAApBwAAAAAAAAAAAAAAAPC/" + ], + [ + 112, + 1, + "insert", + { + "characters": "f" + }, + "AQAAAOEGAAAAAAAA4gYAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA4QYAAAAAAADhBgAAAAAAAAAAAAAAAPC/" + ], + [ + 116, + 1, + "right_delete", + null, + "AQAAAOEGAAAAAAAA4QYAAAAAAAABAAAAZg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA4QYAAAAAAADhBgAAAAAAAAAAAAAAAPC/" + ], + [ + 121, + 1, + "insert", + { + "characters": " " + }, + "AQAAAEMHAAAAAAAARAcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQwcAAAAAAABDBwAAAAAAAAAAAAAAAPC/" + ], + [ + 123, + 1, + "paste", + null, + "AQAAAEMHAAAAAAAAXgcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQwcAAAAAAABDBwAAAAAAAAAAAAAAAPC/" + ], + [ + 124, + 1, + "insert", + { + "characters": "S" + }, + "AQAAAF4HAAAAAAAAXwcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXgcAAAAAAABeBwAAAAAAAAAAAAAAAPC/" + ], + [ + 128, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"item\":{\"label\":\"SITE_URL\",\"data\":{\"workspacePath\":\"/home/yannic/work/stacosys\",\"symbolLabel\":\"SITE_URL\",\"position\":{\"character\":44,\"line\":65},\"filePath\":\"/home/yannic/work/stacosys/stacosys/interface/web/admin.py\"},\"sortText\":\"08.9999.SITE_URL\",\"kind\":20},\"session_name\":\"LSP-pyright\"}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "SITE_URL" + }, + "AgAAAF4HAAAAAAAAXgcAAAAAAAABAAAAU14HAAAAAAAAZgcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXwcAAAAAAABfBwAAAAAAAAAAAAAAAPC/" + ], + [ + 129, + 1, + "insert", + { + "characters": ")" + }, + "AQAAAGYHAAAAAAAAZwcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZgcAAAAAAABmBwAAAAAAAAAAAAAAAPC/" + ], + [ + 132, + 1, + "right_delete", null, - "AQAAAEsEAAAAAAAASwQAAAAAAAAEAAAAICAgIA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABPBAAAAAAAAE8EAAAAAAAAAAAAAAAA8L8" + "AQAAAGcHAAAAAAAAZwcAAAAAAAAbAAAAIGFwcC5jb25maWcuZ2V0KCJTSVRFX1VSTCIp", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZwcAAAAAAACCBwAAAAAAAAAAAAAAAPC/" ], [ - 13, + 140, + 1, + "insert", + { + "characters": "\n" + }, + "AgAAAKUIAAAAAAAApggAAAAAAAAAAAAApggAAAAAAACuCAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAApQgAAAAAAAClCAAAAAAAAP///////+9/" + ], + [ + 145, + 1, + "paste", + null, + "AQAAAAwBAAAAAAAALQEAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAADAEAAAAAAAAMAQAAAAAAAAAAAAAAAPC/" + ], + [ + 146, + 1, + "insert", + { + "characters": "\n" + }, + "AgAAAC0BAAAAAAAALgEAAAAAAAAAAAAAyAgAAAAAAADICAAAAAAAAAgAAAAgICAgICAgIA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAALQEAAAAAAAAtAQAAAAAAAAAAAAAAAPC/" + ], + [ + 150, + 1, + "insert", + { + "characters": "\nrss" + }, + "BQAAANEHAAAAAAAA0gcAAAAAAAAAAAAA0gcAAAAAAADWBwAAAAAAAAAAAADWBwAAAAAAANcHAAAAAAAAAAAAANcHAAAAAAAA2AcAAAAAAAAAAAAA2AcAAAAAAADZBwAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA0QcAAAAAAADRBwAAAAAAAAAAAAAAAPC/" + ], + [ + 151, + 1, + "insert", + { + "characters": " =" + }, + "AgAAANkHAAAAAAAA2gcAAAAAAAAAAAAA2gcAAAAAAADbBwAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2QcAAAAAAADZBwAAAAAAAAAAAAAAAPC/" + ], + [ + 152, + 1, + "insert", + { + "characters": " Rss" + }, + "BAAAANsHAAAAAAAA3AcAAAAAAAAAAAAA3AcAAAAAAADdBwAAAAAAAAAAAADdBwAAAAAAAN4HAAAAAAAAAAAAAN4HAAAAAAAA3wcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2wcAAAAAAADbBwAAAAAAAAAAAAAAAPC/" + ], + [ + 153, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAAN8HAAAAAAAA4QcAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA3wcAAAAAAADfBwAAAAAAAAAAAAAAAPC/" + ], + [ + 157, + 1, + "insert", + { + "characters": "rss" + }, + "BAAAAOEIAAAAAAAA4ggAAAAAAAAAAAAA4ggAAAAAAADiCAAAAAAAABUAAABhcHAuY29uZmlnLmdldCgiUlNTIiniCAAAAAAAAOMIAAAAAAAAAAAAAOMIAAAAAAAA5AgAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA4QgAAAAAAAD2CAAAAAAAAAAAAAAAAPC/" + ], + [ + 160, + 1, + "left_delete", + null, + "AQAAANcIAAAAAAAA1wgAAAAAAAABAAAACg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA2AgAAAAAAADYCAAAAAAAAAAAAAAAAPC/" + ], + [ + 176, + 1, + "insert", + { + "characters": "\n" + }, + "AgAAAEMDAAAAAAAARAMAAAAAAAAAAAAARAMAAAAAAABIAwAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQwMAAAAAAABDAwAAAAAAAAAAAAAAAPC/" + ], + [ + 177, + 1, + "paste", + null, + "AQAAAEgDAAAAAAAAWQMAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAASAMAAAAAAABIAwAAAAAAAAAAAAAAAPC/" + ], + [ + 182, + 1, + "insert", + { + "characters": "conig" + }, + "BgAAAAEFAAAAAAAAAgUAAAAAAAAAAAAAAgUAAAAAAAACBQAAAAAAABwAAABhcHAuY29uZmlnLmdldCgiTEFORyIsICJmciIpAgUAAAAAAAADBQAAAAAAAAAAAAADBQAAAAAAAAQFAAAAAAAAAAAAAAQFAAAAAAAABQUAAAAAAAAAAAAABQUAAAAAAAAGBQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAQUAAAAAAAAdBQAAAAAAAAAAAAAAAPC/" + ], + [ + 183, + 2, + "left_delete", + null, + "AgAAAAUFAAAAAAAABQUAAAAAAAABAAAAZwQFAAAAAAAABAUAAAAAAAABAAAAaQ", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABgUAAAAAAAAGBQAAAAAAAAAAAAAAAPC/" + ], + [ + 184, + 1, + "insert", + { + "characters": "fig.get" + }, + "BwAAAAQFAAAAAAAABQUAAAAAAAAAAAAABQUAAAAAAAAGBQAAAAAAAAAAAAAGBQAAAAAAAAcFAAAAAAAAAAAAAAcFAAAAAAAACAUAAAAAAAAAAAAACAUAAAAAAAAJBQAAAAAAAAAAAAAJBQAAAAAAAAoFAAAAAAAAAAAAAAoFAAAAAAAACwUAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAABAUAAAAAAAAEBQAAAAAAAAAAAAAAAPC/" + ], + [ + 185, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAAAsFAAAAAAAADQUAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAACwUAAAAAAAALBQAAAAAAAAAAAAAAAPC/" + ], + [ + 186, + 1, + "insert", + { + "characters": "Confi" + }, + "BQAAAAwFAAAAAAAADQUAAAAAAAAAAAAADQUAAAAAAAAOBQAAAAAAAAAAAAAOBQAAAAAAAA8FAAAAAAAAAAAAAA8FAAAAAAAAEAUAAAAAAAAAAAAAEAUAAAAAAAARBQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAADAUAAAAAAAAMBQAAAAAAAAAAAAAAAPC/" + ], + [ + 188, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"item\":{\"label\":\"ConfigParameter\",\"data\":{\"workspacePath\":\"/home/yannic/work/stacosys\",\"symbolLabel\":\"ConfigParameter\",\"position\":{\"character\":54,\"line\":46},\"filePath\":\"/home/yannic/work/stacosys/stacosys/interface/web/admin.py\"},\"sortText\":\"05.0003.ConfigParameter\",\"kind\":7},\"session_name\":\"LSP-pyright\"}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "ConfigParameter" + }, + "AgAAAAwFAAAAAAAADAUAAAAAAAAFAAAAQ29uZmkMBQAAAAAAABsFAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAEQUAAAAAAAARBQAAAAAAAAAAAAAAAPC/" + ], + [ + 189, + 1, + "insert", + { + "characters": ".L" + }, + "AgAAABsFAAAAAAAAHAUAAAAAAAAAAAAAHAUAAAAAAAAdBQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGwUAAAAAAAAbBQAAAAAAAAAAAAAAAPC/" + ], + [ + 190, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"item\":{\"label\":\"LANG\",\"data\":{\"workspacePath\":\"/home/yannic/work/stacosys\",\"symbolLabel\":\"LANG\",\"position\":{\"character\":66,\"line\":46},\"filePath\":\"/home/yannic/work/stacosys/stacosys/interface/web/admin.py\"},\"sortText\":\"08.9999.LANG\",\"kind\":20},\"session_name\":\"LSP-pyright\"}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "LANG" + }, + "AgAAABwFAAAAAAAAHAUAAAAAAAABAAAATBwFAAAAAAAAIAUAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAHQUAAAAAAAAdBQAAAAAAAAAAAAAAAPC/" + ], + [ + 194, + 1, + "revert", + null, + "AgAAAAAAAAAAAAAAAAAAAAAAAADhCQAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgaGFzaGxpYgppbXBvcnQgbG9nZ2luZwoKZnJvbSBmbGFzayBpbXBvcnQgZmxhc2gsIHJlZGlyZWN0LCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QsIHNlc3Npb24KCmZyb20gc3RhY29zeXMuZGIgaW1wb3J0IGRhbwpmcm9tIHN0YWNvc3lzLmludGVyZmFjZSBpbXBvcnQgYXBwCmZyb20gc3RhY29zeXMuY29uZi5jb25maWcgaW1wb3J0IENvbmZpZywgQ29uZmlnUGFyYW1ldGVyCmZyb20gc3RhY29zeXMuY29yZS5yc3MgaW1wb3J0IFJzcwoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgphcHAuYWRkX3VybF9ydWxlKCIvd2ViIiwgZW5kcG9pbnQ9ImluZGV4IikKYXBwLmFkZF91cmxfcnVsZSgiL3dlYi8iLCBlbmRwb2ludD0iaW5kZXgiKQoKCkBhcHAuZW5kcG9pbnQoImluZGV4IikKZGVmIGluZGV4KCk6CiAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQoKCmRlZiBpc19sb2dpbl9vayh1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGhhc2hlZCA9IGhhc2hsaWIuc2hhMjU2KHBhc3N3b3JkLmVuY29kZSgpKS5oZXhkaWdlc3QoKS51cHBlcigpCiAgICByZXR1cm4gKAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLldFQl9VU0VSTkFNRSkgPT0gdXNlcm5hbWUKICAgICAgICBhbmQgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuV0VCX1BBU1NXT1JEKSA9PSBoYXNoZWQKICAgICkKCgpAYXBwLnJvdXRlKCIvd2ViL2xvZ2luIiwgbWV0aG9kcz1bIlBPU1QiLCAiR0VUIl0pCmRlZiBsb2dpbigpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICB1c2VybmFtZSA9IHJlcXVlc3QuZm9ybS5nZXQoInVzZXJuYW1lIikKICAgICAgICBwYXNzd29yZCA9IHJlcXVlc3QuZm9ybS5nZXQoInBhc3N3b3JkIikKICAgICAgICBpZiBpc19sb2dpbl9vayh1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgICAgICAgICBzZXNzaW9uWyJ1c2VyIl0gPSB1c2VybmFtZQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiSWRlbnRpZmlhbnQgb3UgbW90IGRlIHBhc3NlIGluY29ycmVjdCIpCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCIvd2ViL2xvZ2luIikKICAgICMgR0VUCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCJsb2dpbl8iICsgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuTEFORykgKyAiLmh0bWwiKQoKCkBhcHAucm91dGUoIi93ZWIvbG9nb3V0IiwgbWV0aG9kcz1bIkdFVCJdKQpkZWYgbG9nb3V0KCk6CiAgICBzZXNzaW9uLnBvcCgidXNlciIpCiAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQoKCkBhcHAucm91dGUoIi93ZWIvYWRtaW4iLCBtZXRob2RzPVsiR0VUIl0pCmRlZiBhZG1pbl9ob21lcGFnZSgpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGlmIG5vdCAoInVzZXIiIGluIHNlc3Npb24gYW5kIHNlc3Npb25bInVzZXIiXSA9PSBjb25maWcuZ2V0KENvbmZpZ1BhcmFtZXRlci5XRUJfVVNFUk5BTUUpKToKICAgICAgICAjIFRPRE8gbG9jYWxpemF0aW9uCiAgICAgICAgZmxhc2goIlZvdXMgYXZleiDDqXTDqSBkw6ljb25uZWN0w6kuIikKICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvbG9naW4iKQoKICAgIGNvbW1lbnRzID0gZGFvLmZpbmRfbm90X3B1Ymxpc2hlZF9jb21tZW50cygpCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKAogICAgICAgICJhZG1pbl8iICsgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuTEFORykgKyAiLmh0bWwiLAogICAgICAgIGNvbW1lbnRzPWNvbW1lbnRzLAogICAgICAgIGJhc2V1cmw9Y29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9VUkwpLAogICAgKQoKCkBhcHAucm91dGUoIi93ZWIvYWRtaW4iLCBtZXRob2RzPVsiUE9TVCJdKQpkZWYgYWRtaW5fYWN0aW9uKCk6CiAgICByc3MgPSBSc3MoKQogICAgY29tbWVudCA9IGRhby5maW5kX2NvbW1lbnRfYnlfaWQocmVxdWVzdC5mb3JtLmdldCgiY29tbWVudCIpKQogICAgaWYgY29tbWVudCBpcyBOb25lOgogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiQ29tbWVudGFpcmUgaW50cm91dmFibGUiKQogICAgZWxpZiByZXF1ZXN0LmZvcm0uZ2V0KCJhY3Rpb24iKSA9PSAiQVBQUk9WRSI6CiAgICAgICAgZGFvLnB1Ymxpc2hfY29tbWVudChjb21tZW50KQogICAgICAgIHJzcy5nZW5lcmF0ZSgpCiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJDb21tZW50YWlyZSBwdWJsacOpIikKICAgIGVsc2U6CiAgICAgICAgZGFvLmRlbGV0ZV9jb21tZW50KGNvbW1lbnQpCiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJDb21tZW50YWlyZSBzdXBwcmltw6kiKQogICAgcmV0dXJuIHJlZGlyZWN0KCIvd2ViL2FkbWluIikKAAAAAAAAAADxCQAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAIgUAAAAAAAAiBQAAAAAAAAAAAAAAAPC/" + ], + [ + 224, + 1, + "toggle_breakpoint", + null, + "AQAAAEQDAAAAAAAAfgMAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAATAMAAAAAAABMAwAAAAAAAAAAAAAAAPC/" + ], + [ + 232, + 1, + "right_delete", + null, + "AQAAAEgDAAAAAAAASAMAAAAAAAA1AAAAaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpICAjIGJyZWFrcG9pbnQgNzE4YjY2MDQgLy8", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAfQMAAAAAAABIAwAAAAAAAAAAAAAAAEJA" + ], + [ + 234, + 1, + "left_delete", + null, + "AQAAAEMDAAAAAAAAQwMAAAAAAAABAAAACg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAARAMAAAAAAABEAwAAAAAAAAAAAAAAAAAA" + ], + [ + 237, + 1, + "right_delete", + null, + "AQAAAEMDAAAAAAAAQwMAAAAAAAAEAAAAICAgIA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQwMAAAAAAABHAwAAAAAAAP///////+9/" + ], + [ + 256, + 1, + "toggle_breakpoint", + null, + "AQAAAEQDAAAAAAAAfgMAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAASwMAAAAAAABLAwAAAAAAAAAAAAAAAPC/" + ], + [ + 264, + 1, + "toggle_breakpoint", + null, + "AQAAAEQDAAAAAAAARAMAAAAAAAA6AAAAICAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKSAgIyBicmVha3BvaW50IGJlMjhiNmVmIC8vCg", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAfQMAAAAAAAB9AwAAAAAAAAAAAAAAAPC/" + ], + [ + 267, + 2, + "toggle_breakpoint", + null, + "AgAAADcDAAAAAAAAbQMAAAAAAAAAAAAANwMAAAAAAAA3AwAAAAAAADYAAABpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkgICMgYnJlYWtwb2ludCAzZDI2NjIzOCAvLwo", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAQwMAAAAAAABDAwAAAAAAAAAAAAAAAPC/" + ], + [ + 13, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAKYAAAAAAAAApwAAAAAAAAAAAAAApwAAAAAAAACoAAAAAAAAAAAAAACoAAAAAAAAAKkAAAAAAAAAAAAAAKkAAAAAAAAAqgAAAAAAAAAAAAAAqgAAAAAAAACrAAAAAAAAAAAAAACrAAAAAAAAAKwAAAAAAAAAAAAAAKwAAAAAAAAArQAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAKYAAAAAAAAApgAAAAAAAAAAAAAAAADwvw" + ], + [ + 14, + 1, + "right_delete", + null, + "AQAAAK0AAAAAAAAArQAAAAAAAAABAAAALg", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAK0AAAAAAAAArQAAAAAAAAAAAAAAAADwvw" + ], + [ + 15, + 1, + "insert", + { + "characters": " " + }, + "AQAAAK0AAAAAAAAArgAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAK0AAAAAAAAArQAAAAAAAAAAAAAAAADwvw" + ], + [ + 17, + 1, + "insert", + { + "characters": "\n//" + }, + "AwAAALQAAAAAAAAAtQAAAAAAAAAAAAAAtQAAAAAAAAC2AAAAAAAAAAAAAAC2AAAAAAAAALcAAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQAAAAAAAAAtAAAAAAAAAAAAAAAAADwvw" + ], + [ + 19, + 1, + "insert", + { + "characters": "#" + }, + "AgAAALUAAAAAAAAAtgAAAAAAAAAAAAAAtgAAAAAAAAC2AAAAAAAAAAIAAAAvLw", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALcAAAAAAAAAtQAAAAAAAAAAAAAAAADwvw" + ], + [ + 28, + 1, + "insert", + { + "characters": "config." + }, + "BwAAADECAAAAAAAAMgIAAAAAAAAAAAAAMgIAAAAAAAAzAgAAAAAAAAAAAAAzAgAAAAAAADQCAAAAAAAAAAAAADQCAAAAAAAANQIAAAAAAAAAAAAANQIAAAAAAAA2AgAAAAAAAAAAAAA2AgAAAAAAADcCAAAAAAAAAAAAADcCAAAAAAAAOAIAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADECAAAAAAAAMQIAAAAAAAAAAAAAAADwvw" + ], + [ + 39, + 1, + "insert", + { + "characters": " " + }, + "AgAAALQAAAAAAAAAtQAAAAAAAAAAAAAAtQAAAAAAAAC2AAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQAAAAAAAAAtAAAAAAAAAAAAAAAAADwvw" + ], + [ + 40, + 2, + "left_delete", + null, + "AgAAALUAAAAAAAAAtQAAAAAAAAABAAAAILQAAAAAAAAAtAAAAAAAAAABAAAAIA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALYAAAAAAAAAtgAAAAAAAAAAAAAAAADwvw" + ], + [ + 41, + 1, + "insert", + { + "characters": "as" + }, + "AgAAALQAAAAAAAAAtQAAAAAAAAAAAAAAtQAAAAAAAAC2AAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQAAAAAAAAAtAAAAAAAAAAAAAAAAADwvw" + ], + [ + 42, + 2, + "left_delete", + null, + "AgAAALUAAAAAAAAAtQAAAAAAAAABAAAAc7QAAAAAAAAAtAAAAAAAAAABAAAAYQ", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALYAAAAAAAAAtgAAAAAAAAAAAAAAAADwvw" + ], + [ + 43, + 1, + "insert", + { + "characters": " as" + }, + "AwAAALQAAAAAAAAAtQAAAAAAAAAAAAAAtQAAAAAAAAC2AAAAAAAAAAAAAAC2AAAAAAAAALcAAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQAAAAAAAAAtAAAAAAAAAAAAAAAAADwvw" + ], + [ + 44, + 1, + "insert", + { + "characters": " cfg" + }, + "BAAAALcAAAAAAAAAuAAAAAAAAAAAAAAAuAAAAAAAAAC5AAAAAAAAAAAAAAC5AAAAAAAAALoAAAAAAAAAAAAAALoAAAAAAAAAuwAAAAAAAAAAAAAA", + "BgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALcAAAAAAAAAtwAAAAAAAAAAAAAAAADwvw" + ], + [ + 10, + 1, + "insert", + { + "characters": "Config" + }, + "BwAAAK4AAAAAAAAArwAAAAAAAAAAAAAArwAAAAAAAACvAAAAAAAAAA0AAABjb25maWcgYXMgY2ZnrwAAAAAAAACwAAAAAAAAAAAAAACwAAAAAAAAALEAAAAAAAAAAAAAALEAAAAAAAAAsgAAAAAAAAAAAAAAsgAAAAAAAACzAAAAAAAAAAAAAACzAAAAAAAAALQAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACuAAAAAAAAALsAAAAAAAAAAAAAAAAA8L8" + ], + [ + 17, + 2, + "right_delete", + null, + "AgAAADECAAAAAAAAMQIAAAAAAAAGAAAAY29uZmlnMQIAAAAAAAAxAgAAAAAAAAEAAAAu", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAxAgAAAAAAADcCAAAAAAAAAAAAAAAA8L8" + ], + [ + 21, + 1, + "insert", + { + "characters": "," + }, + "AQAAALQAAAAAAAAAtQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0AAAAAAAAALQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 22, + 1, + "insert", + { + "characters": " ConfigPar" + }, + "CgAAALUAAAAAAAAAtgAAAAAAAAAAAAAAtgAAAAAAAAC3AAAAAAAAAAAAAAC3AAAAAAAAALgAAAAAAAAAAAAAALgAAAAAAAAAuQAAAAAAAAAAAAAAuQAAAAAAAAC6AAAAAAAAAAAAAAC6AAAAAAAAALsAAAAAAAAAAAAAALsAAAAAAAAAvAAAAAAAAAAAAAAAvAAAAAAAAAC9AAAAAAAAAAAAAAC9AAAAAAAAAL4AAAAAAAAAAAAAAL4AAAAAAAAAvwAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC1AAAAAAAAALUAAAAAAAAAAAAAAAAA8L8" + ], + [ + 23, + 1, + "insert_completion", + { + "completion": "ConfigParameter", + "format": "text", + "keep_prefix": false, + "must_insert": false, + "trigger": "ConfigParameter" + }, + "AgAAALYAAAAAAAAAtgAAAAAAAAAJAAAAQ29uZmlnUGFytgAAAAAAAADFAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC/AAAAAAAAAL8AAAAAAAAAAAAAAAAA8L8" + ], + [ + 30, + 1, + "insert", + { + "characters": ".config" + }, + "BwAAAKYAAAAAAAAApwAAAAAAAAAAAAAApwAAAAAAAACoAAAAAAAAAAAAAACoAAAAAAAAAKkAAAAAAAAAAAAAAKkAAAAAAAAAqgAAAAAAAAAAAAAAqgAAAAAAAACrAAAAAAAAAAAAAACrAAAAAAAAAKwAAAAAAAAAAAAAAKwAAAAAAAAArQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACmAAAAAAAAAKYAAAAAAAAAAAAAAAAA8L8" + ], + [ + 35, + 1, + "revert", + null, + "AgAAAAAAAAAAAAAAAAAAAAAAAAAYCgAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgaGFzaGxpYgppbXBvcnQgbG9nZ2luZwoKZnJvbSBmbGFzayBpbXBvcnQgZmxhc2gsIHJlZGlyZWN0LCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QsIHNlc3Npb24KCmZyb20gc3RhY29zeXMuY29uZi5jb25maWcgaW1wb3J0IENvbmZpZywgQ29uZmlnUGFyYW1ldGVyCiMgaW1wb3J0IENvbmZpZywgQ29uZmlnUGFyYW1ldGVyCmZyb20gc3RhY29zeXMuY29yZS5yc3MgaW1wb3J0IFJzcwpmcm9tIHN0YWNvc3lzLmRiIGltcG9ydCBkYW8KZnJvbSBzdGFjb3N5cy5pbnRlcmZhY2UgaW1wb3J0IGFwcAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgphcHAuYWRkX3VybF9ydWxlKCIvd2ViIiwgZW5kcG9pbnQ9ImluZGV4IikKYXBwLmFkZF91cmxfcnVsZSgiL3dlYi8iLCBlbmRwb2ludD0iaW5kZXgiKQoKCkBhcHAuZW5kcG9pbnQoImluZGV4IikKZGVmIGluZGV4KCk6CiAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQoKCmRlZiBpc19sb2dpbl9vayh1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGhhc2hlZCA9IGhhc2hsaWIuc2hhMjU2KHBhc3N3b3JkLmVuY29kZSgpKS5oZXhkaWdlc3QoKS51cHBlcigpCiAgICByZXR1cm4gKAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLldFQl9VU0VSTkFNRSkgPT0gdXNlcm5hbWUKICAgICAgICBhbmQgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuV0VCX1BBU1NXT1JEKSA9PSBoYXNoZWQKICAgICkKCgpAYXBwLnJvdXRlKCIvd2ViL2xvZ2luIiwgbWV0aG9kcz1bIlBPU1QiLCAiR0VUIl0pCmRlZiBsb2dpbigpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICB1c2VybmFtZSA9IHJlcXVlc3QuZm9ybS5nZXQoInVzZXJuYW1lIikKICAgICAgICBwYXNzd29yZCA9IHJlcXVlc3QuZm9ybS5nZXQoInBhc3N3b3JkIikKICAgICAgICBpZiBpc19sb2dpbl9vayh1c2VybmFtZSwgcGFzc3dvcmQpOgogICAgICAgICAgICBzZXNzaW9uWyJ1c2VyIl0gPSB1c2VybmFtZQogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiSWRlbnRpZmlhbnQgb3UgbW90IGRlIHBhc3NlIGluY29ycmVjdCIpCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCIvd2ViL2xvZ2luIikKICAgICMgR0VUCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCJsb2dpbl8iICsgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuTEFORykgKyAiLmh0bWwiKQoKCkBhcHAucm91dGUoIi93ZWIvbG9nb3V0IiwgbWV0aG9kcz1bIkdFVCJdKQpkZWYgbG9nb3V0KCk6CiAgICBzZXNzaW9uLnBvcCgidXNlciIpCiAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQoKCkBhcHAucm91dGUoIi93ZWIvYWRtaW4iLCBtZXRob2RzPVsiR0VUIl0pCmRlZiBhZG1pbl9ob21lcGFnZSgpOgogICAgY29uZmlnID0gQ29uZmlnKCkKICAgIGlmIG5vdCAoCiAgICAgICAgInVzZXIiIGluIHNlc3Npb24KICAgICAgICBhbmQgc2Vzc2lvblsidXNlciJdID09IGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLldFQl9VU0VSTkFNRSkKICAgICk6CiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJWb3VzIGF2ZXogw6l0w6kgZMOpY29ubmVjdMOpLiIpCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCIvd2ViL2xvZ2luIikKCiAgICBjb21tZW50cyA9IGRhby5maW5kX25vdF9wdWJsaXNoZWRfY29tbWVudHMoKQogICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgKICAgICAgICAiYWRtaW5fIiArIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLkxBTkcpICsgIi5odG1sIiwKICAgICAgICBjb21tZW50cz1jb21tZW50cywKICAgICAgICBiYXNldXJsPWNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLlNJVEVfVVJMKSwKICAgICkKCgpAYXBwLnJvdXRlKCIvd2ViL2FkbWluIiwgbWV0aG9kcz1bIlBPU1QiXSkKZGVmIGFkbWluX2FjdGlvbigpOgogICAgcnNzID0gUnNzKCkKICAgIGNvbW1lbnQgPSBkYW8uZmluZF9jb21tZW50X2J5X2lkKHJlcXVlc3QuZm9ybS5nZXQoImNvbW1lbnQiKSkKICAgIGlmIGNvbW1lbnQgaXMgTm9uZToKICAgICAgICAjIFRPRE8gbG9jYWxpemF0aW9uCiAgICAgICAgZmxhc2goIkNvbW1lbnRhaXJlIGludHJvdXZhYmxlIikKICAgIGVsaWYgcmVxdWVzdC5mb3JtLmdldCgiYWN0aW9uIikgPT0gIkFQUFJPVkUiOgogICAgICAgIGRhby5wdWJsaXNoX2NvbW1lbnQoY29tbWVudCkKICAgICAgICByc3MuZ2VuZXJhdGUoKQogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiQ29tbWVudGFpcmUgcHVibGnDqSIpCiAgICBlbHNlOgogICAgICAgIGRhby5kZWxldGVfY29tbWVudChjb21tZW50KQogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiQ29tbWVudGFpcmUgc3VwcHJpbcOpIikKICAgIHJldHVybiByZWRpcmVjdCgiL3dlYi9hZG1pbiIpCgAAAAAAAAAAEwoAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACnAAAAAAAAAK0AAAAAAAAAAAAAAAAA8L8" + ], + [ + 39, + 1, + "left_delete", + null, + "AQAAALUAAAAAAAAAtQAAAAAAAAAIAAAAQ29uZmlnLCA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC1AAAAAAAAAL0AAAAAAAAAAAAAAAAA8L8" + ], + [ + 41, + 1, + "insert", + { + "characters": "\nfrom" + }, + "BQAAAJMAAAAAAAAAlAAAAAAAAAAAAAAAlAAAAAAAAACVAAAAAAAAAAAAAACVAAAAAAAAAJYAAAAAAAAAAAAAAJYAAAAAAAAAlwAAAAAAAAAAAAAAlwAAAAAAAACYAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACTAAAAAAAAAJMAAAAAAAAAAAAAAACQckA" + ], + [ + 42, + 1, + "insert", + { + "characters": " stacosys" + }, + "CQAAAJgAAAAAAAAAmQAAAAAAAAAAAAAAmQAAAAAAAACaAAAAAAAAAAAAAACaAAAAAAAAAJsAAAAAAAAAAAAAAJsAAAAAAAAAnAAAAAAAAAAAAAAAnAAAAAAAAACdAAAAAAAAAAAAAACdAAAAAAAAAJ4AAAAAAAAAAAAAAJ4AAAAAAAAAnwAAAAAAAAAAAAAAnwAAAAAAAACgAAAAAAAAAAAAAACgAAAAAAAAAKEAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACYAAAAAAAAAJgAAAAAAAAAAAAAAAAA8L8" + ], + [ + 43, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAKEAAAAAAAAAogAAAAAAAAAAAAAAogAAAAAAAACjAAAAAAAAAAAAAACjAAAAAAAAAKQAAAAAAAAAAAAAAKQAAAAAAAAApQAAAAAAAAAAAAAApQAAAAAAAACmAAAAAAAAAAAAAACmAAAAAAAAAKcAAAAAAAAAAAAAAKcAAAAAAAAAqAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAChAAAAAAAAAKEAAAAAAAAAAAAAAAAA8L8" + ], + [ + 44, + 1, + "insert", + { + "characters": " core" + }, + "BQAAAKgAAAAAAAAAqQAAAAAAAAAAAAAAqQAAAAAAAACqAAAAAAAAAAAAAACqAAAAAAAAAKsAAAAAAAAAAAAAAKsAAAAAAAAArAAAAAAAAAAAAAAArAAAAAAAAACtAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACoAAAAAAAAAKgAAAAAAAAAAAAAAAAA8L8" + ], + [ + 49, + 1, + "insert", + { + "characters": "re" + }, + "AwAAAL4AAAAAAAAAvwAAAAAAAAAAAAAAvwAAAAAAAAC/AAAAAAAAAAIAAABuZr8AAAAAAAAAwAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC+AAAAAAAAAMAAAAAAAAAAAAAAAAAA8L8" + ], + [ + 56, + 1, + "right_delete", + null, + "AQAAAFMCAAAAAAAAUwIAAAAAAAARAAAAY29uZmlnID0gQ29uZmlnKCk", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABkAgAAAAAAAFMCAAAAAAAAAAAAAAAAQkA" + ], + [ + 58, + 1, + "left_delete", + null, + "AQAAAE4CAAAAAAAATgIAAAAAAAABAAAACg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABPAgAAAAAAAE8CAAAAAAAAAAAAAAAAAAA" + ], + [ + 61, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAKsCAAAAAAAArAIAAAAAAAAAAAAArAIAAAAAAACtAgAAAAAAAAAAAACtAgAAAAAAAK4CAAAAAAAAAAAAAK4CAAAAAAAArwIAAAAAAAAAAAAArwIAAAAAAACwAgAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrAgAAAAAAAKsCAAAAAAAAAAAAAAAAUkA" + ], + [ + 64, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAPECAAAAAAAA8gIAAAAAAAAAAAAA8gIAAAAAAADzAgAAAAAAAAAAAADzAgAAAAAAAPQCAAAAAAAAAAAAAPQCAAAAAAAA9QIAAAAAAAAAAAAA9QIAAAAAAAD2AgAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADxAgAAAAAAAPECAAAAAAAAAAAAAAAA8L8" + ], + [ + 68, + 1, + "right_delete", + null, + "AQAAAHQDAAAAAAAAdAMAAAAAAAARAAAAY29uZmlnID0gQ29uZmlnKCk", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACFAwAAAAAAAHQDAAAAAAAAAAAAAAAAQkA" + ], + [ + 70, + 1, + "left_delete", + null, + "AQAAAG8DAAAAAAAAbwMAAAAAAAABAAAACg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABwAwAAAAAAAHADAAAAAAAAAAAAAAAAAAA" + ], + [ + 74, + 1, + "insert", + { + "characters": "o" + }, + "AQAAABsFAAAAAAAAHAUAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAbBQAAAAAAABsFAAAAAAAAAAAAAAAA8L8" + ], + [ + 75, + 1, + "left_delete", + null, + "AQAAABsFAAAAAAAAGwUAAAAAAAABAAAAbw", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAcBQAAAAAAABwFAAAAAAAAAAAAAAAA8L8" + ], + [ + 76, + 1, + "insert", + { + "characters": "core." + }, + "BQAAABsFAAAAAAAAHAUAAAAAAAAAAAAAHAUAAAAAAAAdBQAAAAAAAAAAAAAdBQAAAAAAAB4FAAAAAAAAAAAAAB4FAAAAAAAAHwUAAAAAAAAAAAAAHwUAAAAAAAAgBQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAbBQAAAAAAABsFAAAAAAAAAAAAAAAA8L8" + ], + [ + 82, + 1, + "right_delete", + null, + "AQAAAAcGAAAAAAAABwYAAAAAAAARAAAAY29uZmlnID0gQ29uZmlnKCk", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAYBgAAAAAAAAcGAAAAAAAAAAAAAAAAQkA" + ], + [ + 84, + 1, + "left_delete", + null, + "AQAAAAIGAAAAAAAAAgYAAAAAAAABAAAACg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAADBgAAAAAAAAMGAAAAAAAAAAAAAAAAAAA" + ], + [ + 89, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAE0GAAAAAAAATgYAAAAAAAAAAAAATgYAAAAAAABPBgAAAAAAAAAAAABPBgAAAAAAAFAGAAAAAAAAAAAAAFAGAAAAAAAAUQYAAAAAAAAAAAAAUQYAAAAAAABSBgAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABNBgAAAAAAAE0GAAAAAAAAAAAAAAAA8L8" + ], + [ + 94, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAFAHAAAAAAAAUQcAAAAAAAAAAAAAUQcAAAAAAABSBwAAAAAAAAAAAABSBwAAAAAAAFMHAAAAAAAAAAAAAFMHAAAAAAAAVAcAAAAAAAAAAAAAVAcAAAAAAABVBwAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABQBwAAAAAAAFAHAAAAAAAAAAAAAAAA8L8" + ], + [ + 98, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAKwHAAAAAAAArQcAAAAAAAAAAAAArQcAAAAAAACuBwAAAAAAAAAAAACuBwAAAAAAAK8HAAAAAAAAAAAAAK8HAAAAAAAAsAcAAAAAAAAAAAAAsAcAAAAAAACxBwAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACsBwAAAAAAAKwHAAAAAAAAAAAAAAAA8L8" + ], + [ + 109, + 1, + "right_delete", + null, + "AQAAAG8DAAAAAAAAbwMAAAAAAAAEAAAAICAgIA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvAwAAAAAAAHMDAAAAAAAA////////738" + ], + [ + 113, + 1, + "left_delete", + null, + "AQAAAG4DAAAAAAAAbgMAAAAAAAABAAAAOg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvAwAAAAAAAG8DAAAAAAAAAAAAAAAAW0A" + ], + [ + 114, + 1, + "insert", + { + "characters": ":" + }, + "AQAAAG4DAAAAAAAAbwMAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABuAwAAAAAAAG4DAAAAAAAAAAAAAAAA8L8" + ], + [ + 124, + 1, + "paste", + null, + "AgAAAK4AAAAAAAAA5QAAAAAAAAAAAAAA5QAAAAAAAADlAAAAAAAAADAAAABmcm9tIHN0YWNvc3lzLmNvcmUuY29uZmlnIGltcG9ydCBDb25maWdQYXJhbWV0ZXI", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADeAAAAAAAAAK4AAAAAAAAAAAAAAAAAAAA" + ], + [ + 5, + 1, + "insert", + { + "characters": ".core" + }, + "BQAAAKEAAAAAAAAAogAAAAAAAAAAAAAAogAAAAAAAACjAAAAAAAAAAAAAACjAAAAAAAAAKQAAAAAAAAAAAAAAKQAAAAAAAAApQAAAAAAAAAAAAAApQAAAAAAAACmAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAoQAAAAAAAAChAAAAAAAAAAAAAAAAAPC/" + ], + [ + 8, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAK4AAAAAAAAArwAAAAAAAAAAAAAArwAAAAAAAACvAAAAAAAAAAQAAABjb3JlrwAAAAAAAACwAAAAAAAAAAAAAACwAAAAAAAAALEAAAAAAAAAAAAAALEAAAAAAAAAsgAAAAAAAAAAAAAAsgAAAAAAAACzAAAAAAAAAAAAAACzAAAAAAAAALQAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAsgAAAAAAAACuAAAAAAAAAAAAAAAAAPC/" + ], + [ + 22, + 1, + "right_delete", + null, + "AQAAALkCAAAAAAAAuQIAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAuQIAAAAAAAC+AgAAAAAAAAAAAAAAAPC/" + ], + [ + 28, + 1, + "right_delete", + null, + "AQAAAPoCAAAAAAAA+gIAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA+gIAAAAAAAD/AgAAAAAAAAAAAAAAAPC/" + ], + [ + 35, + 1, + "right_delete", + null, + "AQAAABsFAAAAAAAAGwUAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAGwUAAAAAAAAgBQAAAAAAAAAAAAAAAPC/" + ], + [ + 40, + 1, + "right_delete", + null, + "AQAAAEgGAAAAAAAASAYAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAATQYAAAAAAABIBgAAAAAAAAAAAAAAAPC/" + ], + [ + 44, + 1, + "right_delete", + null, + "AQAAAEYHAAAAAAAARgcAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAASwcAAAAAAABGBwAAAAAAAAAAAAAAAPC/" + ], + [ + 48, + 1, + "right_delete", + null, + "AQAAAJ0HAAAAAAAAnQcAAAAAAAAFAAAAY29yZS4", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAogcAAAAAAACdBwAAAAAAAAAAAAAAAPC/" + ], + [ + 55, + 2, + "right_delete", + null, + "AgAAAO4AAAAAAAAA7gAAAAAAAAAgAAAAIyBpbXBvcnQgQ29uZmlnLCBDb25maWdQYXJhbWV0ZXLuAAAAAAAAAO4AAAAAAAAAAQAAAAo", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAADgEAAAAAAADuAAAAAAAAAAAAAAAAAAAA" + ], + [ + 5, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAKIAAAAAAAAAowAAAAAAAAAAAAAAowAAAAAAAACjAAAAAAAAAAQAAABjb3JlowAAAAAAAACkAAAAAAAAAAAAAACkAAAAAAAAAKUAAAAAAAAAAAAAAKUAAAAAAAAApgAAAAAAAAAAAAAApgAAAAAAAACnAAAAAAAAAAAAAACnAAAAAAAAAKgAAAAAAAAAAAAAAKgAAAAAAAAAqQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAKIAAAAAAAAApgAAAAAAAAAAAAAAAADwvw" + ], + [ + 9, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAMYAAAAAAAAAxwAAAAAAAAAAAAAAxwAAAAAAAADHAAAAAAAAAAQAAABjb3JlxwAAAAAAAADIAAAAAAAAAAAAAADIAAAAAAAAAMkAAAAAAAAAAAAAAMkAAAAAAAAAygAAAAAAAAAAAAAAygAAAAAAAADLAAAAAAAAAAAAAADLAAAAAAAAAMwAAAAAAAAAAAAAAMwAAAAAAAAAzQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMoAAAAAAAAAxgAAAAAAAAAAAAAAAADwvw" + ], + [ + 12, + 1, + "insert", + { + "characters": "," + }, + "AQAAALcAAAAAAAAAuAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALcAAAAAAAAAtwAAAAAAAAAAAAAAAADwvw" + ], + [ + 13, + 1, + "insert", + { + "characters": " rss" + }, + "BAAAALgAAAAAAAAAuQAAAAAAAAAAAAAAuQAAAAAAAAC6AAAAAAAAAAAAAAC6AAAAAAAAALsAAAAAAAAAAAAAALsAAAAAAAAAvAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALgAAAAAAAAAuAAAAAAAAAAAAAAAAADwvw" + ], + [ + 16, + 1, + "right_delete", + null, + "AQAAAPkAAAAAAAAA+QAAAAAAAAAhAAAAZnJvbSBzdGFjb3N5cy5jb3JlLnJzcyBpbXBvcnQgUnNz", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABoBAAAAAAAA+QAAAAAAAAAAAAAAAAAAAA" + ], + [ + 18, + 2, + "right_delete", + null, + "AgAAAPgAAAAAAAAA+AAAAAAAAAABAAAACvgAAAAAAAAA+AAAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPgAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAA" + ], + [ + 23, + 1, + "right_delete", + null, + "AQAAANUHAAAAAAAA1QcAAAAAAAALAAAAcnNzID0gUnNzKCk", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOAHAAAAAAAA1QcAAAAAAAAAAAAAAABCQA" + ], + [ + 25, + 1, + "left_delete", + null, + "AQAAANAHAAAAAAAA0AcAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANEHAAAAAAAA0QcAAAAAAAAAAAAAAAAAAA" + ], + [ + 28, + 1, + "revert", + null, + "BAAAAAAAAAAAAAAAAAAAAAAAAAC6CQAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQgaGFzaGxpYgppbXBvcnQgbG9nZ2luZwoKZnJvbSBmbGFzayBpbXBvcnQgZmxhc2gsIHJlZGlyZWN0LCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QsIHNlc3Npb24KCmZyb20gc3RhY29zeXMuc2VydmljZSBpbXBvcnQgY29uZmlnLCByc3MKZnJvbSBzdGFjb3N5cy5zZXJ2aWNlLmNvbmZpZ3VyYXRpb24gaW1wb3J0IENvbmZpZ1BhcmFtZXRlcgpmcm9tIHN0YWNvc3lzLmRiIGltcG9ydCBkYW8KZnJvbSBzdGFjb3N5cy5pbnRlcmZhY2UgaW1wb3J0IGFwcAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgphcHAuYWRkX3VybF9ydWxlKCIvd2ViIiwgZW5kcG9pbnQ9ImluZGV4IikKYXBwLmFkZF91cmxfcnVsZSgiL3dlYi8iLCBlbmRwb2ludD0iaW5kZXgiKQoKCkBhcHAuZW5kcG9pbnQoImluZGV4IikKZGVmIGluZGV4KCk6CiAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvYWRtaW4iKQoKCmRlZiBpc19sb2dpbl9vayh1c2VybmFtZSwgcGFzc3dvcmQpOiAgICAKICAgIGhhc2hlZCA9IGhhc2hsaWIuc2hhMjU2KHBhc3N3b3JkLmVuY29kZSgpKS5oZXhkaWdlc3QoKS51cHBlcigpCiAgICByZXR1cm4gKAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLldFQl9VU0VSTkFNRSkgPT0gdXNlcm5hbWUKICAgICAgICBhbmQgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuV0VCX1BBU1NXT1JEKSA9PSBoYXNoZWQKICAgICkKCgpAYXBwLnJvdXRlKCIvd2ViL2xvZ2luIiwgbWV0aG9kcz1bIlBPU1QiLCAiR0VUIl0pCmRlZiBsb2dpbigpOgogICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgIHVzZXJuYW1lID0gcmVxdWVzdC5mb3JtLmdldCgidXNlcm5hbWUiKQogICAgICAgIHBhc3N3b3JkID0gcmVxdWVzdC5mb3JtLmdldCgicGFzc3dvcmQiKQogICAgICAgIGlmIGlzX2xvZ2luX29rKHVzZXJuYW1lLCBwYXNzd29yZCk6CiAgICAgICAgICAgIHNlc3Npb25bInVzZXIiXSA9IHVzZXJuYW1lCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgiL3dlYi9hZG1pbiIpCiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJJZGVudGlmaWFudCBvdSBtb3QgZGUgcGFzc2UgaW5jb3JyZWN0IikKICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvbG9naW4iKQogICAgIyBHRVQKICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoImxvZ2luXyIgKyBjb25maWcuZ2V0KENvbmZpZ1BhcmFtZXRlci5MQU5HKSArICIuaHRtbCIpCgoKQGFwcC5yb3V0ZSgiL3dlYi9sb2dvdXQiLCBtZXRob2RzPVsiR0VUIl0pCmRlZiBsb2dvdXQoKToKICAgIHNlc3Npb24ucG9wKCJ1c2VyIikKICAgIHJldHVybiByZWRpcmVjdCgiL3dlYi9hZG1pbiIpCgoKQGFwcC5yb3V0ZSgiL3dlYi9hZG1pbiIsIG1ldGhvZHM9WyJHRVQiXSkKZGVmIGFkbWluX2hvbWVwYWdlKCk6ICAgIAogICAgaWYgbm90ICgKICAgICAgICAidXNlciIgaW4gc2Vzc2lvbgogICAgICAgIGFuZCBzZXNzaW9uWyJ1c2VyIl0gPT0gY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuV0VCX1VTRVJOQU1FKQogICAgKToKICAgICAgICAjIFRPRE8gbG9jYWxpemF0aW9uCiAgICAgICAgZmxhc2goIlZvdXMgYXZleiDDqXTDqSBkw6ljb25uZWN0w6kuIikKICAgICAgICByZXR1cm4gcmVkaXJlY3QoIi93ZWIvbG9naW4iKQoKICAgIGNvbW1lbnRzID0gZGFvLmZpbmRfbm90X3B1Ymxpc2hlZF9jb21tZW50cygpCiAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKAogICAgICAgICJhZG1pbl8iICsgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuTEFORykgKyAiLmh0bWwiLAogICAgICAgIGNvbW1lbnRzPWNvbW1lbnRzLAogICAgICAgIGJhc2V1cmw9Y29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9VUkwpLAogICAgKQoKCkBhcHAucm91dGUoIi93ZWIvYWRtaW4iLCBtZXRob2RzPVsiUE9TVCJdKQpkZWYgYWRtaW5fYWN0aW9uKCk6ICAgIAogICAgY29tbWVudCA9IGRhby5maW5kX2NvbW1lbnRfYnlfaWQocmVxdWVzdC5mb3JtLmdldCgiY29tbWVudCIpKQogICAgaWYgY29tbWVudCBpcyBOb25lOgogICAgICAgICMgVE9ETyBsb2NhbGl6YXRpb24KICAgICAgICBmbGFzaCgiQ29tbWVudGFpcmUgaW50cm91dmFibGUiKQogICAgZWxpZiByZXF1ZXN0LmZvcm0uZ2V0KCJhY3Rpb24iKSA9PSAiQVBQUk9WRSI6CiAgICAgICAgZGFvLnB1Ymxpc2hfY29tbWVudChjb21tZW50KQogICAgICAgIHJzcy5nZW5lcmF0ZSgpCiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJDb21tZW50YWlyZSBwdWJsacOpIikKICAgIGVsc2U6CiAgICAgICAgZGFvLmRlbGV0ZV9jb21tZW50KGNvbW1lbnQpCiAgICAgICAgIyBUT0RPIGxvY2FsaXphdGlvbgogICAgICAgIGZsYXNoKCJDb21tZW50YWlyZSBzdXBwcmltw6kiKQogICAgcmV0dXJuIHJlZGlyZWN0KCIvd2ViL2FkbWluIikKAAAAAAAAAACoCQAAAAAAAAAAAAAAAAAAAAAAAKgJAAAAAAAAAAAAAAAAAAAAAAAAqAkAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANAHAAAAAAAA0AcAAAAAAAAAAAAAAADwvw" + ] + ] + }, + { + "file": "tests/test_config.py", + "settings": + { + "buffer_size": 1382, + "encoding": "UTF-8", + "line_ending": "Unix" + }, + "undo_stack": + [ + [ + 7, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAEoAAAAAAAAASwAAAAAAAAAAAAAASwAAAAAAAABLAAAAAAAAAAQAAABjb25mSwAAAAAAAABMAAAAAAAAAAAAAABMAAAAAAAAAE0AAAAAAAAAAAAAAE0AAAAAAAAATgAAAAAAAAAAAAAATgAAAAAAAABPAAAAAAAAAAAAAABPAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAUQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAE4AAAAAAAAASgAAAAAAAAAAAAAAAADwvw" + ], + [ + 11, + 1, + "insert", + { + "characters": "uration" + }, + "BwAAAFgAAAAAAAAAWQAAAAAAAAAAAAAAWQAAAAAAAABaAAAAAAAAAAAAAABaAAAAAAAAAFsAAAAAAAAAAAAAAFsAAAAAAAAAXAAAAAAAAAAAAAAAXAAAAAAAAABdAAAAAAAAAAAAAABdAAAAAAAAAF4AAAAAAAAAAAAAAF4AAAAAAAAAXwAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFgAAAAAAAAAWAAAAAAAAAAAAAAAAADwvw" + ], + [ + 15, + 2, + "right_delete", + null, + "AgAAAGcAAAAAAAAAZwAAAAAAAAAHAAAAQ29uZmlnLGcAAAAAAAAAZwAAAAAAAAABAAAAIA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAGcAAAAAAAAAbgAAAAAAAAAAAAAAAADwvw" + ], + [ + 17, + 1, + "insert", + { + "characters": "\nimport" + }, + "BwAAADsAAAAAAAAAPAAAAAAAAAAAAAAAPAAAAAAAAAA9AAAAAAAAAAAAAAA9AAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAPwAAAAAAAAAAAAAAPwAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEEAAAAAAAAAAAAAAEEAAAAAAAAAQgAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADsAAAAAAAAAOwAAAAAAAAAAAAAAADB4QA" + ], + [ + 18, + 1, + "insert", + { + "characters": " st" + }, + "AwAAAEIAAAAAAAAAQwAAAAAAAAAAAAAAQwAAAAAAAABEAAAAAAAAAAAAAABEAAAAAAAAAEUAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEIAAAAAAAAAQgAAAAAAAAAAAAAAAADwvw" + ], + [ + 19, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"session_name\":\"LSP-pyright\",\"item\":{\"label\":\"stacosys\",\"kind\":9,\"sortText\":\"02.9999.stacosys\"}}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "stacosys" + }, + "AgAAAEMAAAAAAAAAQwAAAAAAAAACAAAAc3RDAAAAAAAAAEsAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEUAAAAAAAAARQAAAAAAAAAAAAAAAADwvw" + ], + [ + 20, + 1, + "insert", + { + "characters": ".core" + }, + "BQAAAEsAAAAAAAAATAAAAAAAAAAAAAAATAAAAAAAAABNAAAAAAAAAAAAAABNAAAAAAAAAE4AAAAAAAAAAAAAAE4AAAAAAAAATwAAAAAAAAAAAAAATwAAAAAAAABQAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEsAAAAAAAAASwAAAAAAAAAAAAAAAADwvw" + ], + [ + 21, + 4, + "left_delete", + null, + "BAAAAE8AAAAAAAAATwAAAAAAAAABAAAAZU4AAAAAAAAATgAAAAAAAAABAAAAck0AAAAAAAAATQAAAAAAAAABAAAAb0wAAAAAAAAATAAAAAAAAAABAAAAYw", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFAAAAAAAAAAUAAAAAAAAAAAAAAAAADwvw" + ], + [ + 22, + 1, + "insert", + { + "characters": "ser" + }, + "AwAAAEwAAAAAAAAATQAAAAAAAAAAAAAATQAAAAAAAABOAAAAAAAAAAAAAABOAAAAAAAAAE8AAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEwAAAAAAAAATAAAAAAAAAAAAAAAAADwvw" + ], + [ + 23, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"session_name\":\"LSP-pyright\",\"item\":{\"label\":\"service\",\"kind\":9,\"sortText\":\"02.9999.service\"}}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "service" + }, + "AgAAAEwAAAAAAAAATAAAAAAAAAADAAAAc2VyTAAAAAAAAABTAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAE8AAAAAAAAATwAAAAAAAAAAAAAAAADwvw" + ], + [ + 24, + 1, + "insert", + { + "characters": "." + }, + "AQAAAFMAAAAAAAAAVAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFMAAAAAAAAAUwAAAAAAAAAAAAAAAADwvw" + ], + [ + 27, + 1, + "insert", + { + "characters": "from" + }, + "BQAAADwAAAAAAAAAPQAAAAAAAAAAAAAAPQAAAAAAAAA9AAAAAAAAAAYAAABpbXBvcnQ9AAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAPwAAAAAAAAAAAAAAPwAAAAAAAABAAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADwAAAAAAAAAQgAAAAAAAAAAAAAAAADwvw" + ], + [ + 28, + 1, + "insert", + { + "characters": " " + }, + "AQAAAEAAAAAAAAAAQQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAADwvw" + ], + [ + 31, + 1, + "left_delete", + null, + "AQAAAEEAAAAAAAAAQQAAAAAAAAABAAAAIA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEIAAAAAAAAAQgAAAAAAAAAAAAAAAADwvw" + ], + [ + 33, + 1, + "left_delete", + null, + "AQAAAFEAAAAAAAAAUQAAAAAAAAABAAAALg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFIAAAAAAAAAUgAAAAAAAAAAAAAAAADwvw" + ], + [ + 34, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAFEAAAAAAAAAUgAAAAAAAAAAAAAAUgAAAAAAAABTAAAAAAAAAAAAAABTAAAAAAAAAFQAAAAAAAAAAAAAAFQAAAAAAAAAVQAAAAAAAAAAAAAAVQAAAAAAAABWAAAAAAAAAAAAAABWAAAAAAAAAFcAAAAAAAAAAAAAAFcAAAAAAAAAWAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFEAAAAAAAAAUQAAAAAAAAAAAAAAAADwvw" + ], + [ + 35, + 1, + "insert", + { + "characters": " " + }, + "AQAAAFgAAAAAAAAAWQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFgAAAAAAAAAWAAAAAAAAAAAAAAAAADwvw" + ], + [ + 39, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"session_name\":\"LSP-pyright\",\"item\":{\"label\":\"config\",\"data\":{\"funcParensDisabled\":true,\"workspacePath\":\"/home/yannic/work/stacosys\",\"symbolLabel\":\"config\",\"position\":{\"character\":29,\"line\":5},\"filePath\":\"/home/yannic/work/stacosys/tests/test_config.py\"},\"kind\":6,\"sortText\":\"09.9999.config\"}}", + "format": "command", + "keep_prefix": false, + "must_insert": true, + "trigger": "config" + }, + "AQAAAFkAAAAAAAAAXwAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAFkAAAAAAAAAWQAAAAAAAAAAAAAAAADwvw" + ], + [ + 58, + 1, + "right_delete", + null, + "AQAAADkBAAAAAAAAOQEAAAAAAAAUAAAAc2VsZi5jb25mID0gQ29uZmlnKCk", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAE0BAAAAAAAAOQEAAAAAAAAAAAAAAABSQA" + ], + [ + 60, + 1, + "left_delete", + null, + "AQAAADABAAAAAAAAMAEAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADEBAAAAAAAAMQEAAAAAAAAAAAAAAAAAAA" + ], + [ + 64, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAEEBAAAAAAAAQgEAAAAAAAAAAAAAQgEAAAAAAABCAQAAAAAAAAkAAABzZWxmLmNvbmZCAQAAAAAAAEMBAAAAAAAAAAAAAEMBAAAAAAAARAEAAAAAAAAAAAAARAEAAAAAAABFAQAAAAAAAAAAAABFAQAAAAAAAEYBAAAAAAAAAAAAAEYBAAAAAAAARwEAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEoBAAAAAAAAQQEAAAAAAAAAAAAAAADwvw" + ], + [ + 68, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAI0BAAAAAAAAjgEAAAAAAAAAAAAAjgEAAAAAAACOAQAAAAAAAAkAAABzZWxmLmNvbmaOAQAAAAAAAI8BAAAAAAAAAAAAAI8BAAAAAAAAkAEAAAAAAAAAAAAAkAEAAAAAAACRAQAAAAAAAAAAAACRAQAAAAAAAJIBAAAAAAAAAAAAAJIBAAAAAAAAkwEAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJYBAAAAAAAAjQEAAAAAAAAAAAAAAABSQA" + ], + [ + 79, + 1, + "paste", + null, + "AgAAAPsBAAAAAAAAAQIAAAAAAAAAAAAAAQIAAAAAAAABAgAAAAAAAAkAAABzZWxmLmNvbmY", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPsBAAAAAAAABAIAAAAAAAAAAAAAAADwvw" + ], + [ + 84, + 1, + "paste", + null, + "AgAAAGkCAAAAAAAAbwIAAAAAAAAAAAAAbwIAAAAAAABvAgAAAAAAAAkAAABzZWxmLmNvbmY", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHICAAAAAAAAaQIAAAAAAAAAAAAAAADwvw" + ], + [ + 89, + 1, + "paste", + null, + "AgAAANACAAAAAAAA1gIAAAAAAAAAAAAA1gIAAAAAAADWAgAAAAAAAAkAAABzZWxmLmNvbmY", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANACAAAAAAAA2QIAAAAAAAAAAAAAAADwvw" + ], + [ + 94, + 1, + "paste", + null, + "AgAAACEDAAAAAAAAJwMAAAAAAAAAAAAAJwMAAAAAAAAnAwAAAAAAAAkAAABzZWxmLmNvbmY", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACoDAAAAAAAAIQMAAAAAAAAAAAAAAADwvw" + ], + [ + 99, + 1, + "paste", + null, + "AgAAAIMDAAAAAAAAiQMAAAAAAAAAAAAAiQMAAAAAAACJAwAAAAAAAAkAAABzZWxmLmNvbmY", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIMDAAAAAAAAjAMAAAAAAAAAAAAAAADwvw" + ], + [ + 145, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAM0DAAAAAAAAzgMAAAAAAAAAAAAAzgMAAAAAAADOAwAAAAAAAAkAAABzZWxmLmNvbmbOAwAAAAAAAM8DAAAAAAAAAAAAAM8DAAAAAAAA0AMAAAAAAAAAAAAA0AMAAAAAAADRAwAAAAAAAAAAAADRAwAAAAAAANIDAAAAAAAAAAAAANIDAAAAAAAA0wMAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANYDAAAAAAAAzQMAAAAAAAAAAAAAAADwvw" + ], + [ + 150, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAIIEAAAAAAAAgwQAAAAAAAAAAAAAgwQAAAAAAACDBAAAAAAAAAkAAABzZWxmLmNvbmaDBAAAAAAAAIQEAAAAAAAAAAAAAIQEAAAAAAAAhQQAAAAAAAAAAAAAhQQAAAAAAACGBAAAAAAAAAAAAACGBAAAAAAAAIcEAAAAAAAAAAAAAIcEAAAAAAAAiAQAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIIEAAAAAAAAiwQAAAAAAAAAAAAAAADwvw" + ], + [ + 155, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAK8EAAAAAAAAsAQAAAAAAAAAAAAAsAQAAAAAAACwBAAAAAAAAAkAAABzZWxmLmNvbmawBAAAAAAAALEEAAAAAAAAAAAAALEEAAAAAAAAsgQAAAAAAAAAAAAAsgQAAAAAAACzBAAAAAAAAAAAAACzBAAAAAAAALQEAAAAAAAAAAAAALQEAAAAAAAAtQQAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALgEAAAAAAAArwQAAAAAAAAAAAAAAABSQA" + ], + [ + 160, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAPcEAAAAAAAA+AQAAAAAAAAAAAAA+AQAAAAAAAD4BAAAAAAAAAkAAABzZWxmLmNvbmb4BAAAAAAAAPkEAAAAAAAAAAAAAPkEAAAAAAAA+gQAAAAAAAAAAAAA+gQAAAAAAAD7BAAAAAAAAAAAAAD7BAAAAAAAAPwEAAAAAAAAAAAAAPwEAAAAAAAA/QQAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPcEAAAAAAAAAAUAAAAAAAAAAAAAAADwvw" + ], + [ + 164, + 1, + "insert", + { + "characters": "config" + }, + "BwAAADUFAAAAAAAANgUAAAAAAAAAAAAANgUAAAAAAAA2BQAAAAAAAAkAAABzZWxmLmNvbmY2BQAAAAAAADcFAAAAAAAAAAAAADcFAAAAAAAAOAUAAAAAAAAAAAAAOAUAAAAAAAA5BQAAAAAAAAAAAAA5BQAAAAAAADoFAAAAAAAAAAAAADoFAAAAAAAAOwUAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADUFAAAAAAAAPgUAAAAAAAAAAAAAAADwvw" + ] + ] + }, + { + "file": "Dockerfile", + "settings": + { + "buffer_size": 716, + "line_ending": "Unix" + } + }, + { + "file": "tests/test_api.py", + "settings": + { + "buffer_size": 1634, + "encoding": "UTF-8", + "line_ending": "Unix" + } + }, + { + "file": "stacosys/service/__init__.py", + "settings": + { + "buffer_size": 180, + "encoding": "UTF-8", + "line_ending": "Unix" + }, + "undo_stack": + [ + [ + 4, + 1, + "insert", + { + "characters": "from" + }, + "BAAAAFEAAAAAAAAAUgAAAAAAAAAAAAAAUgAAAAAAAABTAAAAAAAAAAAAAABTAAAAAAAAAFQAAAAAAAAAAAAAAFQAAAAAAAAAVQAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAUQAAAAAAAABRAAAAAAAAAAAAAAAAAPC/" + ], + [ + 5, + 1, + "insert", + { + "characters": " .maile" + }, + "BwAAAFUAAAAAAAAAVgAAAAAAAAAAAAAAVgAAAAAAAABXAAAAAAAAAAAAAABXAAAAAAAAAFgAAAAAAAAAAAAAAFgAAAAAAAAAWQAAAAAAAAAAAAAAWQAAAAAAAABaAAAAAAAAAAAAAABaAAAAAAAAAFsAAAAAAAAAAAAAAFsAAAAAAAAAXAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAVQAAAAAAAABVAAAAAAAAAAAAAAAAAPC/" + ], + [ + 6, + 1, + "insert", + { + "characters": "r" + }, + "AQAAAFwAAAAAAAAAXQAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXAAAAAAAAABcAAAAAAAAAAAAAAAAAPC/" + ], + [ + 7, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAF0AAAAAAAAAXgAAAAAAAAAAAAAAXgAAAAAAAABfAAAAAAAAAAAAAABfAAAAAAAAAGAAAAAAAAAAAAAAAGAAAAAAAAAAYQAAAAAAAAAAAAAAYQAAAAAAAABiAAAAAAAAAAAAAABiAAAAAAAAAGMAAAAAAAAAAAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXQAAAAAAAABdAAAAAAAAAAAAAAAAAPC/" + ], + [ + 8, + 1, + "insert", + { + "characters": " Mailer" + }, + "BwAAAGQAAAAAAAAAZQAAAAAAAAAAAAAAZQAAAAAAAABmAAAAAAAAAAAAAABmAAAAAAAAAGcAAAAAAAAAAAAAAGcAAAAAAAAAaAAAAAAAAAAAAAAAaAAAAAAAAABpAAAAAAAAAAAAAABpAAAAAAAAAGoAAAAAAAAAAAAAAGoAAAAAAAAAawAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZAAAAAAAAABkAAAAAAAAAAAAAAAAAPC/" + ], + [ + 9, + 1, + "insert", + { + "characters": "\n" + }, + "AQAAAGsAAAAAAAAAbAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAawAAAAAAAABrAAAAAAAAAAAAAAAAAPC/" + ], + [ + 11, + 1, + "insert", + { + "characters": "mailer" + }, + "BgAAAH8AAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAACBAAAAAAAAAAAAAACBAAAAAAAAAIIAAAAAAAAAAAAAAIIAAAAAAAAAgwAAAAAAAAAAAAAAgwAAAAAAAACEAAAAAAAAAAAAAACEAAAAAAAAAIUAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAfwAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA" + ], + [ + 12, + 1, + "insert", + { + "characters": " =" + }, + "AgAAAIUAAAAAAAAAhgAAAAAAAAAAAAAAhgAAAAAAAACHAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAhQAAAAAAAACFAAAAAAAAAAAAAAAAAPC/" + ], + [ + 13, + 1, + "insert", + { + "characters": " " + }, + "AQAAAIcAAAAAAAAAiAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAhwAAAAAAAACHAAAAAAAAAAAAAAAAAPC/" + ], + [ + 17, + 2, + "left_delete", + null, + "AgAAAFwAAAAAAAAAXAAAAAAAAAABAAAAclsAAAAAAAAAWwAAAAAAAAABAAAAZQ", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXQAAAAAAAABdAAAAAAAAAAAAAAAAAPC/" + ], + [ + 22, + 1, + "insert", + { + "characters": "Mailer" + }, + "BgAAAIYAAAAAAAAAhwAAAAAAAAAAAAAAhwAAAAAAAACIAAAAAAAAAAAAAACIAAAAAAAAAIkAAAAAAAAAAAAAAIkAAAAAAAAAigAAAAAAAAAAAAAAigAAAAAAAACLAAAAAAAAAAAAAACLAAAAAAAAAIwAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAhgAAAAAAAACGAAAAAAAAAAAAAAAAAPC/" + ], + [ + 23, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAAIwAAAAAAAAAjgAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAjAAAAAAAAACMAAAAAAAAAAAAAAAAAPC/" + ], + [ + 33, + 1, + "insert", + { + "characters": "\nfrom" + }, + "BQAAAGkAAAAAAAAAagAAAAAAAAAAAAAAagAAAAAAAABrAAAAAAAAAAAAAABrAAAAAAAAAGwAAAAAAAAAAAAAAGwAAAAAAAAAbQAAAAAAAAAAAAAAbQAAAAAAAABuAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAaQAAAAAAAABpAAAAAAAAAAAAAAAAAPC/" + ], + [ + 34, + 1, + "insert", + { + "characters": " .rss" + }, + "BQAAAG4AAAAAAAAAbwAAAAAAAAAAAAAAbwAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAHEAAAAAAAAAAAAAAHEAAAAAAAAAcgAAAAAAAAAAAAAAcgAAAAAAAABzAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAbgAAAAAAAABuAAAAAAAAAAAAAAAAAPC/" + ], + [ + 35, + 1, + "insert", + { + "characters": "feed" + }, + "BAAAAHMAAAAAAAAAdAAAAAAAAAAAAAAAdAAAAAAAAAB1AAAAAAAAAAAAAAB1AAAAAAAAAHYAAAAAAAAAAAAAAHYAAAAAAAAAdwAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAcwAAAAAAAABzAAAAAAAAAAAAAAAAAPC/" + ], + [ + 36, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAHcAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAB5AAAAAAAAAAAAAAB5AAAAAAAAAHoAAAAAAAAAAAAAAHoAAAAAAAAAewAAAAAAAAAAAAAAewAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAH0AAAAAAAAAAAAAAH0AAAAAAAAAfgAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAdwAAAAAAAAB3AAAAAAAAAAAAAAAAAPC/" + ], + [ + 37, + 1, + "insert", + { + "characters": " " + }, + "AQAAAH4AAAAAAAAAfwAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAfgAAAAAAAAB+AAAAAAAAAAAAAAAAAPC/" + ], + [ + 38, + 1, + "insert", + { + "characters": "Rss" + }, + "AwAAAH8AAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAACBAAAAAAAAAAAAAACBAAAAAAAAAIIAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAfwAAAAAAAAB/AAAAAAAAAAAAAAAAAPC/" + ], + [ + 41, + 1, + "insert", + { + "characters": "\nrss" + }, + "BAAAAKcAAAAAAAAAqAAAAAAAAAAAAAAAqAAAAAAAAACpAAAAAAAAAAAAAACpAAAAAAAAAKoAAAAAAAAAAAAAAKoAAAAAAAAAqwAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAApwAAAAAAAACnAAAAAAAAAAAAAAAAAGtA" + ], + [ + 42, + 1, + "insert", + { + "characters": " =" + }, + "AgAAAKsAAAAAAAAArAAAAAAAAAAAAAAArAAAAAAAAACtAAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAqwAAAAAAAACrAAAAAAAAAAAAAAAAAPC/" + ], + [ + 43, + 1, + "insert", + { + "characters": " Rss" + }, + "BAAAAK0AAAAAAAAArgAAAAAAAAAAAAAArgAAAAAAAACvAAAAAAAAAAAAAACvAAAAAAAAALAAAAAAAAAAAAAAALAAAAAAAAAAsQAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAArQAAAAAAAACtAAAAAAAAAAAAAAAAAPC/" + ], + [ + 44, + 1, + "insert_snippet", + { + "contents": "($0)" + }, + "AQAAALEAAAAAAAAAswAAAAAAAAAAAAAA", + "BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAsQAAAAAAAACxAAAAAAAAAAAAAAAAAPC/" + ], + [ + 9, + 1, + "revert", + null, + "BAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpmcm9tIC5jb25maWd1cmF0aW9uIGltcG9ydCBDb25maWcKZnJvbSAubWFpbCBpbXBvcnQgTWFpbGVyCmZyb20gLnJzc2ZlZWQgaW1wb3J0IFJzcwoKY29uZmlnID0gQ29uZmlnKCkKbWFpbGVyID0gTWFpbGVyKCkKcnNzID0gUnNzKCkAAAAAAAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJUAAAAAAAAAlQAAAAAAAAAAAAAAAADwvw" + ] + ] + }, + { + "file": "stacosys/interface/form.py", + "settings": + { + "buffer_size": 2659, + "encoding": "UTF-8", + "line_ending": "Unix" + }, + "undo_stack": + [ + [ + 7, + 1, + "right_delete", + null, + "AQAAAJ0AAAAAAAAAnQAAAAAAAAAHAAAAQ29uZmlnLA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdAAAAAAAAAKQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 9, + 1, + "insert", + { + "characters": "\nfrom" + }, + "BQAAAHsAAAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAAAB9AAAAAAAAAAAAAAB9AAAAAAAAAH4AAAAAAAAAAAAAAH4AAAAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAAACAAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB7AAAAAAAAAHsAAAAAAAAAAAAAAACQckA" + ], + [ + 10, + 1, + "insert", + { + "characters": " stacosys" + }, + "CQAAAIAAAAAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAAACCAAAAAAAAAAAAAACCAAAAAAAAAIMAAAAAAAAAAAAAAIMAAAAAAAAAhAAAAAAAAAAAAAAAhAAAAAAAAACFAAAAAAAAAAAAAACFAAAAAAAAAIYAAAAAAAAAAAAAAIYAAAAAAAAAhwAAAAAAAAAAAAAAhwAAAAAAAACIAAAAAAAAAAAAAACIAAAAAAAAAIkAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACAAAAAAAAAAIAAAAAAAAAAAAAAAAAA8L8" + ], + [ + 11, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAIkAAAAAAAAAigAAAAAAAAAAAAAAigAAAAAAAACLAAAAAAAAAAAAAACLAAAAAAAAAIwAAAAAAAAAAAAAAIwAAAAAAAAAjQAAAAAAAAAAAAAAjQAAAAAAAACOAAAAAAAAAAAAAACOAAAAAAAAAI8AAAAAAAAAAAAAAI8AAAAAAAAAkAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJAAAAAAAAAIkAAAAAAAAAAAAAAAAA8L8" + ], + [ + 12, + 1, + "insert", + { + "characters": " core" + }, + "BQAAAJAAAAAAAAAAkQAAAAAAAAAAAAAAkQAAAAAAAACSAAAAAAAAAAAAAACSAAAAAAAAAJMAAAAAAAAAAAAAAJMAAAAAAAAAlAAAAAAAAAAAAAAAlAAAAAAAAACVAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACQAAAAAAAAAJAAAAAAAAAAAAAAAAAA8L8" + ], + [ + 19, + 1, + "insert", + { + "characters": "core" + }, + "BQAAAKQAAAAAAAAApQAAAAAAAAAAAAAApQAAAAAAAAClAAAAAAAAAAQAAABjb25mpQAAAAAAAACmAAAAAAAAAAAAAACmAAAAAAAAAKcAAAAAAAAAAAAAAKcAAAAAAAAAqAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACkAAAAAAAAAKgAAAAAAAAAAAAAAAAA8L8" + ], + [ + 24, + 1, + "right_delete", + null, + "AQAAAJ8BAAAAAAAAnwEAAAAAAAARAAAAY29uZmlnID0gQ29uZmlnKCk", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwAQAAAAAAAJ8BAAAAAAAAAAAAAAAAQkA" + ], + [ + 26, + 1, + "left_delete", + null, + "AQAAAJoBAAAAAAAAmgEAAAAAAAABAAAACg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbAQAAAAAAAJsBAAAAAAAAAAAAAAAAAAA" + ], + [ + 31, + 1, + "insert", + { + "characters": "core." + }, + "BQAAALgFAAAAAAAAuQUAAAAAAAAAAAAAuQUAAAAAAAC6BQAAAAAAAAAAAAC6BQAAAAAAALsFAAAAAAAAAAAAALsFAAAAAAAAvAUAAAAAAAAAAAAAvAUAAAAAAAC9BQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC4BQAAAAAAALgFAAAAAAAAAAAAAAAA8L8" + ], + [ + 36, + 1, + "right_delete", + null, + "AQAAAAsHAAAAAAAACwcAAAAAAAARAAAAY29uZmlnID0gQ29uZmlnKCk", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAcBwAAAAAAAAsHAAAAAAAAAAAAAAAAQkA" + ], + [ + 38, + 1, + "left_delete", + null, + "AQAAAAYHAAAAAAAABgcAAAAAAAABAAAACg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAHBwAAAAAAAAcHAAAAAAAAAAAAAAAAAAA" + ], + [ + 43, + 1, + "insert", + { + "characters": "core." + }, + "BQAAANMIAAAAAAAA1AgAAAAAAAAAAAAA1AgAAAAAAADVCAAAAAAAAAAAAADVCAAAAAAAANYIAAAAAAAAAAAAANYIAAAAAAAA1wgAAAAAAAAAAAAA1wgAAAAAAADYCAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADTCAAAAAAAANMIAAAAAAAAAAAAAAAA8L8" + ], + [ + 49, + 1, + "insert", + { + "characters": "coer." + }, + "BQAAABoHAAAAAAAAGwcAAAAAAAAAAAAAGwcAAAAAAAAcBwAAAAAAAAAAAAAcBwAAAAAAAB0HAAAAAAAAAAAAAB0HAAAAAAAAHgcAAAAAAAAAAAAAHgcAAAAAAAAfBwAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAaBwAAAAAAABoHAAAAAAAAAAAAAAAA8L8" + ], + [ + 52, + 1, + "insert", + { + "characters": "re" + }, + "AwAAABwHAAAAAAAAHQcAAAAAAAAAAAAAHQcAAAAAAAAdBwAAAAAAAAIAAABlch0HAAAAAAAAHgcAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAeBwAAAAAAABwHAAAAAAAAAAAAAAAA8L8" + ], + [ + 57, + 1, + "paste", + null, + "AgAAAJYAAAAAAAAAzQAAAAAAAAAAAAAAzQAAAAAAAADNAAAAAAAAADEAAABmcm9tIHN0YWNvc3lzLmNvcmUuY29uZmlnIGltcG9ydCAgQ29uZmlnUGFyYW1ldGVy", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADHAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAA" + ], + [ + 5, + 1, + "insert", + { + "characters": ".ser" + }, + "BAAAAIkAAAAAAAAAigAAAAAAAAAAAAAAigAAAAAAAACLAAAAAAAAAAAAAACLAAAAAAAAAIwAAAAAAAAAAAAAAIwAAAAAAAAAjQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIkAAAAAAAAAiQAAAAAAAAAAAAAAAADwvw" + ], + [ + 6, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"session_name\":\"LSP-pyright\",\"item\":{\"label\":\"service\",\"kind\":9,\"sortText\":\"02.9999.service\"}}", + "format": "command", + "keep_prefix": false, + "must_insert": false, + "trigger": "service" + }, + "AgAAAIoAAAAAAAAAigAAAAAAAAADAAAAc2VyigAAAAAAAACRAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAI0AAAAAAAAAjQAAAAAAAAAAAAAAAADwvw" + ], + [ + 10, + 1, + "insert", + { + "characters": "config" + }, + "BwAAAJkAAAAAAAAAmgAAAAAAAAAAAAAAmgAAAAAAAACaAAAAAAAAAAQAAABjb3JlmgAAAAAAAACbAAAAAAAAAAAAAACbAAAAAAAAAJwAAAAAAAAAAAAAAJwAAAAAAAAAnQAAAAAAAAAAAAAAnQAAAAAAAACeAAAAAAAAAAAAAACeAAAAAAAAAJ8AAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJ0AAAAAAAAAmQAAAAAAAAAAAAAAAADwvw" + ], + [ + 11, + 1, + "insert", + { + "characters": "," + }, + "AQAAAJ8AAAAAAAAAoAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJ8AAAAAAAAAnwAAAAAAAAAAAAAAAADwvw" + ], + [ + 12, + 1, + "insert", + { + "characters": " mailer" + }, + "BwAAAKAAAAAAAAAAoQAAAAAAAAAAAAAAoQAAAAAAAACiAAAAAAAAAAAAAACiAAAAAAAAAKMAAAAAAAAAAAAAAKMAAAAAAAAApAAAAAAAAAAAAAAApAAAAAAAAAClAAAAAAAAAAAAAAClAAAAAAAAAKYAAAAAAAAAAAAAAKYAAAAAAAAApwAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAKAAAAAAAAAAoAAAAAAAAAAAAAAAAADwvw" + ], + [ + 16, + 1, + "right_delete", + null, + "AQAAAOAAAAAAAAAA4AAAAAAAAAAnAAAAZnJvbSBzdGFjb3N5cy5jb3JlLm1haWxlciBpbXBvcnQgTWFpbGVy", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAcBAAAAAAAA4AAAAAAAAAAAAAAAAAAAAA" + ], + [ + 17, + 1, + "left_delete", + null, + "AQAAAN8AAAAAAAAA3wAAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOAAAAAAAAAA4AAAAAAAAAAAAAAAAADwvw" + ], + [ + 20, + 1, + "insert", + { + "characters": "service" + }, + "CAAAALYAAAAAAAAAtwAAAAAAAAAAAAAAtwAAAAAAAAC3AAAAAAAAAAQAAABjb3JltwAAAAAAAAC4AAAAAAAAAAAAAAC4AAAAAAAAALkAAAAAAAAAAAAAALkAAAAAAAAAugAAAAAAAAAAAAAAugAAAAAAAAC7AAAAAAAAAAAAAAC7AAAAAAAAALwAAAAAAAAAAAAAALwAAAAAAAAAvQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALYAAAAAAAAAugAAAAAAAAAAAAAAAADwvw" + ], + [ + 26, + 1, + "right_delete", + null, + "AQAAAKsFAAAAAAAAqwUAAAAAAAAFAAAAY29yZS4", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALAFAAAAAAAAqwUAAAAAAAAAAAAAAADwvw" + ], + [ + 33, + 1, + "right_delete", + null, + "AQAAAAgHAAAAAAAACAcAAAAAAAAFAAAAY29yZS4", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA0HAAAAAAAACAcAAAAAAAAAAAAAAADwvw" + ], + [ + 39, + 1, + "right_delete", + null, + "AQAAAJ8IAAAAAAAAnwgAAAAAAAARAAAAbWFpbGVyID0gTWFpbGVyKCk", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALAIAAAAAAAAnwgAAAAAAAAAAAAAAABCQA" + ], + [ + 41, + 1, + "left_delete", + null, + "AQAAAJoIAAAAAAAAmggAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJsIAAAAAAAAmwgAAAAAAAAAAAAAAAAAAA" + ], + [ + 45, + 1, + "right_delete", + null, + "AQAAAK8IAAAAAAAArwgAAAAAAAAFAAAAY29yZS4", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALQIAAAAAAAArwgAAAAAAAAAAAAAAADwvw" + ], + [ + 48, + 1, + "revert", + null, + "BAAAAAAAAAAAAAAAAAAAAAAAAABvCgAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCmltcG9ydCBsb2dnaW5nCgppbXBvcnQgYmFja2dyb3VuZApmcm9tIGZsYXNrIGltcG9ydCBhYm9ydCwgcmVkaXJlY3QsIHJlcXVlc3QKCmZyb20gc3RhY29zeXMuc2VydmljZSBpbXBvcnQgY29uZmlnLCBtYWlsZXIKZnJvbSBzdGFjb3N5cy5zZXJ2aWNlLmNvbmZpZ3VyYXRpb24gaW1wb3J0IENvbmZpZ1BhcmFtZXRlcgpmcm9tIHN0YWNvc3lzLmRiIGltcG9ydCBkYW8KZnJvbSBzdGFjb3N5cy5pbnRlcmZhY2UgaW1wb3J0IGFwcAoKbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKQGFwcC5yb3V0ZSgiL25ld2NvbW1lbnQiLCBtZXRob2RzPVsiUE9TVCJdKQpkZWYgbmV3X2Zvcm1fY29tbWVudCgpOiAgICAKICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0KICAgIGxvZ2dlci5pbmZvKCJmb3JtIGRhdGEgJXMiLCBzdHIoZGF0YSkpCgogICAgIyBob25leXBvdCBmb3Igc3BhbW1lcnMKICAgIGNhcHRjaGEgPSBkYXRhLmdldCgicmVtYXJxdWUiLCAiIikKICAgIGlmIGNhcHRjaGE6CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoImRpc2NhcmQgc3BhbTogZGF0YSAlcyIsIGRhdGEpCiAgICAgICAgYWJvcnQoNDAwKQoKICAgIHVybCA9IGRhdGEuZ2V0KCJ1cmwiLCAiIikKICAgIGF1dGhvcl9uYW1lID0gZGF0YS5nZXQoImF1dGhvciIsICIiKS5zdHJpcCgpCiAgICBhdXRob3JfZ3JhdmF0YXIgPSBkYXRhLmdldCgiZW1haWwiLCAiIikuc3RyaXAoKQogICAgYXV0aG9yX3NpdGUgPSBkYXRhLmdldCgic2l0ZSIsICIiKS5sb3dlcigpLnN0cmlwKCkKICAgIGlmIGF1dGhvcl9zaXRlIGFuZCBhdXRob3Jfc2l0ZVs6NF0gIT0gImh0dHAiOgogICAgICAgIGF1dGhvcl9zaXRlID0gImh0dHA6Ly8iICsgYXV0aG9yX3NpdGUKICAgIG1lc3NhZ2UgPSBkYXRhLmdldCgibWVzc2FnZSIsICIiKQoKICAgICMgYW50aS1zcGFtIGFnYWluCiAgICBpZiBub3QgdXJsIG9yIG5vdCBhdXRob3JfbmFtZSBvciBub3QgbWVzc2FnZToKICAgICAgICBsb2dnZXIud2FybmluZygiZW1wdHkgZmllbGQ6IGRhdGEgJXMiLCBkYXRhKQogICAgICAgIGFib3J0KDQwMCkKICAgIGlmIG5vdCBjaGVja19mb3JtX2RhdGEoZGF0YS50b19kaWN0KCkpOgogICAgICAgIGxvZ2dlci53YXJuaW5nKCJhZGRpdGlvbmFsIGZpZWxkOiBkYXRhICVzIiwgZGF0YSkKICAgICAgICBhYm9ydCg0MDApCgogICAgIyBhZGQgYSByb3cgdG8gQ29tbWVudCB0YWJsZQogICAgY29tbWVudCA9IGRhby5jcmVhdGVfY29tbWVudCgKICAgICAgICB1cmwsIGF1dGhvcl9uYW1lLCBhdXRob3Jfc2l0ZSwgYXV0aG9yX2dyYXZhdGFyLCBtZXNzYWdlCiAgICApCgogICAgIyBzZW5kIG5vdGlmaWNhdGlvbiBlLW1haWwgYXN5bmNocm9ub3VzbHkKICAgIHN1Ym1pdF9uZXdfY29tbWVudChjb21tZW50KQoKICAgIHJldHVybiByZWRpcmVjdChjb25maWcuZ2V0KENvbmZpZ1BhcmFtZXRlci5TSVRFX1JFRElSRUNUKSwgY29kZT0zMDIpCgoKZGVmIGNoZWNrX2Zvcm1fZGF0YShwb3N0ZWRfY29tbWVudCk6CiAgICBmaWVsZHMgPSBbInVybCIsICJtZXNzYWdlIiwgInNpdGUiLCAicmVtYXJxdWUiLCAiYXV0aG9yIiwgInRva2VuIiwgImVtYWlsIl0KICAgIGZpbHRlcmVkID0gZGljdChmaWx0ZXIobGFtYmRhIHg6IHhbMF0gbm90IGluIGZpZWxkcywgcG9zdGVkX2NvbW1lbnQuaXRlbXMoKSkpCiAgICByZXR1cm4gbm90IGZpbHRlcmVkCgoKQGJhY2tncm91bmQudGFzawpkZWYgc3VibWl0X25ld19jb21tZW50KGNvbW1lbnQpOiAgICAKICAgIHNpdGVfdXJsID0gY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9VUkwpCiAgICBjb21tZW50X2xpc3QgPSAoCiAgICAgICAgZiJXZWIgYWRtaW4gaW50ZXJmYWNlOiB7c2l0ZV91cmx9L3dlYi9hZG1pbiIsCiAgICAgICAgIiIsCiAgICAgICAgZiJhdXRob3I6IHtjb21tZW50LmF1dGhvcl9uYW1lfSIsCiAgICAgICAgZiJzaXRlOiB7Y29tbWVudC5hdXRob3Jfc2l0ZX0iLAogICAgICAgIGYiZGF0ZToge2NvbW1lbnQuY3JlYXRlZH0iLAogICAgICAgIGYidXJsOiB7Y29tbWVudC51cmx9IiwKICAgICAgICAiIiwKICAgICAgICBjb21tZW50LmNvbnRlbnQsCiAgICAgICAgIiIsCiAgICApCiAgICBlbWFpbF9ib2R5ID0gIlxuIi5qb2luKGNvbW1lbnRfbGlzdCkKCiAgICAjIHNlbmQgZW1haWwgdG8gbm90aWZ5IGFkbWluICAgIAogICAgc2l0ZV9uYW1lID0gY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9OQU1FKQogICAgc3ViamVjdCA9IGYiU1RBQ09TWVMge3NpdGVfbmFtZX0iCiAgICBpZiBtYWlsZXIuc2VuZChzdWJqZWN0LCBlbWFpbF9ib2R5KToKICAgICAgICBsb2dnZXIuZGVidWcoIm5ldyBjb21tZW50IHByb2Nlc3NlZCIpCgogICAgICAgICMgc2F2ZSBub3RpZmljYXRpb24gZGF0ZXRpbWUKICAgICAgICBkYW8ubm90aWZ5X2NvbW1lbnQoY29tbWVudCkKICAgIGVsc2U6CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoInJlc2NoZWR1bGVkLiBzZW5kIG1haWwgZmFpbHVyZSAlcyIsIHN1YmplY3QpCgoKQGJhY2tncm91bmQuY2FsbGJhY2sKZGVmIHN1Ym1pdF9uZXdfY29tbWVudF9jYWxsYmFjayhmdXR1cmUpOgogICAgIyBUT0RPIHVzZSBmdXR1cmUgdG8gbG9nIHN1Ym1pdCBzdGF0dXMKICAgIGxvZ2dlci5kZWJ1ZyhmdXR1cmUpCgAAAAAAAAAAYwoAAAAAAAAAAAAAAAAAAAAAAABjCgAAAAAAAAAAAAAAAAAAAAAAAGMKAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAADQJAAAAAAAANAkAAAAAAAAAAAAAAABiQA" + ] + ] + }, + { + "file": "stacosys/run.py", + "settings": + { + "buffer_size": 2789, + "encoding": "UTF-8", + "line_ending": "Unix" + }, + "undo_stack": + [ + [ + 7, + 1, + "insert", + { + "characters": "core" + }, + "BQAAAG4AAAAAAAAAbwAAAAAAAAAAAAAAbwAAAAAAAABvAAAAAAAAAAQAAABjb25mbwAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAHEAAAAAAAAAAAAAAHEAAAAAAAAAcgAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABuAAAAAAAAAHIAAAAAAAAAAAAAAAAA8L8" + ], + [ + 11, + 1, + "cut", + null, + "AQAAAIEAAAAAAAAAgQAAAAAAAAAHAAAAQ29uZmlnLA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACBAAAAAAAAAIgAAAAAAAAAAAAAAAAA8L8" + ], + [ + 12, + 1, + "right_delete", + null, + "AQAAAIEAAAAAAAAAgQAAAAAAAAABAAAAIA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACBAAAAAAAAAIEAAAAAAAAAAAAAAAAA8L8" + ], + [ + 14, + 1, + "insert", + { + "characters": "\n" + }, + "AQAAAF8AAAAAAAAAYAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABfAAAAAAAAAF8AAAAAAAAAAAAAAACQckA" + ], + [ + 19, + 1, + "paste", + null, + "AQAAAGAAAAAAAAAAcgAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAA8L8" + ], + [ + 20, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAHIAAAAAAAAAcwAAAAAAAAAAAAAAcwAAAAAAAAB0AAAAAAAAAAAAAAB0AAAAAAAAAHUAAAAAAAAAAAAAAHUAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAB3AAAAAAAAAAAAAAB3AAAAAAAAAHgAAAAAAAAAAAAAAHgAAAAAAAAAeQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAByAAAAAAAAAHIAAAAAAAAAAAAAAAAA8L8" + ], + [ + 21, + 1, + "insert", + { + "characters": " config" + }, + "BwAAAHkAAAAAAAAAegAAAAAAAAAAAAAAegAAAAAAAAB7AAAAAAAAAAAAAAB7AAAAAAAAAHwAAAAAAAAAAAAAAHwAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAH8AAAAAAAAAAAAAAH8AAAAAAAAAgAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5AAAAAAAAAHkAAAAAAAAAAAAAAAAA8L8" + ], + [ + 36, + 1, + "insert", + { + "characters": "import" + }, + "BwAAAGAAAAAAAAAAYQAAAAAAAAAAAAAAYQAAAAAAAABhAAAAAAAAAAQAAABmcm9tYQAAAAAAAABiAAAAAAAAAAAAAABiAAAAAAAAAGMAAAAAAAAAAAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAAZAAAAAAAAABlAAAAAAAAAAAAAABlAAAAAAAAAGYAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABgAAAAAAAAAGQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 41, + 1, + "right_delete", + null, + "AQAAAHQAAAAAAAAAdAAAAAAAAAAOAAAAIGltcG9ydCBjb25maWc", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACCAAAAAAAAAHQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 53, + 1, + "right_delete", + null, + "AQAAAJ0EAAAAAAAAnQQAAAAAAAAHAAAAY29uZiA9IA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACkBAAAAAAAAJ0EAAAAAAAAAAAAAAAAQkA" + ], + [ + 54, + 1, + "insert", + { + "characters": "core.c" + }, + "BgAAAJ0EAAAAAAAAngQAAAAAAAAAAAAAngQAAAAAAACfBAAAAAAAAAAAAACfBAAAAAAAAKAEAAAAAAAAAAAAAKAEAAAAAAAAoQQAAAAAAAAAAAAAoQQAAAAAAACiBAAAAAAAAAAAAACiBAAAAAAAAKMEAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdBAAAAAAAAJ0EAAAAAAAAAAAAAAAA8L8" + ], + [ + 55, + 1, + "right_delete", + null, + "AQAAAKMEAAAAAAAAowQAAAAAAAABAAAAQw", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACjBAAAAAAAAKMEAAAAAAAAAAAAAAAA8L8" + ], + [ + 79, + 1, + "insert", + { + "characters": "from" + }, + "BAAAAGAAAAAAAAAAYQAAAAAAAAAAAAAAYQAAAAAAAABiAAAAAAAAAAAAAABiAAAAAAAAAGMAAAAAAAAAAAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAA" + ], + [ + 80, + 1, + "insert", + { + "characters": " " + }, + "AQAAAGQAAAAAAAAAZQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABkAAAAAAAAAGQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 82, + 2, + "right_delete", + null, + "AgAAAGUAAAAAAAAAZQAAAAAAAAAGAAAAaW1wb3J0ZQAAAAAAAABlAAAAAAAAAAEAAAAg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAAAAAAAAAGsAAAAAAAAAAAAAAAAA8L8" + ], + [ + 84, + 1, + "insert", + { + "characters": " imo" + }, + "BAAAAG0AAAAAAAAAbgAAAAAAAAAAAAAAbgAAAAAAAABvAAAAAAAAAAAAAABvAAAAAAAAAHAAAAAAAAAAAAAAAHAAAAAAAAAAcQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtAAAAAAAAAG0AAAAAAAAAAAAAAAAA8L8" + ], + [ + 85, + 1, + "left_delete", + null, + "AQAAAHAAAAAAAAAAcAAAAAAAAAABAAAAbw", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABxAAAAAAAAAHEAAAAAAAAAAAAAAAAA8L8" + ], + [ + 86, + 1, + "insert", + { + "characters": "port" + }, + "BAAAAHAAAAAAAAAAcQAAAAAAAAAAAAAAcQAAAAAAAAByAAAAAAAAAAAAAAByAAAAAAAAAHMAAAAAAAAAAAAAAHMAAAAAAAAAdAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABwAAAAAAAAAHAAAAAAAAAAAAAAAAAA8L8" + ], + [ + 87, + 1, + "right_delete", + null, + "AQAAAHQAAAAAAAAAdAAAAAAAAAABAAAALg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB0AAAAAAAAAHQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 88, + 1, + "insert", + { + "characters": " " + }, + "AQAAAHQAAAAAAAAAdQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB0AAAAAAAAAHQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 97, + 1, + "insert", + { + "characters": "core" + }, + "BAAAAOYEAAAAAAAA5wQAAAAAAAAAAAAA5wQAAAAAAADoBAAAAAAAAAAAAADoBAAAAAAAAOkEAAAAAAAAAAAAAOkEAAAAAAAA6gQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADmBAAAAAAAAOYEAAAAAAAAAAAAAAAA8L8" + ], + [ + 100, + 1, + "insert", + { + "characters": "." + }, + "AQAAAOoEAAAAAAAA6wQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqBAAAAAAAAOoEAAAAAAAAAAAAAAAA8L8" + ], + [ + 102, + 1, + "insert", + { + "characters": "ig" + }, + "AgAAAO8EAAAAAAAA8AQAAAAAAAAAAAAA8AQAAAAAAADxBAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvBAAAAAAAAO8EAAAAAAAAAAAAAAAA8L8" + ], + [ + 107, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAHwFAAAAAAAAfQUAAAAAAAAAAAAAfQUAAAAAAAB+BQAAAAAAAAAAAAB+BQAAAAAAAH8FAAAAAAAAAAAAAH8FAAAAAAAAgAUAAAAAAAAAAAAAgAUAAAAAAACBBQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB8BQAAAAAAAHwFAAAAAAAAAAAAAAAA8L8" + ], + [ + 110, + 1, + "insert", + { + "characters": "ig" + }, + "AgAAAIUFAAAAAAAAhgUAAAAAAAAAAAAAhgUAAAAAAACHBQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACFBQAAAAAAAIUFAAAAAAAAAAAAAAAA8L8" + ], + [ + 116, + 1, + "insert", + { + "characters": "coer." + }, + "BQAAAOEFAAAAAAAA4gUAAAAAAAAAAAAA4gUAAAAAAADjBQAAAAAAAAAAAADjBQAAAAAAAOQFAAAAAAAAAAAAAOQFAAAAAAAA5QUAAAAAAAAAAAAA5QUAAAAAAADmBQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADhBQAAAAAAAOEFAAAAAAAAAAAAAAAA8L8" + ], + [ + 117, + 3, + "left_delete", + null, + "AwAAAOUFAAAAAAAA5QUAAAAAAAABAAAALuQFAAAAAAAA5AUAAAAAAAABAAAAcuMFAAAAAAAA4wUAAAAAAAABAAAAZQ", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADmBQAAAAAAAOYFAAAAAAAAAAAAAAAA8L8" + ], + [ + 118, + 1, + "insert", + { + "characters": "re." + }, + "AwAAAOMFAAAAAAAA5AUAAAAAAAAAAAAA5AUAAAAAAADlBQAAAAAAAAAAAADlBQAAAAAAAOYFAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADjBQAAAAAAAOMFAAAAAAAAAAAAAAAA8L8" + ], + [ + 120, + 1, + "insert", + { + "characters": "ig" + }, + "AgAAAOoFAAAAAAAA6wUAAAAAAAAAAAAA6wUAAAAAAADsBQAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqBQAAAAAAAOoFAAAAAAAAAAAAAAAA8L8" + ], + [ + 126, + 1, + "insert", + { + "characters": "core." + }, + "BQAAAEwHAAAAAAAATQcAAAAAAAAAAAAATQcAAAAAAABOBwAAAAAAAAAAAABOBwAAAAAAAE8HAAAAAAAAAAAAAE8HAAAAAAAAUAcAAAAAAAAAAAAAUAcAAAAAAABRBwAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMBwAAAAAAAEwHAAAAAAAAAAAAAAAA8L8" + ], + [ + 127, + 1, + "insert_completion", + { + "completion": "lsp_select_completion_item {\"item\":{\"data\":{\"symbolLabel\":\"Config\",\"workspacePath\":\"/home/yannic/work/stacosys\",\"position\":{\"character\":13,\"line\":62},\"filePath\":\"/home/yannic/work/stacosys/stacosys/run.py\"},\"label\":\"Config\",\"sortText\":\"05.0000.Config\",\"kind\":7},\"session_name\":\"LSP-pyright\"}", + "format": "command", + "keep_prefix": false, + "must_insert": true, + "trigger": "Config" + }, + "AQAAAFEHAAAAAAAAVwcAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABRBwAAAAAAAFEHAAAAAAAAAAAAAAAA8L8" + ], + [ + 129, + 1, + "right_delete", + null, + "AQAAAFcHAAAAAAAAVwcAAAAAAAAEAAAAY29uZg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABXBwAAAAAAAFsHAAAAAAAAAAAAAAAA8L8" + ], + [ + 134, + 1, + "insert", + { + "characters": "c" + }, + "AQAAAFEHAAAAAAAAUgcAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABRBwAAAAAAAFEHAAAAAAAAAAAAAAAA8L8" + ], + [ + 135, + 1, + "right_delete", + null, + "AQAAAFIHAAAAAAAAUgcAAAAAAAABAAAAQw", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSBwAAAAAAAFIHAAAAAAAAAAAAAAAA8L8" + ], + [ + 146, + 1, + "paste", + null, + "AgAAAHsHAAAAAAAAhgcAAAAAAAAAAAAAhgcAAAAAAACGBwAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB7BwAAAAAAAH8HAAAAAAAAAAAAAAAA8L8" + ], + [ + 150, + 1, + "paste", + null, + "AgAAAK4HAAAAAAAAuQcAAAAAAAAAAAAAuQcAAAAAAAC5BwAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACuBwAAAAAAALIHAAAAAAAAAAAAAAAA8L8" + ], + [ + 154, + 1, + "paste", + null, + "AgAAAOIHAAAAAAAA7QcAAAAAAAAAAAAA7QcAAAAAAADtBwAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADiBwAAAAAAAOYHAAAAAAAAAAAAAAAA8L8" + ], + [ + 158, + 1, + "paste", + null, + "AgAAABYIAAAAAAAAIQgAAAAAAAAAAAAAIQgAAAAAAAAhCAAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAWCAAAAAAAABoIAAAAAAAAAAAAAAAA8L8" + ], + [ + 170, + 1, + "paste", + null, + "AgAAAKYIAAAAAAAAsQgAAAAAAAAAAAAAsQgAAAAAAACxCAAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACmCAAAAAAAAKoIAAAAAAAAAAAAAAAA8L8" + ], + [ + 175, + 1, + "paste", + null, + "AgAAANoIAAAAAAAA5QgAAAAAAAAAAAAA5QgAAAAAAADlCAAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADaCAAAAAAAAN4IAAAAAAAAAAAAAAAA8L8" + ], + [ + 180, + 1, + "paste", + null, + "AgAAABIJAAAAAAAAHQkAAAAAAAAAAAAAHQkAAAAAAAAdCQAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAASCQAAAAAAABYJAAAAAAAAAAAAAAAA8L8" + ], + [ + 185, + 1, + "paste", + null, + "AgAAAEcJAAAAAAAAUgkAAAAAAAAAAAAAUgkAAAAAAABSCQAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABHCQAAAAAAAEsJAAAAAAAAAAAAAAAA8L8" + ], + [ + 190, + 1, + "paste", + null, + "AgAAAH8JAAAAAAAAigkAAAAAAAAAAAAAigkAAAAAAACKCQAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB/CQAAAAAAAIMJAAAAAAAAAAAAAAAA8L8" + ], + [ + 195, + 1, + "paste", + null, + "AgAAACUKAAAAAAAAMAoAAAAAAAAAAAAAMAoAAAAAAAAwCgAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAlCgAAAAAAACkKAAAAAAAAAAAAAAAA8L8" + ], + [ + 200, + 1, + "paste", + null, + "AgAAAF4KAAAAAAAAaQoAAAAAAAAAAAAAaQoAAAAAAABpCgAAAAAAAAQAAABjb25m", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABeCgAAAAAAAGIKAAAAAAAAAAAAAAAA8L8" + ], + [ + 216, + 1, + "insert", + { + "characters": "." + }, + "AQAAAG0AAAAAAAAAbgAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtAAAAAAAAAG0AAAAAAAAAAAAAAAAA8L8" + ], + [ + 219, + 1, + "right_delete", + null, + "AQAAAG4AAAAAAAAAbgAAAAAAAAAIAAAAIGltcG9ydCA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABuAAAAAAAAAHYAAAAAAAAAAAAAAAAA8L8" + ], + [ + 226, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAHIAAAAAAAAAcwAAAAAAAAAAAAAAcwAAAAAAAAB0AAAAAAAAAAAAAAB0AAAAAAAAAHUAAAAAAAAAAAAAAHUAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAB3AAAAAAAAAAAAAAB3AAAAAAAAAHgAAAAAAAAAAAAAAHgAAAAAAAAAeQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAByAAAAAAAAAHIAAAAAAAAAAAAAAAAA8L8" + ], + [ + 227, + 1, + "insert", + { + "characters": " confi" + }, + "BgAAAHkAAAAAAAAAegAAAAAAAAAAAAAAegAAAAAAAAB7AAAAAAAAAAAAAAB7AAAAAAAAAHwAAAAAAAAAAAAAAHwAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAH8AAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5AAAAAAAAAHkAAAAAAAAAAAAAAAAA8L8" + ], + [ + 228, + 1, + "insert", + { + "characters": "g" + }, + "AQAAAH8AAAAAAAAAgAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB/AAAAAAAAAH8AAAAAAAAAAAAAAAAA8L8" + ], + [ + 241, + 1, + "insert", + { + "characters": "import" + }, + "BwAAAGAAAAAAAAAAYQAAAAAAAAAAAAAAYQAAAAAAAABhAAAAAAAAAAQAAABmcm9tYQAAAAAAAABiAAAAAAAAAAAAAABiAAAAAAAAAGMAAAAAAAAAAAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAAZAAAAAAAAABlAAAAAAAAAAAAAABlAAAAAAAAAGYAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABgAAAAAAAAAGQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 251, + 1, + "insert", + { + "characters": "." + }, + "AgAAAHQAAAAAAAAAdQAAAAAAAAAAAAAAdQAAAAAAAAB1AAAAAAAAAAgAAAAgaW1wb3J0IA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB0AAAAAAAAAHwAAAAAAAAAAAAAAAAA8L8" + ], + [ + 258, + 1, + "right_delete", + null, + "AQAAAKQEAAAAAAAApAQAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACpBAAAAAAAAKQEAAAAAAAAAAAAAAAA8L8" + ], + [ + 265, + 1, + "right_delete", + null, + "AQAAAOMEAAAAAAAA4wQAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADjBAAAAAAAAOgEAAAAAAAAAAAAAAAA8L8" + ], + [ + 270, + 1, + "right_delete", + null, + "AQAAAHQFAAAAAAAAdAUAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5BQAAAAAAAHQFAAAAAAAAAAAAAAAA8L8" + ], + [ + 297, + 1, + "insert", + { + "characters": "from" + }, + "BAAAAGAAAAAAAAAAYQAAAAAAAAAAAAAAYQAAAAAAAABiAAAAAAAAAAAAAABiAAAAAAAAAGMAAAAAAAAAAAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAA" + ], + [ + 298, + 1, + "insert", + { + "characters": " " + }, + "AQAAAGQAAAAAAAAAZQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABkAAAAAAAAAGQAAAAAAAAAAAAAAAAA8L8" + ], + [ + 300, + 2, + "right_delete", + null, + "AgAAAGUAAAAAAAAAZQAAAAAAAAAGAAAAaW1wb3J0ZQAAAAAAAABlAAAAAAAAAAEAAAAg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAAAAAAAAAGsAAAAAAAAAAAAAAAAA8L8" + ], + [ + 302, + 1, + "insert", + { + "characters": " import" + }, + "BwAAAHIAAAAAAAAAcwAAAAAAAAAAAAAAcwAAAAAAAAB0AAAAAAAAAAAAAAB0AAAAAAAAAHUAAAAAAAAAAAAAAHUAAAAAAAAAdgAAAAAAAAAAAAAAdgAAAAAAAAB3AAAAAAAAAAAAAAB3AAAAAAAAAHgAAAAAAAAAAAAAAHgAAAAAAAAAeQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAByAAAAAAAAAHIAAAAAAAAAAAAAAAAA8L8" + ], + [ + 303, + 1, + "insert", + { + "characters": " " + }, + "AQAAAHkAAAAAAAAAegAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5AAAAAAAAAHkAAAAAAAAAAAAAAAAA8L8" + ], + [ + 304, + 1, + "right_delete", + null, + "AQAAAHoAAAAAAAAAegAAAAAAAAABAAAALg", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB6AAAAAAAAAHoAAAAAAAAAAAAAAAAA8L8" + ], + [ + 311, + 1, + "insert", + { + "characters": "u" + }, + "AQAAAJoAAAAAAAAAmwAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACaAAAAAAAAAJoAAAAAAAAAAAAAAAAA8L8" + ], + [ + 312, + 1, + "left_delete", + null, + "AQAAAJoAAAAAAAAAmgAAAAAAAAABAAAAdQ", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbAAAAAAAAAJsAAAAAAAAAAAAAAAAA8L8" + ], + [ + 313, + 1, + "insert", + { + "characters": "uration" + }, + "BwAAAJoAAAAAAAAAmwAAAAAAAAAAAAAAmwAAAAAAAACcAAAAAAAAAAAAAACcAAAAAAAAAJ0AAAAAAAAAAAAAAJ0AAAAAAAAAngAAAAAAAAAAAAAAngAAAAAAAACfAAAAAAAAAAAAAACfAAAAAAAAAKAAAAAAAAAAAAAAAKAAAAAAAAAAoQAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACaAAAAAAAAAJoAAAAAAAAAAAAAAAAA8L8" + ], + [ + 353, + 1, + "right_delete", + null, + "AQAAAOAFAAAAAAAA4AUAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADgBQAAAAAAAOUFAAAAAAAAAAAAAAAA8L8" + ], + [ + 359, + 1, + "right_delete", + null, + "AQAAAEYHAAAAAAAARgcAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABLBwAAAAAAAEYHAAAAAAAAAAAAAAAA8L8" + ], + [ + 363, + 1, + "right_delete", + null, + "AQAAAHAHAAAAAAAAcAcAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABwBwAAAAAAAHUHAAAAAAAAAAAAAAAA8L8" + ], + [ + 367, + 1, + "right_delete", + null, + "AQAAAJ4HAAAAAAAAngcAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeBwAAAAAAAKMHAAAAAAAAAAAAAAAA8L8" + ], + [ + 371, + 1, + "right_delete", + null, + "AQAAAM0HAAAAAAAAzQcAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADNBwAAAAAAANIHAAAAAAAAAAAAAAAA8L8" + ], + [ + 375, + 1, + "right_delete", + null, + "AQAAAPwHAAAAAAAA/AcAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD8BwAAAAAAAAEIAAAAAAAAAAAAAAAA8L8" + ], + [ + 379, + 1, + "right_delete", + null, + "AQAAAIcIAAAAAAAAhwgAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMCAAAAAAAAIcIAAAAAAAAAAAAAAAA8L8" + ], + [ + 383, + 1, + "right_delete", + null, + "AQAAALYIAAAAAAAAtggAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC2CAAAAAAAALsIAAAAAAAAAAAAAAAA8L8" + ], + [ + 387, + 1, + "right_delete", + null, + "AQAAAOkIAAAAAAAA6QgAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADpCAAAAAAAAO4IAAAAAAAAAAAAAAAA8L8" + ], + [ + 391, + 1, + "right_delete", + null, + "AQAAABkJAAAAAAAAGQkAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAZCQAAAAAAAB4JAAAAAAAAAAAAAAAA8L8" + ], + [ + 395, + 1, + "right_delete", + null, + "AQAAAEwJAAAAAAAATAkAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMCQAAAAAAAFEJAAAAAAAAAAAAAAAA8L8" + ], + [ + 402, + 1, + "right_delete", + null, + "AQAAAO0JAAAAAAAA7QkAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADyCQAAAAAAAO0JAAAAAAAAAAAAAAAA8L8" + ], + [ + 406, + 1, + "right_delete", + null, + "AQAAACEKAAAAAAAAIQoAAAAAAAAFAAAAY29yZS4", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAhCgAAAAAAACYKAAAAAAAAAAAAAAAA8L8" + ], + [ + 5, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAG4AAAAAAAAAbwAAAAAAAAAAAAAAbwAAAAAAAABvAAAAAAAAAAQAAABjb3JlbwAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAHEAAAAAAAAAAAAAAHEAAAAAAAAAcgAAAAAAAAAAAAAAcgAAAAAAAABzAAAAAAAAAAAAAABzAAAAAAAAAHQAAAAAAAAAAAAAAHQAAAAAAAAAdQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAHIAAAAAAAAAbgAAAAAAAAAAAAAAAADwvw" + ], + [ + 16, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAJIAAAAAAAAAkwAAAAAAAAAAAAAAkwAAAAAAAACTAAAAAAAAAAQAAABjb3JlkwAAAAAAAACUAAAAAAAAAAAAAACUAAAAAAAAAJUAAAAAAAAAAAAAAJUAAAAAAAAAlgAAAAAAAAAAAAAAlgAAAAAAAACXAAAAAAAAAAAAAACXAAAAAAAAAJgAAAAAAAAAAAAAAJgAAAAAAAAAmQAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAJIAAAAAAAAAlgAAAAAAAAAAAAAAAADwvw" + ], + [ + 21, + 1, + "insert", + { + "characters": "service" + }, + "CAAAAM0AAAAAAAAAzgAAAAAAAAAAAAAAzgAAAAAAAADOAAAAAAAAAAQAAABjb3JlzgAAAAAAAADPAAAAAAAAAAAAAADPAAAAAAAAANAAAAAAAAAAAAAAANAAAAAAAAAA0QAAAAAAAAAAAAAA0QAAAAAAAADSAAAAAAAAAAAAAADSAAAAAAAAANMAAAAAAAAAAAAAANMAAAAAAAAA1AAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAM0AAAAAAAAA0QAAAAAAAAAAAAAAAADwvw" + ], + [ + 25, + 2, + "left_delete", + null, + "AgAAANoAAAAAAAAA2gAAAAAAAAABAAAActkAAAAAAAAA2QAAAAAAAAABAAAAZQ", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAANsAAAAAAAAA2wAAAAAAAAAAAAAAAADwvw" + ], + [ + 30, + 1, + "insert", + { + "characters": "," + }, + "AQAAAIMAAAAAAAAAhAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIMAAAAAAAAAgwAAAAAAAAAAAAAAAADwvw" + ], + [ + 31, + 1, + "insert", + { + "characters": " a" + }, + "AgAAAIQAAAAAAAAAhQAAAAAAAAAAAAAAhQAAAAAAAACGAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIQAAAAAAAAAhAAAAAAAAAAAAAAAAADwvw" + ], + [ + 32, + 1, + "left_delete", + null, + "AQAAAIUAAAAAAAAAhQAAAAAAAAABAAAAYQ", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIYAAAAAAAAAhgAAAAAAAAAAAAAAAADwvw" + ], + [ + 33, + 1, + "insert", + { + "characters": "mailer," + }, + "BwAAAIUAAAAAAAAAhgAAAAAAAAAAAAAAhgAAAAAAAACHAAAAAAAAAAAAAACHAAAAAAAAAIgAAAAAAAAAAAAAAIgAAAAAAAAAiQAAAAAAAAAAAAAAiQAAAAAAAACKAAAAAAAAAAAAAACKAAAAAAAAAIsAAAAAAAAAAAAAAIsAAAAAAAAAjAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIUAAAAAAAAAhQAAAAAAAAAAAAAAAADwvw" + ], + [ + 34, + 1, + "insert", + { + "characters": " rss" + }, + "BAAAAIwAAAAAAAAAjQAAAAAAAAAAAAAAjQAAAAAAAACOAAAAAAAAAAAAAACOAAAAAAAAAI8AAAAAAAAAAAAAAI8AAAAAAAAAkAAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIwAAAAAAAAAjAAAAAAAAAAAAAAAAADwvw" + ], + [ + 41, + 1, + "right_delete", + null, + "AQAAAMwAAAAAAAAAzAAAAAAAAABLAAAAZnJvbSBzdGFjb3N5cy5zZXJ2aWNlLm1haWwgaW1wb3J0IE1haWxlcgpmcm9tIHN0YWNvc3lzLmNvcmUucnNzIGltcG9ydCBSc3MK", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMwAAAAAAAAAFwEAAAAAAAAAAAAAAAAAAA" + ], + [ + 48, + 1, + "right_delete", + null, + "AQAAAOgGAAAAAAAA6AYAAAAAAAALAAAAcnNzID0gUnNzKCk", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAPMGAAAAAAAA6AYAAAAAAAAAAAAAAABCQA" + ], + [ + 50, + 1, + "left_delete", + null, + "AQAAAOMGAAAAAAAA4wYAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAOQGAAAAAAAA5AYAAAAAAAAAAAAAAAAAAA" + ], + [ + 54, + 1, + "right_delete", + null, + "AQAAABQIAAAAAAAAFAgAAAAAAAARAAAAbWFpbGVyID0gTWFpbGVyKCk", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACUIAAAAAAAAFAgAAAAAAAAAAAAAAABCQA" + ], + [ + 56, + 1, + "left_delete", + null, + "AQAAAA8IAAAAAAAADwgAAAAAAAABAAAACg", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAABAIAAAAAAAAEAgAAAAAAAAAAAAAAAAAAA" + ], + [ + 59, + 1, + "revert", + null, + "BAAAAAAAAAAAAAAAAAAAAAAAAADtCgAAIyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHN5cwoKZnJvbSBzdGFjb3N5cy5zZXJ2aWNlIGltcG9ydCBjb25maWcsIG1haWxlciwgcnNzCmZyb20gc3RhY29zeXMuc2VydmljZS5jb25maWd1cmF0aW9uIGltcG9ydCBDb25maWdQYXJhbWV0ZXIKZnJvbSBzdGFjb3N5cy5kYiBpbXBvcnQgZGF0YWJhc2UKZnJvbSBzdGFjb3N5cy5pbnRlcmZhY2UgaW1wb3J0IGFwaSwgYXBwLCBmb3JtCmZyb20gc3RhY29zeXMuaW50ZXJmYWNlLndlYiBpbXBvcnQgYWRtaW4KCgojIGNvbmZpZ3VyZSBsb2dnaW5nCmRlZiBjb25maWd1cmVfbG9nZ2luZyhsZXZlbCk6CiAgICByb290X2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgIHJvb3RfbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCiAgICBoYW5kbGVyLnNldExldmVsKGxldmVsKQogICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIlslKGFzY3RpbWUpc10gJShuYW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcyIpCiAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAgICByb290X2xvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCgoKZGVmIHN0YWNvc3lzX3NlcnZlcihjb25maWdfcGF0aG5hbWUpOgogICAgIyBjb25maWd1cmUgbG9nZ2luZwogICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAgICBjb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLklORk8pCiAgICBsb2dnaW5nLmdldExvZ2dlcigid2Vya3pldWciKS5sZXZlbCA9IGxvZ2dpbmcuV0FSTklORwogICAgbG9nZ2luZy5nZXRMb2dnZXIoImFwc2NoZWR1bGVyLmV4ZWN1dG9ycyIpLmxldmVsID0gbG9nZ2luZy5XQVJOSU5HCgogICAgIyBjaGVjayBjb25maWcgZmlsZSBleGlzdHMKICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShjb25maWdfcGF0aG5hbWUpOgogICAgICAgIGxvZ2dlci5lcnJvcigiQ29uZmlndXJhdGlvbiBmaWxlICclcycgbm90IGZvdW5kLiIsIGNvbmZpZ19wYXRobmFtZSkKICAgICAgICBzeXMuZXhpdCgxKQoKICAgICMgbG9hZCBhbmQgY2hlY2sgY29uZmlnCiAgICBjb25maWcubG9hZChjb25maWdfcGF0aG5hbWUpCiAgICBpc19jb25maWdfb2ssIGVycmV1cl9jb25maWcgPSBjb25maWcuY2hlY2soKQogICAgaWYgbm90IGlzX2NvbmZpZ19vazoKICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0ZSAnJXMnIiwgZXJyZXVyX2NvbmZpZykKICAgICAgICBzeXMuZXhpdCgxKQogICAgbG9nZ2VyLmluZm8oY29uZmlnKQoKICAgICMgY2hlY2sgZGF0YWJhc2UgZmlsZSBleGlzdHMgKHByZXZlbnRzIGZyb20gY3JlYXRpbmcgYSBmcmVzaCBkYikKICAgIGRiX3BhdGhuYW1lID0gY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuREJfU1FMSVRFX0ZJTEUpCiAgICBpZiBub3QgZGJfcGF0aG5hbWUgb3Igbm90IG9zLnBhdGguaXNmaWxlKGRiX3BhdGhuYW1lKToKICAgICAgICBsb2dnZXIuZXJyb3IoIkRhdGFiYXNlIGZpbGUgJyVzJyBub3QgZm91bmQuIiwgZGJfcGF0aG5hbWUpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICAjIGluaXRpYWxpemUgZGF0YWJhc2UKICAgIGRhdGFiYXNlLnNldHVwKGRiX3BhdGhuYW1lKQoKICAgIGxvZ2dlci5pbmZvKCJTdGFydCBTdGFjb3N5cyBhcHBsaWNhdGlvbiIpCgogICAgIyBnZW5lcmF0ZSBSU1MgICAgCiAgICByc3MuY29uZmlndXJlKAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLkxBTkcpLAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLlJTU19GSUxFKSwKICAgICAgICBjb25maWcuZ2V0KENvbmZpZ1BhcmFtZXRlci5SU1NfUFJPVE8pLAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLlNJVEVfTkFNRSksCiAgICAgICAgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9VUkwpLAogICAgKQogICAgcnNzLmdlbmVyYXRlKCkKCiAgICAjIGNvbmZpZ3VyZSBtYWlsZXIgICAgCiAgICBtYWlsZXIuY29uZmlndXJlKAogICAgICAgIGNvbmZpZy5nZXQoQ29uZmlnUGFyYW1ldGVyLlNNVFBfSE9TVCksCiAgICAgICAgY29uZmlnLmdldF9pbnQoQ29uZmlnUGFyYW1ldGVyLlNNVFBfUE9SVCksCiAgICAgICAgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU01UUF9MT0dJTiksCiAgICAgICAgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU01UUF9QQVNTV09SRCksCiAgICAgICAgY29uZmlnLmdldChDb25maWdQYXJhbWV0ZXIuU0lURV9BRE1JTl9FTUFJTCksCiAgICApCgogICAgbG9nZ2VyLmluZm8oInN0YXJ0IGludGVyZmFjZXMgJXMgJXMgJXMiLCBhcGksIGZvcm0sIGFkbWluKQoKICAgICMgc3RhcnQgRmxhc2sKICAgIGFwcC5ydW4oCiAgICAgICAgaG9zdD1jb25maWcuZ2V0KENvbmZpZ1BhcmFtZXRlci5IVFRQX0hPU1QpLAogICAgICAgIHBvcnQ9Y29uZmlnLmdldF9pbnQoQ29uZmlnUGFyYW1ldGVyLkhUVFBfUE9SVCksCiAgICAgICAgZGVidWc9RmFsc2UsCiAgICAgICAgdXNlX3JlbG9hZGVyPUZhbHNlLAogICAgKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJjb25maWciLCBoZWxwPSJjb25maWcgcGF0aCBuYW1lIikKICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICBzdGFjb3N5c19zZXJ2ZXIoYXJncy5jb25maWcpCgAAAAAAAAAA5QoAAAAAAAAAAAAAAAAAAAAAAADlCgAAAAAAAAAAAAAAAAAAAAAAAOUKAAAAAAAAAAAAAA", + "AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAA8IAAAAAAAADwgAAAAAAAAAAAAAAADwvw" + ] + ] + }, + { + "file": "Makefile", + "settings": + { + "buffer_size": 253, + "encoding": "UTF-8", + "line_ending": "Unix" + }, + "undo_stack": + [ + [ + 3, 1, "insert", { - "characters": "else:" + "characters": "poetry" }, - "BQAAAEsEAAAAAAAATAQAAAAAAAAAAAAATAQAAAAAAABNBAAAAAAAAAAAAABNBAAAAAAAAE4EAAAAAAAAAAAAAE4EAAAAAAAATwQAAAAAAAAAAAAATwQAAAAAAABQBAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABLBAAAAAAAAEsEAAAAAAAAAAAAAAAA8L8" + "BgAAACgAAAAAAAAAKQAAAAAAAAAAAAAAKQAAAAAAAAAqAAAAAAAAAAAAAAAqAAAAAAAAACsAAAAAAAAAAAAAACsAAAAAAAAALAAAAAAAAAAAAAAALAAAAAAAAAAtAAAAAAAAAAAAAAAtAAAAAAAAAC4AAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAKAAAAAAAAAAoAAAAAAAAAAAAAAAAAPC/" ], [ - 14, + 4, 1, "insert", { - "characters": "\n" + "characters": " run" }, - "AwAAAFAEAAAAAAAAUQQAAAAAAAAAAAAAUQQAAAAAAABZBAAAAAAAAAAAAABZBAAAAAAAAF0EAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABQBAAAAAAAAFAEAAAAAAAAAAAAAAAA8L8" + "BAAAAC4AAAAAAAAALwAAAAAAAAAAAAAALwAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADEAAAAAAAAAAAAAADEAAAAAAAAAMgAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAALgAAAAAAAAAuAAAAAAAAAAAAAAAAAPC/" ], [ - 16, + 5, 1, "insert", { - "characters": "False" + "characters": " " }, - "BQAAAF0EAAAAAAAAXgQAAAAAAAAAAAAAXgQAAAAAAABfBAAAAAAAAAAAAABfBAAAAAAAAGAEAAAAAAAAAAAAAGAEAAAAAAAAYQQAAAAAAAAAAAAAYQQAAAAAAABiBAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABdBAAAAAAAAF0EAAAAAAAAAAAAAAAA8L8" + "AQAAADIAAAAAAAAAMwAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAMgAAAAAAAAAyAAAAAAAAAAAAAAAAAPC/" ], [ - 44, + 8, 1, "insert", { - "characters": "s" + "characters": "potr" }, - "AQAAAB4CAAAAAAAAHwIAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAeAgAAAAAAAB4CAAAAAAAAAAAAAAAA8L8" + "BAAAAGMAAAAAAAAAZAAAAAAAAAAAAAAAZAAAAAAAAABlAAAAAAAAAAAAAABlAAAAAAAAAGYAAAAAAAAAAAAAAGYAAAAAAAAAZwAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAYwAAAAAAAABjAAAAAAAAAAAAAAAAAEJA" ], [ - 53, - 1, + 9, + 2, "left_delete", null, - "AQAAAEQEAAAAAAAARAQAAAAAAAA1AAAAICAgICAgICBlbHNlOgogICAgICAgICAgICBGYWxzZQogICAgICAgIHJldHVybiBGYWxzZQo", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABEBAAAAAAAAHkEAAAAAAAAAAAAAAAAAAA" - ], - [ - 56, - 1, - "right_delete", - null, - "AQAAACwEAAAAAAAALAQAAAAAAAAXAAAAICAgICAgICAgICAgcmV0dXJuIFRydWU", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAsBAAAAAAAAEMEAAAAAAAA////////738" + "AgAAAGYAAAAAAAAAZgAAAAAAAAABAAAAcmUAAAAAAAAAZQAAAAAAAAABAAAAdA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZwAAAAAAAABnAAAAAAAAAAAAAAAAAPC/" ], [ - 70, + 10, 1, - "left_delete", - null, - "AQAAAB4CAAAAAAAAHgIAAAAAAAABAAAAcw", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAfAgAAAAAAAB8CAAAAAAAAAAAAAAAA8L8" + "insert", + { + "characters": "etry" + }, + "BAAAAGUAAAAAAAAAZgAAAAAAAAAAAAAAZgAAAAAAAABnAAAAAAAAAAAAAABnAAAAAAAAAGgAAAAAAAAAAAAAAGgAAAAAAAAAaQAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAZQAAAAAAAABlAAAAAAAAAAAAAAAAAPC/" ], [ - 80, + 11, 1, - "reindent", - null, - "AQAAACsEAAAAAAAANwQAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAArBAAAAAAAACsEAAAAAAAAAAAAAAAA8L8" + "insert", + { + "characters": " run" + }, + "BAAAAGkAAAAAAAAAagAAAAAAAAAAAAAAagAAAAAAAABrAAAAAAAAAAAAAABrAAAAAAAAAGwAAAAAAAAAAAAAAGwAAAAAAAAAbQAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAaQAAAAAAAABpAAAAAAAAAAAAAAAAAPC/" ], [ - 81, + 12, 1, - "left_delete", - null, - "AQAAADMEAAAAAAAAMwQAAAAAAAAEAAAAICAgIA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA3BAAAAAAAADcEAAAAAAAAAAAAAAAA8L8" + "insert", + { + "characters": " " + }, + "AQAAAG0AAAAAAAAAbgAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAbQAAAAAAAABtAAAAAAAAAAAAAAAAAPC/" ], [ - 82, + 15, 1, "insert", { - "characters": "reru" + "characters": "poetry" }, - "BAAAADMEAAAAAAAANAQAAAAAAAAAAAAANAQAAAAAAAA1BAAAAAAAAAAAAAA1BAAAAAAAADYEAAAAAAAAAAAAADYEAAAAAAAANwQAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAzBAAAAAAAADMEAAAAAAAAAAAAAAAA8L8" - ], - [ - 83, - 2, - "left_delete", - null, - "AgAAADYEAAAAAAAANgQAAAAAAAABAAAAdTUEAAAAAAAANQQAAAAAAAABAAAAcg", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA3BAAAAAAAADcEAAAAAAAAAAAAAAAA8L8" + "BgAAAIYAAAAAAAAAhwAAAAAAAAAAAAAAhwAAAAAAAACIAAAAAAAAAAAAAACIAAAAAAAAAIkAAAAAAAAAAAAAAIkAAAAAAAAAigAAAAAAAAAAAAAAigAAAAAAAACLAAAAAAAAAAAAAACLAAAAAAAAAIwAAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAhgAAAAAAAACGAAAAAAAAAAAAAAAAAPC/" ], [ - 84, + 16, 1, "insert", { - "characters": "turn" + "characters": " run" }, - "BAAAADUEAAAAAAAANgQAAAAAAAAAAAAANgQAAAAAAAA3BAAAAAAAAAAAAAA3BAAAAAAAADgEAAAAAAAAAAAAADgEAAAAAAAAOQQAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA1BAAAAAAAADUEAAAAAAAAAAAAAAAA8L8" + "BAAAAIwAAAAAAAAAjQAAAAAAAAAAAAAAjQAAAAAAAACOAAAAAAAAAAAAAACOAAAAAAAAAI8AAAAAAAAAAAAAAI8AAAAAAAAAkAAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAjAAAAAAAAACMAAAAAAAAAAAAAAAAAPC/" ], [ - 85, + 17, 1, "insert", { - "characters": " True" + "characters": " " }, - "BQAAADkEAAAAAAAAOgQAAAAAAAAAAAAAOgQAAAAAAAA7BAAAAAAAAAAAAAA7BAAAAAAAADwEAAAAAAAAAAAAADwEAAAAAAAAPQQAAAAAAAAAAAAAPQQAAAAAAAA+BAAAAAAAAAAAAAA", - "AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA5BAAAAAAAADkEAAAAAAAAAAAAAAAA8L8" - ] - ] - }, - { - "file": "stacosys/db/dao.py", - "settings": - { - "buffer_size": 1633, - "line_ending": "Unix" - }, - "undo_stack": - [ - ] - }, - { - "file": "stacosys.sublime-project", - "settings": - { - "buffer_size": 381, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ + "AQAAAJAAAAAAAAAAkQAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAkAAAAAAAAACQAAAAAAAAAAAAAAAAAPC/" + ], [ - 4, + 23, 1, - "", + "paste", null, - "AgAAAMMAAAAAAAAAZQEAAAAAAAAAAAAAZQEAAAAAAABlAQAAAAAAAPMAAAAgICAgInNldHRpbmdzIjoKICAgIHsKICAgICAgICAiTFNQIjoKICAgICAgICB7CiAgICAgICAgICAgICJMU1AtcHlsc3AiOgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAic2V0dGluZ3MiOgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJweWxzcC5wbHVnaW5zLmplZGkuZW52aXJvbm1lbnQiOiAiLi8udmVudiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0", - "AQAAAAAAAAABAAAAtgEAAAAAAADDAAAAAAAAAAAAAAAAAPC/" + "AQAAAKUAAAAAAAAAsAAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAApQAAAAAAAAClAAAAAAAAAAAAAAAAAPC/" ], [ - 8, + 26, 1, "paste", null, - "AgAAACYBAAAAAAAAUwEAAAAAAAAAAAAAUwEAAAAAAABTAQAAAAAAABkAAAAvLyBQdXQgeW91ciBzZXR0aW5ncyBoZXJl", - "AQAAAAAAAAABAAAAJgEAAAAAAAA/AQAAAAAAAP///////+9/" + "AQAAAOAAAAAAAAAA6wAAAAAAAAAAAAAA", + "BwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAA4AAAAAAAAADgAAAAAAAAAAAAAAAAAPC/" + ], + [ + 1, + 1, + "revert", + null, + "BgAAAAAAAAAAAAAAAAAAAAAAAAD9AAAAYWxsOiBibGFjayB0ZXN0IHR5cGVoaW50IGxpbnQgCgpibGFjazoKCXBvZXRyeSBydW4gaXNvcnQgLS1tdWx0aS1saW5lIDMgLS1wcm9maWxlIGJsYWNrIHN0YWNvc3lzLwoJcG9ldHJ5IHJ1biBibGFjayBzdGFjb3N5cy8KCnRlc3Q6Cglwb2V0cnkgcnVuIHB5dGVzdAoKdHlwZWhpbnQ6IAoJcG9ldHJ5IHJ1biBteXB5IC0taWdub3JlLW1pc3NpbmctaW1wb3J0cyBzdGFjb3N5cy8KCmxpbnQ6Cglwb2V0cnkgcnVuIHB5bGludCBzdGFjb3N5cy8KCgAAAAAAAAAA/QAAAAAAAAAAAAAAAAAAAAAAAAD9AAAAAAAAAAAAAAAAAAAAAAAAAP0AAAAAAAAAAAAAAAAAAAAAAAAA/QAAAAAAAAAAAAAAAAAAAAAAAAD9AAAAAAAAAAAAAAA", + "BQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7AAAAAAAAAPsAAAAAAAAAAAAAAAAA8L8" ] ] - }, - { - "file": "stacosys/model/comment.py", - "settings": - { - "buffer_size": 471, - "line_ending": "Unix" - } - }, - { - "file": "stacosys/conf/config.py", - "settings": - { - "buffer_size": 2481, - "encoding": "UTF-8", - "line_ending": "Unix" - } } ], "build_system": "", @@ -366,13 +3135,53 @@ "selected_items": [ [ - "diag", - "LSP: Goto Diagnostic in Project" + "brea", + "Python Breakpoints: Clear All" + ], + [ + "comm", + "Toggle Comment" + ], + [ + "move", + "File: Move…" + ], + [ + "break", + "Python Breakpoints: Clear All" + ], + [ + "remove", + "Package Control: Remove Package" + ], + [ + "make", + "Build With: Make" + ], + [ + "python", + "Python Breakpoints: Toggle" + ], + [ + "insta", + "Package Control: Install Package" + ], + [ + "install", + "Package Control: Install Package" ], [ "lsp", "LSP: Toggle Diagnostics Panel" ], + [ + "diag", + "LSP: Toggle Diagnostics Panel" + ], + [ + "docstr", + "AutoDocstring: Current" + ], [ "Package Control: ", "Package Control: Install Package" @@ -409,10 +3218,6 @@ "instal", "Package Control: Install Package" ], - [ - "install", - "Package Control: Install Package" - ], [ "package re", "Package Control: Remove Package" @@ -421,14 +3226,6 @@ "paka", "Package Control: Remove Package" ], - [ - "remove", - "Package Control: Remove Package" - ], - [ - "insta", - "Package Control: Install Package" - ], [ "inst", "Package Control: Install Package" @@ -459,25 +3256,50 @@ "expanded_folders": [ "/home/yannic/work/stacosys", + "/home/yannic/work/stacosys/.github", + "/home/yannic/work/stacosys/.github/workflows", + "/home/yannic/work/stacosys/docker", "/home/yannic/work/stacosys/stacosys", - "/home/yannic/work/stacosys/stacosys/conf", - "/home/yannic/work/stacosys/stacosys/core", "/home/yannic/work/stacosys/stacosys/db", "/home/yannic/work/stacosys/stacosys/interface", "/home/yannic/work/stacosys/stacosys/interface/web", "/home/yannic/work/stacosys/stacosys/model", + "/home/yannic/work/stacosys/stacosys/service", "/home/yannic/work/stacosys/tests" ], "file_history": [ - "/home/yannic/.cache/sublime-text-3/Package Storage/LSP-pyright/18.7.0/language-server/node_modules/pyright/dist/typeshed-fallback/stdlib/sys.pyi", - "/home/yannic/work/stacosys/stacosys/conf/config.py", + "/home/yannic/work/blog/README.md", + "/home/yannic/work/blog/Dockerfile", "/usr/lib64/python3.11/logging/__init__.py", + "/home/yannic/work/stacosys/stacosys/core/__init__.py", + "/home/yannic/work/stacosys/stacosys/service/rssfeed.py", + "/home/yannic/work/stacosys/stacosys/service/mail.py", + "/home/yannic/work/stacosys/stacosys/core/configuration.py", + "/home/yannic/.cache/sublime-text-3/Package Storage/LSP-pyright/18.7.0/language-server/node_modules/pyright/dist/typeshed-fallback/stdlib/builtins.pyi", + "/home/yannic/work/stacosys/.pylintrc", + "/home/yannic/work/stacosys/stacosys/interface/form.py", + "/home/yannic/work/stacosys/tests/test_config.py", + "/home/yannic/work/stacosys/tests/test_form.py", + "/home/yannic/work/stacosys/tests/test_api.py", + "/home/yannic/work/stacosys/stacosys/core/mailer.py", + "/home/yannic/work/stacosys/stacosys/conf/config.py", + "/home/yannic/work/stacosys/stacosys/core/rss.py", + "/home/yannic/work/stacosys/stacosys/db/dao.py", + "/home/yannic/work/stacosys/stacosys/run.py", + "/home/yannic/work/stacosys/stacosys/db/database.py", + "/home/yannic/work/stacosys/Makefile", + "/home/yannic/work/stacosys/run.sh", + "/home/yannic/work/stacosys/stacosys/interface/web/admin.py", + "/home/yannic/work/stacosys/stacosys/interface/__init__.py", + "/home/yannic/work/stacosys/stacosys/interface/api.py", "/home/yannic/work/stacosys/stacosys.sublime-project", + "/home/yannic/work/stacosys/stacosys/model/comment.py", + "/home/yannic/work/stacosys/pylintrc", + "/home/yannic/work/stacosys/.venv/lib/python3.11/site-packages/flask/app.py", + "/home/yannic/.cache/sublime-text-3/Package Storage/LSP-pyright/18.7.0/language-server/node_modules/pyright/dist/typeshed-fallback/stdlib/sys.pyi", "/home/yannic/work/stacosys/flake8.ini", - "/home/yannic/work/stacosys/Makefile", - "/home/yannic/work/stacosys/stacosys/__init__.py", - "/home/yannic/work/stacosys/stacosys/core/rss.py" + "/home/yannic/work/stacosys/stacosys/__init__.py" ], "find": { @@ -485,9 +3307,10 @@ }, "find_in_files": { - "height": 0.0, + "height": 104.0, "where_history": [ + "" ] }, "find_state": @@ -495,6 +3318,10 @@ "case_sensitive": false, "find_history": [ + "config", + "SITE_TOKE", + "app.conf", + "disable", "background" ], "highlight": true, @@ -519,49 +3346,83 @@ [ { "buffer": 0, - "file": "run.sh", + "file": "stacosys/interface/web/admin.py", "semi_transient": false, "settings": { - "buffer_size": 40, + "buffer_size": 2472, "regions": { + "bp-718b6604": + { + "flags": 16, + "icon": "Packages/Theme - Default/common/circle.png", + "regions": + [ + [ + 826, + 826 + ] + ], + "scope": "invalid" + } }, "selection": [ [ - 27, - 27 + 1207, + 1207 ] ], "settings": { - "lsp_uri": "file:///home/yannic/work/stacosys/run.sh", - "syntax": "Packages/ShellScript/Bash.sublime-syntax" + "auto_complete_triggers": + [ + { + "characters": "<", + "selector": "text.html, text.xml" + }, + { + "rhs_empty": true, + "selector": "punctuation.accessor" + }, + { + "characters": ".[", + "selector": "meta.tag, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc", + "server": "LSP-pyright" + } + ], + "lsp_active": true, + "lsp_hover_provider_count": 8, + "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/interface/web/admin.py", + "show_definitions": false, + "syntax": "Packages/Python/Python.sublime-syntax", + "tab_size": 4, + "translate_tabs_to_spaces": true }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 7, + "stack_index": 1, "stack_multiselect": false, "type": "text" }, { "buffer": 1, - "file": "stacosys/run.py", + "file": "tests/test_config.py", "semi_transient": false, "settings": { - "buffer_size": 3298, + "buffer_size": 1382, "regions": { }, "selection": [ [ - 1918, - 1918 + 1222, + 1222 ] ], "settings": @@ -583,69 +3444,67 @@ } ], "lsp_active": true, - "lsp_hover_provider_count": 10, - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/run.py", + "lsp_hover_provider_count": 4, + "lsp_uri": "file:///home/yannic/work/stacosys/tests/test_config.py", "show_definitions": false, "syntax": "Packages/Python/Python.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 964.0, + "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 6, + "stack_index": 2, "stack_multiselect": false, "type": "text" }, { "buffer": 2, - "file": "Makefile", - "semi_transient": false, + "file": "Dockerfile", + "selected": true, + "semi_transient": true, "settings": { - "buffer_size": 533, + "buffer_size": 716, "regions": { }, "selection": [ [ - 334, - 334 + 0, + 0 ] ], "settings": { - "lsp_uri": "file:///home/yannic/work/stacosys/Makefile", - "syntax": "Packages/Makefile/Makefile.sublime-syntax", - "tab_size": 4, - "translate_tabs_to_spaces": false + "lsp_uri": "file:///home/yannic/work/stacosys/Dockerfile", + "syntax": "Packages/Text/Plain text.tmLanguage" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 1, + "stack_index": 0, "stack_multiselect": false, "type": "text" }, { "buffer": 3, - "file": "stacosys/core/mailer.py", - "selected": true, + "file": "tests/test_api.py", "semi_transient": false, "settings": { - "buffer_size": 1087, + "buffer_size": 1634, "regions": { }, "selection": [ [ - 1086, - 1086 + 0, + 0 ] ], "settings": @@ -667,36 +3526,36 @@ } ], "lsp_active": true, - "lsp_hover_provider_count": 10, - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/core/mailer.py", + "lsp_hover_provider_count": 4, + "lsp_uri": "file:///home/yannic/work/stacosys/tests/test_api.py", "show_definitions": false, "syntax": "Packages/Python/Python.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 399.0, + "translation.y": 114.0, "zoom_level": 1.0 }, - "stack_index": 0, + "stack_index": 3, "stack_multiselect": false, "type": "text" }, { "buffer": 4, - "file": "stacosys/db/dao.py", - "semi_transient": true, + "file": "stacosys/service/__init__.py", + "semi_transient": false, "settings": { - "buffer_size": 1633, + "buffer_size": 180, "regions": { }, "selection": [ [ - 524, - 524 + 149, + 149 ] ], "settings": @@ -718,68 +3577,85 @@ } ], "lsp_active": true, - "lsp_hover_provider_count": 1, - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/db/dao.py", + "lsp_hover_provider_count": 5, + "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/service/__init__.py", "show_definitions": false, - "syntax": "Packages/Python/Python.sublime-syntax", - "tab_size": 4, - "translate_tabs_to_spaces": true + "syntax": "Packages/Python/Python.sublime-syntax" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 3, + "stack_index": 4, "stack_multiselect": false, "type": "text" }, { "buffer": 5, - "file": "stacosys.sublime-project", + "file": "stacosys/interface/form.py", "semi_transient": false, "settings": { - "buffer_size": 381, + "buffer_size": 2659, "regions": { }, "selection": [ [ - 364, - 364 + 2356, + 2356 ] ], "settings": { - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys.sublime-project", - "syntax": "Packages/JSON/JSON.sublime-syntax", + "auto_complete_triggers": + [ + { + "characters": "<", + "selector": "text.html, text.xml" + }, + { + "rhs_empty": true, + "selector": "punctuation.accessor" + }, + { + "characters": ".[", + "selector": "meta.tag, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc", + "server": "LSP-pyright" + } + ], + "lsp_active": true, + "lsp_hover_provider_count": 6, + "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/interface/form.py", + "show_definitions": false, + "syntax": "Packages/Python/Python.sublime-syntax", "tab_size": 4, "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 0.0, + "translation.y": 1311.0, "zoom_level": 1.0 }, - "stack_index": 2, + "stack_index": 5, "stack_multiselect": false, "type": "text" }, { "buffer": 6, - "file": "stacosys/model/comment.py", + "file": "stacosys/run.py", "semi_transient": false, "settings": { - "buffer_size": 471, + "buffer_size": 2789, "regions": { }, "selection": [ [ - 150, - 150 + 2063, + 2063 ] ], "settings": @@ -802,7 +3678,7 @@ ], "lsp_active": true, "lsp_hover_provider_count": 6, - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/model/comment.py", + "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/run.py", "show_definitions": false, "syntax": "Packages/Python/Python.sublime-syntax", "tab_size": 4, @@ -812,58 +3688,39 @@ "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 4, + "stack_index": 6, "stack_multiselect": false, "type": "text" }, { "buffer": 7, - "file": "stacosys/conf/config.py", + "file": "Makefile", "semi_transient": false, "settings": { - "buffer_size": 2481, + "buffer_size": 253, "regions": { }, "selection": [ [ - 0, - 0 + 251, + 251 ] ], "settings": { - "auto_complete_triggers": - [ - { - "characters": "<", - "selector": "text.html, text.xml" - }, - { - "rhs_empty": true, - "selector": "punctuation.accessor" - }, - { - "characters": ".[", - "selector": "meta.tag, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc", - "server": "LSP-pyright" - } - ], - "lsp_active": true, - "lsp_hover_provider_count": 6, - "lsp_uri": "file:///home/yannic/work/stacosys/stacosys/conf/config.py", - "show_definitions": false, - "syntax": "Packages/Python/Python.sublime-syntax", + "lsp_uri": "file:///home/yannic/work/stacosys/Makefile", + "syntax": "Packages/Makefile/Makefile.sublime-syntax", "tab_size": 4, - "translate_tabs_to_spaces": true + "translate_tabs_to_spaces": false }, "translation.x": 0.0, - "translation.y": 1539.0, + "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 5, + "stack_index": 7, "stack_multiselect": false, "type": "text" } @@ -876,7 +3733,7 @@ }, "input": { - "height": 0.0 + "height": 40.0 }, "layout": { @@ -909,6 +3766,10 @@ { "height": 261.0 }, + "output.exec": + { + "height": 132.0 + }, "output.find_results": { "height": 0.0 @@ -943,12 +3804,12 @@ }, "select_project": { - "height": 0.0, + "height": 500.0, "last_filter": "", "selected_items": [ ], - "width": 0.0 + "width": 380.0 }, "select_symbol": { @@ -967,7 +3828,7 @@ "show_open_files": false, "show_tabs": true, "side_bar_visible": true, - "side_bar_width": 311.0, + "side_bar_width": 302.0, "status_bar_visible": true, "template_settings": { diff --git a/stacosys/core/rss.py b/stacosys/core/rss.py deleted file mode 100644 index 42f9b8d..0000000 --- a/stacosys/core/rss.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/python -# -*- coding: UTF-8 -*- - -from datetime import datetime - -import markdown -import PyRSS2Gen - -from stacosys.model.comment import Comment - - -class Rss: - def __init__( - self, - lang, - rss_file, - rss_proto, - site_name, - site_url, - ): - self._lang = lang - self._rss_file = rss_file - self._rss_proto = rss_proto - self._site_name = site_name - self._site_url = site_url - - def generate(self): - md = markdown.Markdown() - - items = [] - for row in ( - Comment.select() - .where(Comment.published) - .order_by(-Comment.published) - .limit(10) - ): - item_link = "%s://%s%s" % ( - self._rss_proto, - self._site_url, - row.url, - ) - items.append( - PyRSS2Gen.RSSItem( - title="%s - %s://%s%s" - % ( - self._rss_proto, - row.author_name, - self._site_url, - row.url, - ), - link=item_link, - description=md.convert(row.content), - guid=PyRSS2Gen.Guid("%s/%d" % (item_link, row.id)), - pubDate=row.published, - ) - ) - - rss_title = 'Commentaires du site "%s"' % self._site_name - rss = PyRSS2Gen.RSS2( - title=rss_title, - link="%s://%s" % (self._rss_proto, self._site_url), - description=rss_title, - lastBuildDate=datetime.now(), - items=items, - ) - rss.write_xml(open(self._rss_file, "w"), encoding="utf-8") diff --git a/stacosys/interface/form.py b/stacosys/interface/form.py index 04b52b3..52b5bb8 100644 --- a/stacosys/interface/form.py +++ b/stacosys/interface/form.py @@ -7,6 +7,8 @@ from flask import abort, redirect, request from stacosys.db import dao from stacosys.interface import app +from stacosys.service import config, mailer +from stacosys.service.configuration import ConfigParameter logger = logging.getLogger(__name__) @@ -46,7 +48,7 @@ def new_form_comment(): # send notification e-mail asynchronously submit_new_comment(comment) - return redirect(app.config.get("SITE_REDIRECT"), code=302) + return redirect(config.get(ConfigParameter.SITE_REDIRECT), code=302) def check_form_data(posted_comment): @@ -57,7 +59,7 @@ def check_form_data(posted_comment): @background.task def submit_new_comment(comment): - site_url = app.config.get("SITE_URL") + site_url = config.get(ConfigParameter.SITE_URL) comment_list = ( f"Web admin interface: {site_url}/web/admin", "", @@ -72,8 +74,9 @@ def submit_new_comment(comment): email_body = "\n".join(comment_list) # send email to notify admin - subject = "STACOSYS " + app.config.get("SITE_NAME") - if app.config.get("MAILER").send(subject, email_body): + site_name = config.get(ConfigParameter.SITE_NAME) + subject = f"STACOSYS {site_name}" + if mailer.send(subject, email_body): logger.debug("new comment processed") # save notification datetime diff --git a/stacosys/interface/web/admin.py b/stacosys/interface/web/admin.py index 26d172f..8d81e3c 100644 --- a/stacosys/interface/web/admin.py +++ b/stacosys/interface/web/admin.py @@ -8,6 +8,8 @@ from flask import flash, redirect, render_template, request, session from stacosys.db import dao from stacosys.interface import app +from stacosys.service import config, rss +from stacosys.service.configuration import ConfigParameter logger = logging.getLogger(__name__) @@ -23,8 +25,8 @@ def index(): def is_login_ok(username, password): hashed = hashlib.sha256(password.encode()).hexdigest().upper() return ( - app.config.get("WEB_USERNAME") == username - and app.config.get("WEB_PASSWORD") == hashed + config.get(ConfigParameter.WEB_USERNAME) == username + and config.get(ConfigParameter.WEB_PASSWORD) == hashed ) @@ -40,7 +42,7 @@ def login(): flash("Identifiant ou mot de passe incorrect") return redirect("/web/login") # GET - return render_template("login_" + app.config.get("LANG", "fr") + ".html") + return render_template("login_" + config.get(ConfigParameter.LANG) + ".html") @app.route("/web/logout", methods=["GET"]) @@ -51,16 +53,19 @@ def logout(): @app.route("/web/admin", methods=["GET"]) def admin_homepage(): - if not ("user" in session and session["user"] == app.config.get("WEB_USERNAME")): + if not ( + "user" in session + and session["user"] == config.get(ConfigParameter.WEB_USERNAME) + ): # TODO localization flash("Vous avez été déconnecté.") return redirect("/web/login") comments = dao.find_not_published_comments() return render_template( - "admin_" + app.config.get("LANG", "fr") + ".html", + "admin_" + config.get(ConfigParameter.LANG) + ".html", comments=comments, - baseurl=app.config.get("SITE_URL"), + baseurl=config.get(ConfigParameter.SITE_URL), ) @@ -72,7 +77,7 @@ def admin_action(): flash("Commentaire introuvable") elif request.form.get("action") == "APPROVE": dao.publish_comment(comment) - app.config.get("RSS").generate() + rss.generate() # TODO localization flash("Commentaire publié") else: diff --git a/stacosys/run.py b/stacosys/run.py index 197215b..5109299 100644 --- a/stacosys/run.py +++ b/stacosys/run.py @@ -6,12 +6,11 @@ import logging import os import sys -from stacosys.conf.config import Config, ConfigParameter -from stacosys.core.mailer import Mailer -from stacosys.core.rss import Rss from stacosys.db import database from stacosys.interface import api, app, form from stacosys.interface.web import admin +from stacosys.service import config, mailer, rss +from stacosys.service.configuration import ConfigParameter # configure logging @@ -37,16 +36,16 @@ def stacosys_server(config_pathname): logger.error("Configuration file '%s' not found.", config_pathname) sys.exit(1) - # load config - conf = Config.load(config_pathname) - is_config_ok, erreur_config = conf.check() + # load and check config + config.load(config_pathname) + is_config_ok, erreur_config = config.check() if not is_config_ok: logger.error("Configuration incorrecte '%s'", erreur_config) sys.exit(1) - logger.info(conf) + logger.info(config) # check database file exists (prevents from creating a fresh db) - db_pathname = conf.get(ConfigParameter.DB_SQLITE_FILE) + db_pathname = config.get(ConfigParameter.DB_SQLITE_FILE) if not db_pathname or not os.path.isfile(db_pathname): logger.error("Database file '%s' not found.", db_pathname) sys.exit(1) @@ -57,39 +56,29 @@ def stacosys_server(config_pathname): logger.info("Start Stacosys application") # generate RSS - rss = Rss( - conf.get(ConfigParameter.LANG), - conf.get(ConfigParameter.RSS_FILE), - conf.get(ConfigParameter.RSS_PROTO), - conf.get(ConfigParameter.SITE_NAME), - conf.get(ConfigParameter.SITE_URL), + rss.configure( + config.get(ConfigParameter.RSS_FILE), + config.get(ConfigParameter.SITE_PROTO), + config.get(ConfigParameter.SITE_NAME), + config.get(ConfigParameter.SITE_URL), ) rss.generate() # configure mailer - mailer = Mailer( - conf.get(ConfigParameter.SMTP_HOST), - conf.get_int(ConfigParameter.SMTP_PORT), - conf.get(ConfigParameter.SMTP_LOGIN), - conf.get(ConfigParameter.SMTP_PASSWORD), - conf.get(ConfigParameter.SITE_ADMIN_EMAIL), + mailer.configure_smtp( + config.get(ConfigParameter.SMTP_HOST), + config.get_int(ConfigParameter.SMTP_PORT), + config.get(ConfigParameter.SMTP_LOGIN), + config.get(ConfigParameter.SMTP_PASSWORD), ) + mailer.configure_destination(config.get(ConfigParameter.SITE_ADMIN_EMAIL)) - # inject config parameters into flask - app.config.update(LANG=conf.get(ConfigParameter.LANG)) - app.config.update(SITE_NAME=conf.get(ConfigParameter.SITE_NAME)) - app.config.update(SITE_URL=conf.get(ConfigParameter.SITE_URL)) - app.config.update(SITE_REDIRECT=conf.get(ConfigParameter.SITE_REDIRECT)) - app.config.update(WEB_USERNAME=conf.get(ConfigParameter.WEB_USERNAME)) - app.config.update(WEB_PASSWORD=conf.get(ConfigParameter.WEB_PASSWORD)) - app.config.update(MAILER=mailer) - app.config.update(RSS=rss) logger.info("start interfaces %s %s %s", api, form, admin) # start Flask app.run( - host=conf.get(ConfigParameter.HTTP_HOST), - port=conf.get_int(ConfigParameter.HTTP_PORT), + host=config.get(ConfigParameter.HTTP_HOST), + port=config.get_int(ConfigParameter.HTTP_PORT), debug=False, use_reloader=False, ) diff --git a/stacosys/service/__init__.py b/stacosys/service/__init__.py new file mode 100644 index 0000000..6fcc80a --- /dev/null +++ b/stacosys/service/__init__.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from .configuration import Config +from .mail import Mailer +from .rssfeed import Rss + +config = Config() +mailer = Mailer() +rss = Rss() diff --git a/stacosys/conf/config.py b/stacosys/service/configuration.py similarity index 76% rename from stacosys/conf/config.py rename to stacosys/service/configuration.py index 78adea8..85b3db8 100644 --- a/stacosys/conf/config.py +++ b/stacosys/service/configuration.py @@ -12,7 +12,6 @@ class ConfigParameter(Enum): HTTP_HOST = "http.host" HTTP_PORT = "http.port" - RSS_PROTO = "rss.proto" RSS_FILE = "rss.file" SMTP_HOST = "smtp.host" @@ -20,6 +19,7 @@ class ConfigParameter(Enum): SMTP_LOGIN = "smtp.login" SMTP_PASSWORD = "smtp.password" + SITE_PROTO = "site.proto" SITE_NAME = "site.name" SITE_URL = "site.url" SITE_ADMIN_EMAIL = "site.admin_email" @@ -30,14 +30,16 @@ class ConfigParameter(Enum): class Config: - def __init__(self): - self._cfg = configparser.ConfigParser() - @classmethod - def load(cls, config_pathname): - config = cls() - config._cfg.read(config_pathname) - return config + _cfg = configparser.ConfigParser() + + # def __new__(cls): + # if not hasattr(cls, "instance"): + # cls.instance = super(Config, cls).__new__(cls) + # return cls.instance + + def load(self, config_pathname): + self._cfg.read(config_pathname) def _split_key(self, key: ConfigParameter): section, param = str(key.value).split(".") @@ -50,12 +52,12 @@ class Config: section, param = self._split_key(key) return self._cfg.has_option(section, param) - def get(self, key: ConfigParameter): + def get(self, key: ConfigParameter) -> str: section, param = self._split_key(key) return ( self._cfg.get(section, param) if self._cfg.has_option(section, param) - else None + else "" ) def put(self, key: ConfigParameter, value): @@ -64,11 +66,11 @@ class Config: self._cfg.add_section(section) self._cfg.set(section, param, str(value)) - def get_int(self, key: ConfigParameter): + def get_int(self, key: ConfigParameter) -> int: value = self.get(key) return int(value) if value else 0 - def get_bool(self, key: ConfigParameter): + def get_bool(self, key: ConfigParameter) -> bool: value = self.get(key) assert value in ( "yes", @@ -85,8 +87,8 @@ class Config: return (True, None) def __repr__(self): - d = dict() + dict_repr = {} for section in self._cfg.sections(): for option in self._cfg.options(section): - d[".".join([section, option])] = self._cfg.get(section, option) - return str(d) + dict_repr[".".join([section, option])] = self._cfg.get(section, option) + return str(dict_repr) diff --git a/stacosys/core/mailer.py b/stacosys/service/mail.py similarity index 71% rename from stacosys/core/mailer.py rename to stacosys/service/mail.py index 43ec706..6d756bb 100644 --- a/stacosys/core/mailer.py +++ b/stacosys/service/mail.py @@ -10,21 +10,29 @@ logger = logging.getLogger(__name__) class Mailer: - def __init__( + def __init__(self) -> None: + self._smtp_host: str = "" + self._smtp_port: int = 0 + self._smtp_login: str = "" + self._smtp_password: str = "" + self._site_admin_email: str = "" + + def configure_smtp( self, smtp_host, smtp_port, smtp_login, smtp_password, - site_admin_email, - ): + ) -> None: self._smtp_host = smtp_host self._smtp_port = smtp_port self._smtp_login = smtp_login self._smtp_password = smtp_password + + def configure_destination(self, site_admin_email) -> None: self._site_admin_email = site_admin_email - def send(self, subject, message): + def send(self, subject, message) -> bool: sender = self._smtp_login receivers = [self._site_admin_email] @@ -34,7 +42,7 @@ class Mailer: msg["From"] = sender context = ssl.create_default_context() - # TODO catch SMTP failure + # TODO catch SMTP failure with smtplib.SMTP_SSL( self._smtp_host, self._smtp_port, context=context ) as server: diff --git a/stacosys/service/rssfeed.py b/stacosys/service/rssfeed.py new file mode 100644 index 0000000..a5f5c12 --- /dev/null +++ b/stacosys/service/rssfeed.py @@ -0,0 +1,63 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +from datetime import datetime + +import markdown +import PyRSS2Gen + +from stacosys.model.comment import Comment + + +class Rss: + def __init__(self) -> None: + self._rss_file: str = "" + self._site_proto: str = "" + self._site_name: str = "" + self._site_url: str = "" + + def configure( + self, + rss_file, + site_proto, + site_name, + site_url, + ) -> None: + self._rss_file = rss_file + self._site_proto = site_proto + self._site_name = site_name + self._site_url = site_url + + def generate(self) -> None: + markdownizer = markdown.Markdown() + + items = [] + for row in ( + Comment.select() + .where(Comment.published) + .order_by(-Comment.published) + .limit(10) + ): + item_link = f"{self._site_proto}://{self._site_url}{row.url}" + items.append( + PyRSS2Gen.RSSItem( + title=f"{self._site_proto}://{self._site_url}{row.url} - {row.author_name}", + link=item_link, + description=markdownizer.convert(row.content), + guid=PyRSS2Gen.Guid(f"{item_link}{row.id}"), + pubDate=row.published, + ) + ) + + rss_title = f"Commentaires du site {self._site_name}" + rss = PyRSS2Gen.RSS2( + title=rss_title, + link=f"{self._site_proto}://{self._site_url}", + description=rss_title, + lastBuildDate=datetime.now(), + items=items, + ) + # TODO technical debt: replace pyRss2Gen + # TODO validate feed (https://validator.w3.org/feed/check.cgi) + # pylint: disable=consider-using-with + rss.write_xml(open(self._rss_file, "w", encoding="utf-8"), encoding="utf-8") diff --git a/tests/test_api.py b/tests/test_api.py index 6cb2196..8efd052 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -25,7 +25,6 @@ def client(): logger = logging.getLogger(__name__) database.setup(":memory:") init_test_db() - app.config.update(SITE_TOKEN="ETC") logger.info(f"start interface {api}") return app.test_client() diff --git a/tests/test_config.py b/tests/test_config.py index e098965..3aaaaff 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -3,7 +3,8 @@ import unittest -from stacosys.conf.config import Config, ConfigParameter +from stacosys.service import config +from stacosys.service.configuration import ConfigParameter EXPECTED_DB_SQLITE_FILE = "db.sqlite" EXPECTED_HTTP_PORT = 8080 @@ -11,31 +12,30 @@ EXPECTED_LANG = "fr" class ConfigTestCase(unittest.TestCase): - def setUp(self): - self.conf = Config() - self.conf.put(ConfigParameter.DB_SQLITE_FILE, EXPECTED_DB_SQLITE_FILE) - self.conf.put(ConfigParameter.HTTP_PORT, EXPECTED_HTTP_PORT) + def setUp(self): + config.put(ConfigParameter.DB_SQLITE_FILE, EXPECTED_DB_SQLITE_FILE) + config.put(ConfigParameter.HTTP_PORT, EXPECTED_HTTP_PORT) def test_exists(self): - self.assertTrue(self.conf.exists(ConfigParameter.DB_SQLITE_FILE)) + self.assertTrue(config.exists(ConfigParameter.DB_SQLITE_FILE)) def test_get(self): self.assertEqual( - self.conf.get(ConfigParameter.DB_SQLITE_FILE), EXPECTED_DB_SQLITE_FILE + config.get(ConfigParameter.DB_SQLITE_FILE), EXPECTED_DB_SQLITE_FILE ) - self.assertIsNone(self.conf.get(ConfigParameter.HTTP_HOST)) + self.assertEqual(config.get(ConfigParameter.HTTP_HOST), "") self.assertEqual( - self.conf.get(ConfigParameter.HTTP_PORT), str(EXPECTED_HTTP_PORT) + config.get(ConfigParameter.HTTP_PORT), str(EXPECTED_HTTP_PORT) ) - self.assertEqual(self.conf.get_int(ConfigParameter.HTTP_PORT), 8080) + self.assertEqual(config.get_int(ConfigParameter.HTTP_PORT), 8080) try: - self.conf.get_bool(ConfigParameter.DB_SQLITE_FILE) + config.get_bool(ConfigParameter.DB_SQLITE_FILE) self.assertTrue(False) except AssertionError: pass def test_put(self): - self.assertFalse(self.conf.exists(ConfigParameter.LANG)) - self.conf.put(ConfigParameter.LANG, EXPECTED_LANG) - self.assertTrue(self.conf.exists(ConfigParameter.LANG)) - self.assertEqual(self.conf.get(ConfigParameter.LANG), EXPECTED_LANG) + self.assertFalse(config.exists(ConfigParameter.LANG)) + config.put(ConfigParameter.LANG, EXPECTED_LANG) + self.assertTrue(config.exists(ConfigParameter.LANG)) + self.assertEqual(config.get(ConfigParameter.LANG), EXPECTED_LANG) diff --git a/tests/test_form.py b/tests/test_form.py index 55ebda8..dedef3a 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -13,8 +13,7 @@ from stacosys.interface import form @pytest.fixture def client(): logger = logging.getLogger(__name__) - database.setup(":memory:") - app.config.update(SITE_REDIRECT="/redirect") + database.setup(":memory:") logger.info(f"start interface {form}") return app.test_client()